summaryrefslogtreecommitdiff
path: root/compiler/tflchef/tests/CMakeLists.txt
blob: 5c4dff012a46f3df847c2bfb779158938e2ec900 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
if(NOT TARGET nnkit-run)
  return()
endif(NOT TARGET nnkit-run)

if(NOT TARGET nnkit_tflite_backend)
  return()
endif(NOT TARGET nnkit_tflite_backend)

nncc_find_resource(TensorFlowLiteRecipes)
set(TENSORFLOWLITERECIPES_DIR "${TensorFlowLiteRecipes_DIR}")

file(GLOB RECIPES RELATIVE ${TENSORFLOWLITERECIPES_DIR} "${TENSORFLOWLITERECIPES_DIR}/*/test.recipe")

foreach(RECIPE IN ITEMS ${RECIPES})
  get_filename_component(RECIPE_PREFIX ${RECIPE} DIRECTORY)

  set(RECIPE_SOURCE_FILE "${RECIPE_PREFIX}.recipe")
  set(RECIPE_OUTPUT_FILE "${RECIPE_PREFIX}.tflite")

  # Copy .recipe
  add_custom_command(OUTPUT ${RECIPE_SOURCE_FILE}
                     COMMAND ${CMAKE_COMMAND} -E copy_if_different
                             "${TENSORFLOWLITERECIPES_DIR}/${RECIPE}" ${RECIPE_SOURCE_FILE}
                     DEPENDS "${TENSORFLOWLITERECIPES_DIR}/${RECIPE}"
                     COMMENT "Generating ${RECIPE_SOURCE_FILE}")

  # Generate .tflite
  add_custom_command(OUTPUT ${RECIPE_OUTPUT_FILE}
                     COMMAND tflchef-file ${RECIPE_SOURCE_FILE} ${RECIPE_OUTPUT_FILE}
                     DEPENDS tflchef-file ${RECIPE_SOURCE_FILE}
                     COMMENT "Generating ${RECIPE_OUTPUT_FILE}")

  list(APPEND TESTS ${RECIPE_PREFIX})
  list(APPEND TESTFILES ${RECIPE_OUTPUT_FILE})
endforeach(RECIPE)

