5 nnas_include(TargetRequire)
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})
15 nncc_find_resource(TensorFlowTests)
17 set(MODEL_REPO "${TensorFlowTests_DIR}") # Where to find text models to test
23 # processing models in test.lst and test.local.lst
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.
34 set(ARG_ONE_VALUE RULE) # rule file name
36 cmake_parse_arguments(ARG "${ARG_OPTION}" "${ARG_ONE_VALUE}" "${ARG_MULTI_VALUE}" ${ARGN})
39 message( FATAL_ERROR "RULE is mandadatory arg" )
42 set(RULE_FILENAME ${ARG_RULE})
44 set(TARGET_TESTNAME "${MODEL_DIR}")
46 set(MODEL_SOURCE_DIR "${MODEL_REPO}/${MODEL_DIR}")
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}")
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")
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}")
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}")
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}")
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}"
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}"
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}"
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}"
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")
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}
108 ${TXT_TARGET_PB_PATH}
109 ${TXT_TARGET_INFO_PATH}
110 ${TXT_TARGET_RULE_PATH}
111 COMMENT "Generate ${TARGET_TESTNAME} configuration for TXT"
114 list(APPEND DEPS "${TEST_CONFIG_FILE}")
115 list(APPEND KEYS "${TARGET_TESTNAME}")
121 # Read "test.local.lst" if exists
122 include("test.local.lst" OPTIONAL)
125 # Generate toolchain.config
127 set(TOOLCHAIN_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/toolchain.config")
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
140 COMMENT "Generate toolchin configuration"
143 list(APPEND DEPS "${TOOLCHAIN_CONFIG}")
148 set(SOURCE_RUNNER "${CMAKE_CURRENT_SOURCE_DIR}/runner.sh")
149 set(TARGET_RUNNER "${CMAKE_CURRENT_BINARY_DIR}/runner.sh")
152 OUTPUT ${TARGET_RUNNER}
153 COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_RUNNER}" "${TARGET_RUNNER}"
154 DEPENDS ${SOURCE_RUNNER}
155 COMMENT "Generate test runner"
158 list(APPEND DEPS "${TARGET_RUNNER}")
161 # copy rule-lib.sh (a library of shell script functions)
164 # getting path for rule-lib.sh in dredd-rule-lib
165 get_target_property(DREDD_RULE_LIB_DIR dredd_rule_lib BINARY_DIR)
167 set(SOURCE_RULE_LIB "${DREDD_RULE_LIB_DIR}/rule-lib.sh")
168 set(TARGET_RULE_LIB "${CMAKE_CURRENT_BINARY_DIR}/rule-lib.sh")
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"
177 list(APPEND DEPS "${TARGET_RULE_LIB}")
179 # Generate dependencies
180 add_custom_target(tf2tflite_dredd_pbtxt_deps ALL DEPENDS ${DEPS})
183 NAME tf2tflite_dredd_pbtxt_test
186 "${TOOLCHAIN_CONFIG}"