1 nnas_include(TargetRequire)
3 unset(REQUIRED_TARGETS)
4 list(APPEND REQUIRED_TARGETS circlechef)
5 list(APPEND REQUIRED_TARGETS circle-inspect)
6 list(APPEND REQUIRED_TARGETS circle-verify)
7 list(APPEND REQUIRED_TARGETS circle2circle)
8 list(APPEND REQUIRED_TARGETS dredd_rule_lib)
9 list(APPEND REQUIRED_TARGETS tflchef)
10 list(APPEND REQUIRED_TARGETS tflite2circle)
11 TargetRequire_Return(${REQUIRED_TARGETS})
13 nncc_find_resource(TensorFlowLiteRecipes)
14 nncc_find_resource(CircleRecipes)
16 set(TFLITE_RECIPE_REPO "${TensorFlowLiteRecipes_DIR}")
17 set(CIRCLE_RECIPE_REPO "${CircleRecipes_DIR}")
20 set(TEST_RECIPE_FILENAME "test.recipe")
21 set(TEST_RULE_FILENAME "test.rule")
28 set(multiValueArgs PASS)
31 if(NOT EXISTS "${TFLITE_RECIPE_REPO}/${RECIPE}/test.recipe")
32 if(NOT EXISTS "${CIRCLE_RECIPE_REPO}/${RECIPE}/test.recipe")
33 message(FATAL_ERROR "Missing recipe of '${RECIPE}' test")
35 set(RECIPE_REPO ${CIRCLE_RECIPE_REPO})
38 set(RECIPE_REPO ${TFLITE_RECIPE_REPO})
41 if(NOT EXISTS "${RECIPE_REPO}/${RECIPE}/test.rule")
42 message(FATAL_ERROR "Missing rule of '${RECIPE}' test")
45 cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
47 foreach(src ${ARG_PASS})
49 list(APPEND OPT_OPTIONS "--${src}")
50 endforeach(src ${ARG_PASS})
52 set(RECIPE_FILE "${RECIPE}.recipe")
53 set(RECIPE_SOURCE_PATH "${RECIPE_REPO}/${RECIPE}/${TEST_RECIPE_FILENAME}")
54 set(RECIPE_BINARY_PATH "${CMAKE_CURRENT_BINARY_DIR}/${RECIPE_FILE}")
56 set(RULE_FILE "${RECIPE}.rule")
57 set(RULE_SOURCE_PATH "${RECIPE_REPO}/${RECIPE}/${TEST_RULE_FILENAME}")
58 set(RULE_BINARY_PATH "${CMAKE_CURRENT_BINARY_DIR}/${RULE_FILE}")
60 set(TFLITE_FILE "${RECIPE}.tflite")
61 set(TFLITE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/${TFLITE_FILE}")
63 set(CIRCLE_FILE "${RECIPE}.circle")
64 set(CIRCLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/${CIRCLE_FILE}")
66 set(OPT_CIRCLE_FILE "${RECIPE}.opt.circle")
67 set(OPT_CIRCLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/${OPT_CIRCLE_FILE}")
70 add_custom_command(OUTPUT ${RECIPE_BINARY_PATH}
71 COMMAND ${CMAKE_COMMAND} -E copy "${RECIPE_SOURCE_PATH}" "${RECIPE_BINARY_PATH}"
72 DEPENDS ${RECIPE_SOURCE_PATH}
73 COMMENT "Generate ${RECIPE_FILE}"
77 add_custom_command(OUTPUT ${RULE_BINARY_PATH}
78 COMMAND ${CMAKE_COMMAND} -E copy "${RULE_SOURCE_PATH}" "${RULE_BINARY_PATH}"
79 DEPENDS ${RULE_SOURCE_PATH}
80 COMMENT "Generate ${RULE_FILE}"
83 if(${RECIPE_REPO} STREQUAL ${TFLITE_RECIPE_REPO})
85 add_custom_command(OUTPUT ${TFLITE_OUTPUT_PATH}
86 COMMAND $<TARGET_FILE:tflchef-file> ${RECIPE_BINARY_PATH} ${TFLITE_OUTPUT_PATH}
87 DEPENDS $<TARGET_FILE:tflchef-file> ${RECIPE_BINARY_PATH}
88 COMMENT "Generate ${TFLITE_FILE}"
92 add_custom_command(OUTPUT ${CIRCLE_OUTPUT_PATH}
93 COMMAND $<TARGET_FILE:tflite2circle> ${TFLITE_OUTPUT_PATH} ${CIRCLE_OUTPUT_PATH}
94 DEPENDS $<TARGET_FILE:tflite2circle> ${TFLITE_OUTPUT_PATH}
95 COMMENT "Generate ${CIRCLE_FILE}"
98 list(APPEND TEST_DEPS ${TFLITE_OUTPUT_PATH})
101 add_custom_command(OUTPUT ${CIRCLE_OUTPUT_PATH}
102 COMMAND $<TARGET_FILE:circlechef-file> ${RECIPE_BINARY_PATH} ${CIRCLE_OUTPUT_PATH}
103 DEPENDS $<TARGET_FILE:circlechef-file> ${RECIPE_BINARY_PATH}
104 COMMENT "Generate ${CIRCLE_FILE}"
108 # Generate optimized .circle
109 add_custom_command(OUTPUT ${OPT_CIRCLE_OUTPUT_PATH}
110 COMMAND $<TARGET_FILE:circle2circle> ${OPT_OPTIONS} ${CIRCLE_OUTPUT_PATH} ${OPT_CIRCLE_OUTPUT_PATH}
111 DEPENDS $<TARGET_FILE:circle2circle> ${CIRCLE_OUTPUT_PATH}
112 COMMENT "Generate ${OPT_CIRCLE_FILE}"
115 list(APPEND TEST_DEPS ${RECIPE_BINARY_PATH} ${RULE_BINARY_PATH}
116 ${CIRCLE_OUTPUT_PATH} ${OPT_CIRCLE_OUTPUT_PATH})
117 list(APPEND TEST_NAMES ${RECIPE})
126 set(TEST_RUNNER "${CMAKE_CURRENT_BINARY_DIR}/testall.sh")
127 set(TEST_RUNNER_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/testall.sh")
130 OUTPUT ${TEST_RUNNER}
131 COMMAND ${CMAKE_COMMAND} -E copy "${TEST_RUNNER_SOURCE}" "${TEST_RUNNER}"
132 DEPENDS ${TEST_RUNNER_SOURCE}
133 COMMENT "Generate test runner"
136 list(APPEND TEST_DEPS "${TEST_RUNNER}")
139 ### Generate test.config
141 set(TEST_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/test.config")
144 OUTPUT ${TEST_CONFIG}
145 COMMAND ${CMAKE_COMMAND} -E remove -f ${TEST_CONFIG}
146 COMMAND ${CMAKE_COMMAND} -E echo 'CIRCLE_INSPECT_PATH=\"$<TARGET_FILE:circle-inspect>\"' >> ${TEST_CONFIG}
147 COMMAND ${CMAKE_COMMAND} -E echo 'CIRCLE_VERIFY_PATH=\"$<TARGET_FILE:circle-verify>\"' >> ${TEST_CONFIG}
151 COMMENT "Generate test configuration"
154 list(APPEND TEST_DEPS "${TEST_CONFIG}")
157 # copy rule-lib.sh (a library of shell script functions)
160 # getting path for rule-lib.sh in dredd-rule-lib
161 get_target_property(DREDD_RULE_LIB_DIR dredd_rule_lib BINARY_DIR)
163 set(RULE_LIB_SOURCE_PATH "${DREDD_RULE_LIB_DIR}/rule-lib.sh")
164 set(RULE_LIB_BINARY_PATH "${CMAKE_CURRENT_BINARY_DIR}/rule-lib.sh")
167 OUTPUT ${RULE_LIB_BINARY_PATH}
168 COMMAND ${CMAKE_COMMAND} -E copy "${RULE_LIB_SOURCE_PATH}" "${RULE_LIB_BINARY_PATH}"
169 DEPENDS ${RULE_LIB_SOURCE_PATH}
170 COMMENT "Generate rule lib"
173 list(APPEND TEST_DEPS "${RULE_LIB_BINARY_PATH}")
175 # Generate dependencies
176 add_custom_target(circle2circle_dredd_recipe_test ALL DEPENDS ${TEST_DEPS})
180 NAME circle2circle_dredd_recipe_test
181 COMMAND "${TEST_RUNNER}"
183 "${CMAKE_CURRENT_BINARY_DIR}"