# Add local files
file(GLOB RECIPES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/test.recipe")

foreach(RECIPE IN ITEMS ${RECIPES})
  get_filename_component(RECIPE_PREFIX ${RECIPE} DIRECTORY)

  set(RECIPE_SOURCE_FILE "${RECIPE_PREFIX}.recipe")
  set(RECIPE_OUTPUT_FILE "${RECIPE_PREFIX}.tflite")

  # Copy .recipe
  add_custom_command(OUTPUT ${RECIPE_SOURCE_FILE}
                     COMMAND ${CMAKE_COMMAND} -E copy_if_different
                             "${CMAKE_CURRENT_SOURCE_DIR}/${RECIPE}" ${RECIPE_SOURCE_FILE}
                     DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${RECIPE}"
                     COMMENT "Generating ${RECIPE_SOURCE_FILE}")

  # Generate .tflite
  add_custom_command(OUTPUT ${RECIPE_OUTPUT_FILE}
                     COMMAND tflchef-file ${RECIPE_SOURCE_FILE} ${RECIPE_OUTPUT_FILE}
                     DEPENDS tflchef-file ${RECIPE_SOURCE_FILE}
                     COMMENT "Generating ${RECIPE_OUTPUT_FILE}")

  list(APPEND TESTS ${RECIPE_PREFIX})
  list(APPEND TESTFILES ${RECIPE_OUTPUT_FILE})
endforeach(RECIPE)

# Test tflchef-reverse
file(GLOB GEN_TFLITEFILES RELATIVE ${TENSORFLOWLITERECIPES_DIR} "${TENSORFLOWLITERECIPES_DIR}/*/test.reverse")
# Note: While in development, tflchef-reverse may not handle the operator.
#       To separate this linkage scan empty test.reverse for test targets for tflchef-reverse.

foreach(TFLITEFILE IN ITEMS ${GEN_TFLITEFILES})
  get_filename_component(TFLITE_PREFIX ${TFLITEFILE} DIRECTORY)

  # file from above tflchef-file block
  # use tflite file as input of tflchef-reverse generated from tflchef-file
  set(RECIPE_OUTPUT_FILE "${TFLITE_PREFIX}.tflite")
  set(RECIPE_GEN_OUTPUT_FILE "${TFLITE_PREFIX}.gen.recipe")
  set(RECIPE_GEN_OUTPUT_FILE2 "${TFLITE_PREFIX}.gen.tflite")

  # Generate .gen.recipe from generated .tflite
  add_custom_command(OUTPUT ${RECIPE_GEN_OUTPUT_FILE}
                     COMMAND tflchef-reverse ${RECIPE_OUTPUT_FILE} ${RECIPE_GEN_OUTPUT_FILE}
                     DEPENDS tflchef-reverse ${RECIPE_OUTPUT_FILE}
                     COMMENT "Generating ${RECIPE_GEN_OUTPUT_FILE}")

  # now we are going to generate .gen.tflite from .gen.recipe
  # to check generated .gen.recipe file is correct by using it.
  # as weight values may be different, binary comparision is not acceptable.
  add_custom_command(OUTPUT ${RECIPE_GEN_OUTPUT_FILE2}
                     COMMAND tflchef-file ${RECIPE_GEN_OUTPUT_FILE} ${RECIPE_GEN_OUTPUT_FILE2}
                     DEPENDS tflchef-file ${RECIPE_GEN_OUTPUT_FILE}
                     COMMENT "Generating ${RECIPE_GEN_OUTPUT_FILE2}")

  list(APPEND TESTS ${TFLITE_PREFIX}.gen)
  list(APPEND TESTFILES ${RECIPE_GEN_OUTPUT_FILE2})
endforeach(TFLITEFILE)

# Test local tflchef-reverse
file(GLOB GEN_TFLITEFILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/test.reverse")

foreach(TFLITEFILE IN ITEMS ${GEN_TFLITEFILES})
  get_filename_component(TFLITE_PREFIX ${TFLITEFILE} DIRECTORY)

  set(RECIPE_OUTPUT_FILE "${TFLITE_PREFIX}.tflite")
  set(RECIPE_GEN_OUTPUT_FILE "${TFLITE_PREFIX}.gen.recipe")
  set(RECIPE_GEN_OUTPUT_FILE2 "${TFLITE_PREFIX}.gen.tflite")

  # Generate .gen.recipe from generated .tflite
  add_custom_command(OUTPUT ${RECIPE_GEN_OUTPUT_FILE}
                     COMMAND tflchef-reverse ${RECIPE_OUTPUT_FILE} ${RECIPE_GEN_OUTPUT_FILE}
                     DEPENDS tflchef-reverse ${RECIPE_OUTPUT_FILE}
                     COMMENT "Generating ${RECIPE_GEN_OUTPUT_FILE}")

  add_custom_command(OUTPUT ${RECIPE_GEN_OUTPUT_FILE2}
                     COMMAND tflchef-file ${RECIPE_GEN_OUTPUT_FILE} ${RECIPE_GEN_OUTPUT_FILE2}
                     DEPENDS tflchef-file ${RECIPE_GEN_OUTPUT_FILE}
                     COMMENT "Generating ${RECIPE_GEN_OUTPUT_FILE2}")

  list(APPEND TESTS ${TFLITE_PREFIX}.gen)
  list(APPEND TESTFILES ${RECIPE_GEN_OUTPUT_FILE2})
endforeach(TFLITEFILE)

# Add a dummy target to create a target-level dependency.
# TODO Find a way to create a dependency between tflchef_test and generated testfiles.
add_custom_target(tflchef_testfiles ALL DEPENDS ${TESTFILES})

# Using mio_tflite_validate for temporary as it only calls flatbuffer validate
# TODO do testing with running the model with runtime/interpreter
add_test(NAME tflchef_test
         COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/runvalidate.sh"
                 $<TARGET_FILE:mio_tflite_validate>
                 ${TESTS})