Imported Upstream version 1.21.0
[platform/core/ml/nnfw.git] / compiler / tf2tflite-dredd-pbtxt-test / CMakeLists.txt
1 if(NOT ENABLE_TEST)
2   return()
3 endif(NOT ENABLE_TEST)
4
5 nnas_include(TargetRequire)
6
7 unset(REQUIRED_TARGETS)
8 list(APPEND REQUIRED_TARGETS tfl-verify)
9 list(APPEND REQUIRED_TARGETS tfl-inspect)
10 list(APPEND REQUIRED_TARGETS tf2tflite)
11 list(APPEND REQUIRED_TARGETS tfkit)
12 list(APPEND REQUIRED_TARGETS dredd_rule_lib)
13 TargetRequire_Return(${REQUIRED_TARGETS})
14
15 nncc_find_resource(TensorFlowTests)
16
17 set(MODEL_REPO "${TensorFlowTests_DIR}") # Where to find text models to test
18
19 unset(KEYS)
20 unset(DEPS)
21
22 #
23 # processing models in test.lst and test.local.lst
24 #
25 # Example)
26 #
27 #  Add(NET_0025 RULE test.rule)
28 #    -> Read test.pbtxt file under res/TensorFlowTests/NET_0025 and create "NET_0025.tflite"
29 #       Then the tflite is tested against rules in test.rule file.
30 #
31 macro(Add MODEL_DIR)
32
33   set(ARG_OPTION)
34   set(ARG_ONE_VALUE RULE) # rule file name
35   set(ARG_MULTI_VALUE)
36   cmake_parse_arguments(ARG "${ARG_OPTION}" "${ARG_ONE_VALUE}" "${ARG_MULTI_VALUE}" ${ARGN})
37
38   if(NOT ARG_RULE)
39     message( FATAL_ERROR "RULE is mandadatory arg" )
40   endif()
41
42   set(RULE_FILENAME ${ARG_RULE})
43
44   set(TARGET_TESTNAME "${MODEL_DIR}")
45
46   set(MODEL_SOURCE_DIR "${MODEL_REPO}/${MODEL_DIR}")
47
48   set(TXT_SOURCE_PBTXT_PATH "${MODEL_SOURCE_DIR}/test.pbtxt")
49   set(TXT_SOURCE_INFO_PATH "${MODEL_SOURCE_DIR}/test.info")
50   set(TXT_SOURCE_RULE_PATH "${MODEL_SOURCE_DIR}/${RULE_FILENAME}")
51
52   set(TXT_TARGET_PB_PATH "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_TESTNAME}.pb")
53   set(TXT_TARGET_PBTXT_PATH "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_TESTNAME}.pbtxt")
54   set(TXT_TARGET_INFO_PATH "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_TESTNAME}.info")
55   set(TXT_TARGET_RULE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_TESTNAME}.rule")
56
57   if(NOT EXISTS "${TXT_SOURCE_PBTXT_PATH}")
58     message(FATAL_ERROR "${TXT_SOURCE_PBTXT_PATH} - pbtxt file does not exist")
59   endif(NOT EXISTS "${TXT_SOURCE_PBTXT_PATH}")
60
61   if(NOT EXISTS "${TXT_SOURCE_INFO_PATH}")
62     message(FATAL_ERROR "${TXT_SOURCE_INFO_PATH} - info file does not exist")
63   endif(NOT EXISTS "${TXT_SOURCE_INFO_PATH}")
64
65   if(NOT EXISTS "${TXT_SOURCE_RULE_PATH}")
66     message(FATAL_ERROR "${TXT_SOURCE_RULE_PATH} - rule file does not exist")
67   endif(NOT EXISTS "${TXT_SOURCE_RULE_PATH}")
68
69   # Copy .pbtxt
70   add_custom_command(OUTPUT ${TXT_TARGET_PBTXT_PATH}
71     COMMAND ${CMAKE_COMMAND} -E copy "${TXT_SOURCE_PBTXT_PATH}" "${TXT_TARGET_PBTXT_PATH}"
72     DEPENDS ${TXT_SOURCE_PBTXT_PATH}
73     COMMENT "Generate ${TXT_TARGET_PBTXT_PATH}"
74   )
75
76   # Copy .info
77   add_custom_command(OUTPUT ${TXT_TARGET_INFO_PATH}
78     COMMAND ${CMAKE_COMMAND} -E copy "${TXT_SOURCE_INFO_PATH}" "${TXT_TARGET_INFO_PATH}"
79     DEPENDS ${TXT_SOURCE_INFO_PATH}
80     COMMENT "Generate ${TXT_TARGET_INFO_PATH}"
81   )
82
83   # Copy .rule
84   add_custom_command(OUTPUT ${TXT_TARGET_RULE_PATH}
85     COMMAND ${CMAKE_COMMAND} -E copy "${TXT_SOURCE_RULE_PATH}" "${TXT_TARGET_RULE_PATH}"
86     DEPENDS ${TXT_SOURCE_RULE_PATH}
87     COMMENT "Generate ${TXT_TARGET_RULE_PATH}"
88   )
89
90   # Generate .pb from .pbtxt
91   add_custom_command(OUTPUT ${TXT_TARGET_PB_PATH}
92     COMMAND $<TARGET_FILE:tfkit> encode ${TXT_TARGET_PBTXT_PATH} ${TXT_TARGET_PB_PATH}
93     DEPENDS ${TXT_TARGET_PBTXT_PATH}
94     COMMENT "Generate ${TXT_TARGET_PB_PATH}"
95   )
96
97   # Generate .test file which declares path of target pb, info, rule files
98   # this file is used inside runner.sh
99   set(TEST_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_TESTNAME}.test")
100
101   add_custom_command(
102     OUTPUT ${TEST_CONFIG_FILE}
103     COMMAND ${CMAKE_COMMAND} -E remove -f ${TEST_CONFIG_FILE}
104     COMMAND ${CMAKE_COMMAND} -E echo 'MODEL_PB_PATH="${TXT_TARGET_PB_PATH}"' >> ${TEST_CONFIG_FILE}
105     COMMAND ${CMAKE_COMMAND} -E echo 'MODEL_INFO_PATH="${TXT_TARGET_INFO_PATH}"' >> ${TEST_CONFIG_FILE}
106     COMMAND ${CMAKE_COMMAND} -E echo 'MODEL_RULE_PATH="${TXT_TARGET_RULE_PATH}"' >> ${TEST_CONFIG_FILE}
107     DEPENDS
108       ${TXT_TARGET_PB_PATH}
109       ${TXT_TARGET_INFO_PATH}
110       ${TXT_TARGET_RULE_PATH}
111     COMMENT "Generate ${TARGET_TESTNAME} configuration for TXT"
112   )
113
114   list(APPEND DEPS "${TEST_CONFIG_FILE}")
115   list(APPEND KEYS "${TARGET_TESTNAME}")
116
117 endmacro(Add)
118
119 # Read "test.lst"
120 include("test.lst")
121 # Read "test.local.lst" if exists
122 include("test.local.lst" OPTIONAL)
123
124 #
125 # Generate toolchain.config
126 #
127 set(TOOLCHAIN_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/toolchain.config")
128
129 add_custom_command(
130   OUTPUT ${TOOLCHAIN_CONFIG}
131   COMMAND ${CMAKE_COMMAND} -E remove -f ${TOOLCHAIN_CONFIG}
132   COMMAND ${CMAKE_COMMAND} -E echo 'TFL_INSPECT_PATH=\"$<TARGET_FILE:tfl-inspect>\"' >> ${TOOLCHAIN_CONFIG}
133   COMMAND ${CMAKE_COMMAND} -E echo 'TFL_VERIFY_PATH=\"$<TARGET_FILE:tfl-verify>\"' >> ${TOOLCHAIN_CONFIG}
134   COMMAND ${CMAKE_COMMAND} -E echo 'TF2TFLITE_PATH=\"$<TARGET_FILE:tf2tflite>\"' >> ${TOOLCHAIN_CONFIG}
135   # add more if new excutable file is needed in runner.sh and rule-lib.sh
136   DEPENDS
137     tfl-inspect
138     tfl-verify
139     tf2tflite
140   COMMENT "Generate toolchin configuration"
141 )
142
143 list(APPEND DEPS "${TOOLCHAIN_CONFIG}")
144
145 #
146 # copy runner.sh
147 #
148 set(SOURCE_RUNNER "${CMAKE_CURRENT_SOURCE_DIR}/runner.sh")
149 set(TARGET_RUNNER "${CMAKE_CURRENT_BINARY_DIR}/runner.sh")
150
151 add_custom_command(
152   OUTPUT ${TARGET_RUNNER}
153   COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_RUNNER}" "${TARGET_RUNNER}"
154   DEPENDS ${SOURCE_RUNNER}
155   COMMENT "Generate test runner"
156 )
157
158 list(APPEND DEPS "${TARGET_RUNNER}")
159
160 #
161 # copy rule-lib.sh (a library of shell script functions)
162 #
163
164 # getting path for rule-lib.sh in dredd-rule-lib
165 get_target_property(DREDD_RULE_LIB_DIR dredd_rule_lib BINARY_DIR)
166
167 set(SOURCE_RULE_LIB "${DREDD_RULE_LIB_DIR}/rule-lib.sh")
168 set(TARGET_RULE_LIB "${CMAKE_CURRENT_BINARY_DIR}/rule-lib.sh")
169
170 add_custom_command(
171   OUTPUT ${TARGET_RULE_LIB}
172   COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_RULE_LIB}" "${TARGET_RULE_LIB}"
173   DEPENDS ${SOURCE_RULE_LIB}
174   COMMENT "Generate rule lib"
175 )
176
177 list(APPEND DEPS "${TARGET_RULE_LIB}")
178
179 # Generate dependencies
180 add_custom_target(tf2tflite_dredd_pbtxt_deps ALL DEPENDS ${DEPS})
181
182 add_test(
183   NAME tf2tflite_dredd_pbtxt_test
184   COMMAND
185     "${TARGET_RUNNER}"
186     "${TOOLCHAIN_CONFIG}"
187     ${KEYS}
188 )