summaryrefslogtreecommitdiff
path: root/compiler/tf2tflite-value-pb-test/CMakeLists.txt
blob: 41974f72c11a3630642e96e450c293c1264e7497 (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
130
131
nnas_include(TargetRequire)

unset(REQUIRED_TARGETS)
list(APPEND REQUIRED_TARGETS tf2tflite)
list(APPEND REQUIRED_TARGETS tfkit)
list(APPEND REQUIRED_TARGETS nnkit-run)
list(APPEND REQUIRED_TARGETS nnkit_tf_backend)
list(APPEND REQUIRED_TARGETS nnkit_tflite_backend)
list(APPEND REQUIRED_TARGETS nnkit_randomize_action)
list(APPEND REQUIRED_TARGETS nnkit_HDF5_export_action)
list(APPEND REQUIRED_TARGETS nnkit_HDF5_import_action)
list(APPEND REQUIRED_TARGETS i5diff)
TargetRequire_Return(${REQUIRED_TARGETS})

unset(KEYS)
unset(DEPS)

###
### Add "Contrib" tests
###
macro(Add PREFIX)
  # Let's use CONTRIB prefix to avoid name conflicts with official models
  set(TEST_KEY "CONTRIB.${PREFIX}")

  set(PACKAGE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/contrib/${PREFIX}")

  set(MODEL_DOWNLOAD_SCRIPT "${PACKAGE_DIR}/model.download")
  set(MODEL_PB_FILE "${PACKAGE_DIR}/model.pb")
  set(MODEL_INFO_FILE "${PACKAGE_DIR}/model.info")
  set(MODEL_MD5SUM_FILE "${PACKAGE_DIR}/model.md5sum")

  # Try to download a model if it is missing
  if(NOT EXISTS "${MODEL_PB_FILE}")
    # TODO Extract this routine as a helper function
    if(NOT EXISTS "${MODEL_DOWNLOAD_SCRIPT}")
      message(FATAL_ERROR "${TEST_KEY} - Download script is missing")
    endif(NOT EXISTS "${MODEL_DOWNLOAD_SCRIPT}")

    execute_process(
      COMMAND ${CMAKE_COMMAND} -D OUTPUT_PATH=${MODEL_PB_FILE} -P "${MODEL_DOWNLOAD_SCRIPT}"
      RESULT_VARIABLE EXITCODE
    )

    if(NOT EXITCODE EQUAL 0)
      message(FATAL_ERROR "${TEST_KEY} - Download fails")
    endif(NOT EXITCODE EQUAL 0)
  endif()

  if(EXISTS "${MODEL_MD5SUM_FILE}")
    # TODO Extract this routine as a helper function
    file(STRINGS "${MODEL_MD5SUM_FILE}" EXPECTED_MD5SUM)
    file(MD5 "${MODEL_PB_FILE}" OBTAINED_MD5SUM)

    if(NOT "${EXPECTED_MD5SUM}" STREQUAL "${OBTAINED_MD5SUM}")
      message(FATAL_ERROR "${TEST_KEY} - Checksum mismatches")
    endif()
  endif()

  # Generate .test file which declares MODEL_PB_PATH and MODEL_INFO_PATH
  set(TEST_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/${TEST_KEY}.test")

  add_custom_command(
    OUTPUT ${TEST_CONFIG_FILE}
    COMMAND ${CMAKE_COMMAND} -E remove -f ${TEST_CONFIG_FILE}
    COMMAND ${CMAKE_COMMAND} -E echo 'MODEL_PB_PATH="${MODEL_PB_FILE}"' >> ${TEST_CONFIG_FILE}
    COMMAND ${CMAKE_COMMAND} -E echo 'MODEL_INFO_PATH="${MODEL_INFO_FILE}"' >> ${TEST_CONFIG_FILE}
    COMMENT "Generate ${TEST_KEY} configuration"
  )

  list(APPEND KEYS "${TEST_KEY}")
  list(APPEND DEPS "${TEST_CONFIG_FILE}")
endmacro(Add)

include(contrib.lst OPTIONAL)

###
### Generate toolchain.config
###
set(TOOLCHAIN_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/toolchain.config")

add_custom_command(
  OUTPUT ${TOOLCHAIN_CONFIG}
  COMMAND ${CMAKE_COMMAND} -E remove -f ${TOOLCHAIN_CONFIG}
  COMMAND ${CMAKE_COMMAND} -E echo 'NNKIT_RUN_PATH=\"$<TARGET_FILE:nnkit-run>\"' >> ${TOOLCHAIN_CONFIG}
  COMMAND ${CMAKE_COMMAND} -E echo 'TF_BACKEND_PATH=\"$<TARGET_FILE:nnkit_tf_backend>\"' >> ${TOOLCHAIN_CONFIG}
  COMMAND ${CMAKE_COMMAND} -E echo 'TFLITE_BACKEND_PATH=\"$<TARGET_FILE:nnkit_tflite_backend>\"' >> ${TOOLCHAIN_CONFIG}
  COMMAND ${CMAKE_COMMAND} -E echo 'TF2TFLITE_PATH=\"$<TARGET_FILE:tf2tflite>\"' >> ${TOOLCHAIN_CONFIG}
  COMMAND ${CMAKE_COMMAND} -E echo 'RANDOMIZE_ACTION_PATH=\"$<TARGET_FILE:nnkit_randomize_action>\"' >> ${TOOLCHAIN_CONFIG}
  COMMAND ${CMAKE_COMMAND} -E echo 'HDF5_EXPORT_ACTION_PATH=\"$<TARGET_FILE:nnkit_HDF5_export_action>\"' >> ${TOOLCHAIN_CONFIG}
  COMMAND ${CMAKE_COMMAND} -E echo 'HDF5_IMPORT_ACTION_PATH=\"$<TARGET_FILE:nnkit_HDF5_import_action>\"' >> ${TOOLCHAIN_CONFIG}
  COMMAND ${CMAKE_COMMAND} -E echo 'I5DIFF_PATH=\"$<TARGET_FILE:i5diff>\"' >> ${TOOLCHAIN_CONFIG}
  DEPENDS
    nnkit-run
    nnkit_tf_backend
    nnkit_tflite_backend
    tf2tflite
    nnkit_randomize_action
    nnkit_HDF5_export_action
    nnkit_HDF5_import_action
    i5diff
  COMMENT "Generate toolchin configuration"
)

list(APPEND DEPS "${TOOLCHAIN_CONFIG}")

##
## Generate test runner
##
set(TEST_RUNNER_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/runner.sh")
set(TEST_RUNNER_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/runner.sh")

add_custom_command(
  OUTPUT ${TEST_RUNNER_SCRIPT}
  COMMAND ${CMAKE_COMMAND} -E copy "${TEST_RUNNER_SOURCE}" "${TEST_RUNNER_SCRIPT}"
  DEPENDS ${TEST_RUNNER_SOURCE}
  COMMENT "Generate test runner"
)

list(APPEND DEPS "${TEST_RUNNER_SCRIPT}")

### Generate dependencies
add_custom_target(tf2tflite_value_pb_test_deps ALL DEPENDS ${DEPS})

# NOTE This target is not built by default
add_test(
  NAME tf2tflite_value_pb_test
  COMMAND
    "${TEST_RUNNER_SCRIPT}"
    "${TOOLCHAIN_CONFIG}"
    ${KEYS}
)