Imported Upstream version 1.12.0
[platform/core/ml/nnfw.git] / compiler / circlechef / tests / CMakeLists.txt
1 nncc_find_resource(CircleRecipes)
2 set(CIRCLERECIPES_DIR "${CircleRecipes_DIR}")
3
4 file(GLOB RECIPES RELATIVE ${CIRCLERECIPES_DIR} "${CIRCLERECIPES_DIR}/*/test.recipe")
5
6 foreach(RECIPE IN ITEMS ${RECIPES})
7   get_filename_component(RECIPE_PREFIX ${RECIPE} DIRECTORY)
8
9   set(RECIPE_SOURCE_FILE "${RECIPE_PREFIX}.recipe")
10   set(RECIPE_OUTPUT_FILE "${RECIPE_PREFIX}.circle")
11
12   # Copy .recipe
13   add_custom_command(OUTPUT ${RECIPE_SOURCE_FILE}
14                      COMMAND ${CMAKE_COMMAND} -E copy_if_different
15                              "${CIRCLERECIPES_DIR}/${RECIPE}" ${RECIPE_SOURCE_FILE}
16                      DEPENDS "${CIRCLERECIPES_DIR}/${RECIPE}"
17                      COMMENT "Generating ${RECIPE_SOURCE_FILE}")
18
19   # Generate .circle
20   add_custom_command(OUTPUT ${RECIPE_OUTPUT_FILE}
21                      COMMAND circlechef-file ${RECIPE_SOURCE_FILE} ${RECIPE_OUTPUT_FILE}
22                      DEPENDS circlechef-file ${RECIPE_SOURCE_FILE}
23                      COMMENT "Generating ${RECIPE_OUTPUT_FILE}")
24
25   list(APPEND TESTS ${RECIPE_PREFIX})
26   list(APPEND TESTFILES ${RECIPE_OUTPUT_FILE})
27 endforeach(RECIPE)
28
29 # Add local files
30 file(GLOB RECIPES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/test.recipe")
31
32 foreach(RECIPE IN ITEMS ${RECIPES})
33   get_filename_component(RECIPE_PREFIX ${RECIPE} DIRECTORY)
34
35   set(RECIPE_SOURCE_FILE "${RECIPE_PREFIX}.recipe")
36   set(RECIPE_OUTPUT_FILE "${RECIPE_PREFIX}.circle")
37
38   # Copy .recipe
39   add_custom_command(OUTPUT ${RECIPE_SOURCE_FILE}
40                      COMMAND ${CMAKE_COMMAND} -E copy_if_different
41                              "${CMAKE_CURRENT_SOURCE_DIR}/${RECIPE}" ${RECIPE_SOURCE_FILE}
42                      DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${RECIPE}"
43                      COMMENT "Generating ${RECIPE_SOURCE_FILE}")
44
45   # Generate .circle
46   add_custom_command(OUTPUT ${RECIPE_OUTPUT_FILE}
47                      COMMAND circlechef-file ${RECIPE_SOURCE_FILE} ${RECIPE_OUTPUT_FILE}
48                      DEPENDS circlechef-file ${RECIPE_SOURCE_FILE}
49                      COMMENT "Generating ${RECIPE_OUTPUT_FILE}")
50
51   list(APPEND TESTS ${RECIPE_PREFIX})
52   list(APPEND TESTFILES ${RECIPE_OUTPUT_FILE})
53 endforeach(RECIPE)
54
55 #Test circlechef-reverse
56 file(GLOB GEN_CIRCLEFILES RELATIVE ${CIRCLERECIPES_DIR} "${CIRCLERECIPES_DIR}/*/test.reverse")
57 # Note: While in development, circlechef-reverse may not handle the operator.
58 #       To separate this linkage scan empty test.reverse for test targets for circlechef-reverse.
59
60 foreach(CIRCLEFILE IN ITEMS ${GEN_CIRCLEFILES})
61   get_filename_component(CIRCLE_PREFIX ${CIRCLEFILE} DIRECTORY)
62
63   # file from above circlechef-file block
64   # use circle file as input of circlechef-reverse generated from circlechef-file
65   set(RECIPE_OUTPUT_FILE "${CIRCLE_PREFIX}.circle")
66   set(RECIPE_GEN_OUTPUT_FILE "${CIRCLE_PREFIX}.gen.recipe")
67   set(RECIPE_GEN_OUTPUT_FILE2 "${CIRCLE_PREFIX}.gen.circle")
68
69   # Generate .gen.recipe from generated .circle
70   add_custom_command(OUTPUT ${RECIPE_GEN_OUTPUT_FILE}
71                      COMMAND circlechef-reverse ${RECIPE_OUTPUT_FILE} ${RECIPE_GEN_OUTPUT_FILE}
72                      DEPENDS circlechef-reverse ${RECIPE_OUTPUT_FILE}
73                      COMMENT "Generating ${RECIPE_GEN_OUTPUT_FILE}")
74
75   # now we are going to generate .gen.circle from .gen.recipe
76   # to check generated .gen.recipe file is correct by using it.
77   # as weight values may be different, binary comparision is not acceptable.
78   add_custom_command(OUTPUT ${RECIPE_GEN_OUTPUT_FILE2}
79                      COMMAND circlechef-file ${RECIPE_GEN_OUTPUT_FILE} ${RECIPE_GEN_OUTPUT_FILE2}
80                      DEPENDS circlechef-file ${RECIPE_GEN_OUTPUT_FILE}
81                      COMMENT "Generating ${RECIPE_GEN_OUTPUT_FILE2}")
82
83   list(APPEND TESTS ${CIRCLE_PREFIX}.gen)
84   list(APPEND TESTFILES ${RECIPE_GEN_OUTPUT_FILE2})
85 endforeach(CIRCLEFILE)
86
87 # Test local circlechef-reverse
88 file(GLOB GEN_CIRCLEFILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/test.reverse")
89
90 foreach(CIRCLEFILE IN ITEMS ${GEN_CIRCLEFILES})
91   get_filename_component(CIRCLE_PREFIX ${CIRCLEFILE} DIRECTORY)
92
93   set(RECIPE_OUTPUT_FILE "${CIRCLE_PREFIX}.circle")
94   set(RECIPE_GEN_OUTPUT_FILE "${CIRCLE_PREFIX}.gen.recipe")
95   set(RECIPE_GEN_OUTPUT_FILE2 "${CIRCLE_PREFIX}.gen.circle")
96
97   # Generate .gen.recipe from generated .circle
98   add_custom_command(OUTPUT ${RECIPE_GEN_OUTPUT_FILE}
99                      COMMAND circlechef-reverse ${RECIPE_OUTPUT_FILE} ${RECIPE_GEN_OUTPUT_FILE}
100                      DEPENDS circlechef-reverse ${RECIPE_OUTPUT_FILE}
101                      COMMENT "Generating ${RECIPE_GEN_OUTPUT_FILE}")
102
103   add_custom_command(OUTPUT ${RECIPE_GEN_OUTPUT_FILE2}
104                      COMMAND circlechef-file ${RECIPE_GEN_OUTPUT_FILE} ${RECIPE_GEN_OUTPUT_FILE2}
105                      DEPENDS circlechef-file ${RECIPE_GEN_OUTPUT_FILE}
106                      COMMENT "Generating ${RECIPE_GEN_OUTPUT_FILE2}")
107
108   list(APPEND TESTS ${CIRCLE_PREFIX}.gen)
109   list(APPEND TESTFILES ${RECIPE_GEN_OUTPUT_FILE2})
110 endforeach(CIRCLEFILE)
111
112 # Add a dummy target to create a target-level dependency.
113 # TODO Find a way to create a dependency between circlechef_test and generated testfiles.
114 add_custom_target(circlechef_testfiles ALL DEPENDS ${TESTFILES})
115
116 # Using circle_verify for temporary as it only calls flatbuffer validate
117 # TODO do testing with running the model with runtime/interpreter
118 add_test(NAME circlechef_test
119          COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/runvalidate.sh"
120                  $<TARGET_FILE:circle-verify>
121                  ${TESTS})