diff options
Diffstat (limited to 'compiler/tflchef/tests/CMakeLists.txt')
-rw-r--r-- | compiler/tflchef/tests/CMakeLists.txt | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/compiler/tflchef/tests/CMakeLists.txt b/compiler/tflchef/tests/CMakeLists.txt new file mode 100644 index 000000000..5c4dff012 --- /dev/null +++ b/compiler/tflchef/tests/CMakeLists.txt @@ -0,0 +1,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}) |