Imported Upstream version 1.7.0
[platform/core/ml/nnfw.git] / compiler / circle2circle-dredd-recipe-test / CMakeLists.txt
1 nnas_include(TargetRequire)
2
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})
12
13 nncc_find_resource(TensorFlowLiteRecipes)
14 nncc_find_resource(CircleRecipes)
15
16 set(TFLITE_RECIPE_REPO "${TensorFlowLiteRecipes_DIR}")
17 set(CIRCLE_RECIPE_REPO "${CircleRecipes_DIR}")
18 unset(RECIPE_REPO)
19
20 set(TEST_RECIPE_FILENAME "test.recipe")
21 set(TEST_RULE_FILENAME "test.rule")
22
23 unset(TEST_DEPS)
24 unset(TEST_NAMES)
25
26 set(options "")
27 set(oneValueArgs "")
28 set(multiValueArgs PASS)
29
30 macro(Add RECIPE)
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")
34     else()
35       set(RECIPE_REPO ${CIRCLE_RECIPE_REPO})
36     endif()
37   else()
38     set(RECIPE_REPO ${TFLITE_RECIPE_REPO})
39   endif()
40
41   if(NOT EXISTS "${RECIPE_REPO}/${RECIPE}/test.rule")
42     message(FATAL_ERROR "Missing rule of '${RECIPE}' test")
43   endif()
44
45   cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
46   unset(OPT_OPTIONS)
47   foreach(src ${ARG_PASS})
48     # option = "--${src}"
49     list(APPEND OPT_OPTIONS "--${src}")
50   endforeach(src ${ARG_PASS})
51
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}")
55   
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}")
59
60   set(TFLITE_FILE "${RECIPE}.tflite")
61   set(TFLITE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/${TFLITE_FILE}")
62
63   set(CIRCLE_FILE "${RECIPE}.circle")
64   set(CIRCLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/${CIRCLE_FILE}")
65
66   set(OPT_CIRCLE_FILE "${RECIPE}.opt.circle")
67   set(OPT_CIRCLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/${OPT_CIRCLE_FILE}")
68
69   # Copy .recipe
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}"
74   )
75
76   # Copy .rule
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}"
81   )
82
83   if(${RECIPE_REPO} STREQUAL ${TFLITE_RECIPE_REPO})
84     # Generate .tflite
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}"
89     )
90
91     # Generate .circle
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}"
96     )
97
98     list(APPEND TEST_DEPS ${TFLITE_OUTPUT_PATH})
99   else()
100    # Generate .circle
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}"
105     )
106   endif()
107
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}"
113   )
114
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})
118 endmacro(Add)
119
120 # Read "test.lst"
121 include("test.lst")
122
123 ##
124 ## Copy testall
125 ##
126 set(TEST_RUNNER "${CMAKE_CURRENT_BINARY_DIR}/testall.sh")
127 set(TEST_RUNNER_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/testall.sh")
128
129 add_custom_command(
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"
134 )
135
136 list(APPEND TEST_DEPS "${TEST_RUNNER}")
137
138 ###
139 ### Generate test.config
140 ###
141 set(TEST_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/test.config")
142
143 add_custom_command(
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}
148   DEPENDS 
149     circle-inspect
150     circle-verify
151   COMMENT "Generate test configuration"
152 )
153
154 list(APPEND TEST_DEPS "${TEST_CONFIG}")
155
156 #
157 # copy rule-lib.sh (a library of shell script functions)
158 #
159
160 # getting path for rule-lib.sh in dredd-rule-lib
161 get_target_property(DREDD_RULE_LIB_DIR dredd_rule_lib BINARY_DIR)
162
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")
165
166 add_custom_command(
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"
171 )
172
173 list(APPEND TEST_DEPS "${RULE_LIB_BINARY_PATH}")
174
175 # Generate dependencies
176 add_custom_target(circle2circle_dredd_recipe_test ALL DEPENDS ${TEST_DEPS})
177
178 # Run tests
179 add_test(
180   NAME circle2circle_dredd_recipe_test
181   COMMAND "${TEST_RUNNER}"
182           "${TEST_CONFIG}"
183           "${CMAKE_CURRENT_BINARY_DIR}"
184           ${TEST_NAMES}
185 )