1 set(ARM_C_COMPILER "arm-none-eabi-gcc")
2 set(ARM_ASM_COMPILER "arm-none-eabi-gcc")
3 set(ARM_CXX_COMPILER "arm-none-eabi-g++")
4 set(ARM_OBJCOPY "arm-none-eabi-objcopy")
6 find_program(ARM_C_COMPILER_PATH ${ARM_C_COMPILER})
8 if (NOT ARM_C_COMPILER_PATH)
9 message(STATUS "Build luci-micro: FALSE(ARM compiler is NOT FOUND)")
12 if (NOT_BUILD_EXTERNALS)
13 message(STATUS "USE LOCAL EXTERNAL")
15 set(ONERT_MICRO_EXTERNAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals")
16 set(Flatbuffers_DIR "${ONERT_MICRO_EXTERNAL_DIR}")
17 set(FlatBuffersSource_DIR "${Flatbuffers_DIR}")
18 set (EXT_OVERLAY_DIR "${ONERT_MICRO_EXTERNAL_DIR}")
19 set(GENERATED_INCLUDE_DIR "${ONERT_MICRO_EXTERNAL_DIR}/gen")
21 add_subdirectory(externals)
23 message(STATUS "DOWNLOAD AND BUILD EXTERNALS")
25 nnas_find_package(FlatBuffers EXACT 2.0 QUIET)
27 if (NOT FlatBuffers_FOUND)
28 message(STATUS "Build luci-micro: FALSE(FlatBuffers 2.0 NOT FOUND)")
30 endif (NOT FlatBuffers_FOUND)
32 message(STATUS "Build luci-micro: TRUE")
34 set(SCHEMA_FILE "${NNAS_PROJECT_SOURCE_DIR}/res/CircleSchema/0.4/circle_schema.fbs")
36 # NOTE Copy circle_schema.fbs as schema.fbs to generate "schema_generated.fbs" instead of "circle_schema_generated.fbs"
37 add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/schema.fbs"
38 COMMAND ${CMAKE_COMMAND} -E copy "${SCHEMA_FILE}" schema.fbs
39 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
40 DEPENDS "${SCHEMA_FILE}"
43 FlatBuffers_Target(luci_micro_circle_schema
44 OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/gen/circle-generated/circle"
45 INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/gen"
46 SCHEMA_DIR "${CMAKE_CURRENT_BINARY_DIR}"
47 SCHEMA_FILES "schema.fbs"
49 set(Flatbuffers_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../overlay/lib/cmake/flatbuffers")
50 set (EXT_OVERLAY_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../overlay")
51 set(GENERATED_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/gen")
54 set(LUCI_INTERPRETER_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/include")
55 add_subdirectory(luci-interpreter/src/core/reader)
57 # Choosing Kernel: reference mcu, optimized cmsisnn, optimized linux
59 message(STATUS "KERNEL variable is not defined, default reference mcu kernels will be used")
60 set(LUCI_INTERPRETER_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/pal/mcu")
61 elseif("${KERNELS}" STREQUAL "mcu")
62 message(STATUS "ONERT_MICRO will use reference mcu kernels")
63 set(LUCI_INTERPRETER_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/pal/mcu")
64 elseif("${KERNELS}" STREQUAL "cmsisnn")
65 message(STATUS "ONERT_MICRO will use optimized cmsisnn kernels")
66 set(LUCI_INTERPRETER_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/pal/cmsisnn")
67 elseif("${KERNELS}" STREQUAL "linux")
68 message(STATUS "ONERT_MICRO will use optimized linux kernels")
69 set(LUCI_INTERPRETER_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/pal/linux")
71 message(STATUS "Build onert-micro: FAILED (Non-existent kernel variable. Choose one of the following options: mcu, cmsisnn, linux)")
77 message(STATUS "FAILED ONERT-MICRO is not support Static Memory Manager now")
80 message(STATUS "USE_STATIC_ALLOC variable is not defined, default dynamic memory manager will be used")
84 -DLUCI_INTERPRETER_STATIC=ON
86 -DBUILD_CMSIS_NN_FUNCTIONS=ON
87 -DTARGET_CPU=${TARGET_CPU}
88 -DTARGET_ARCH=${TARGET_ARCH}
89 "-DEXT_OVERLAY_DIR=${EXT_OVERLAY_DIR}"
90 "-DFlatbuffers_DIR=${Flatbuffers_DIR}"
91 "-DFlatBuffersSource_DIR=${FlatBuffersSource_DIR}"
92 "-DCMAKE_TOOLCHAIN_FILE=${NNAS_PROJECT_SOURCE_DIR}/infra/onert-micro/cmake/buildtool/config/arm-none-eabi-gcc.cmake"
93 "-DLUCI_INTERPRETER_PAL_DIR=${LUCI_INTERPRETER_PAL_DIR}"
94 "-DNNAS_PROJECT_SOURCE_DIR=${NNAS_PROJECT_SOURCE_DIR}"
95 "-DNNAS_EXTERNALS_DIR=${NNAS_EXTERNALS_DIR}"
96 -DC_COMPILER=${ARM_C_COMPILER}
97 -DCXX_COMPILER=${ARM_CXX_COMPILER}
98 -DASM_COMPILER=${ARM_ASM_COMPILER}
99 -DOBJCOPY=${ARM_OBJCOPY}
100 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
103 "-DNNAS_ROOT=${NNAS_PROJECT_SOURCE_DIR}"
104 -DENABLE_STRICT_BUILD=OFF
105 "-DGENERATED_INCLUDE_DIR=${GENERATED_INCLUDE_DIR}"
108 if (GENERATE_KERNELS_LIST_FROM)
109 set(GENERATED_KERNELS_LIST_PATH "${LUCI_INTERPRETER_PAL_DIR}/GeneratedKernelsToBuild.lst")
110 list(APPEND CMAKE_ARM_OPTIONS "-DLUCI_INTERPRETER_KERNELS_BUILD_LIST=${GENERATED_KERNELS_LIST_PATH}")
113 if (NOT_BUILD_EXTERNALS)
114 list(APPEND CMAKE_ARM_OPTIONS "-DNOT_BUILD_EXTERNALS=ON")
116 list(APPEND CMAKE_ARM_OPTIONS "-DNOT_BUILD_EXTERNALS=OFF")
119 if (ENABLE_ONERT_MICRO_TEST)
120 message(STATUS "Enable tests")
121 list(APPEND CMAKE_ARM_OPTIONS "-DENABLE_TEST=ON")
125 message(STATUS "ONERT-MICRO will not use part for QUANTIZED models")
126 add_definitions(-DDIS_QUANT)
127 list(APPEND CMAKE_ARM_OPTIONS "-DDIS_QUANT=ON")
131 message(STATUS "ONERT-MICRO will not use part for FLOAT models")
132 add_definitions(-DDIS_FLOAT)
133 list(APPEND CMAKE_ARM_OPTIONS "-DDIS_FLOAT=ON")
137 message(STATUS "ONERT-MICRO will not use dynamic shapes")
138 add_definitions(-DDIS_DYN_SHAPES)
141 set(MICRO_ARM_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/standalone_arm")
142 file(MAKE_DIRECTORY "${MICRO_ARM_BUILD_DIR}")
144 set(MICRO_ARM_BUILD_DEPENDENCY "${MICRO_ARM_BUILD_DIR}/CMakeCache.txt")
147 OUTPUT "${MICRO_ARM_BUILD_DEPENDENCY}"
148 COMMAND "${CMAKE_COMMAND}" "${CMAKE_CURRENT_SOURCE_DIR}/standalone" ${CMAKE_ARM_OPTIONS}
149 WORKING_DIRECTORY "${MICRO_ARM_BUILD_DIR}"
150 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/standalone/CMakeLists.txt"
154 add_custom_target(luci_interpreter_micro_arm_cmake DEPENDS "${MICRO_ARM_BUILD_DEPENDENCY}")
156 # Generate KernelsToBuild list from circle model
157 if (GENERATE_KERNELS_LIST_FROM)
158 add_executable(generator_kernels_list_exec helpers/GenerateKernelsListHelper.cpp)
160 target_link_libraries(generator_kernels_list_exec luci_micro_circle_reader)
161 target_link_libraries(generator_kernels_list_exec luci_micro_circle_schema)
163 target_include_directories(generator_kernels_list_exec PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/include")
166 generate_kernels_list ALL
167 COMMAND generator_kernels_list_exec ${GENERATE_KERNELS_LIST_FROM} ${GENERATED_KERNELS_LIST_PATH}
168 COMMENT "Generating KernelsToBuild list"
170 add_dependencies(generate_kernels_list luci_micro_circle_reader)
171 add_dependencies(luci_interpreter_micro_arm_cmake generate_kernels_list)
175 # To remove GENERATE_KERNELS_LIST_FROM and KERNELS variable from cmake cache
176 unset(GENERATE_KERNELS_LIST_FROM CACHE)
178 unset(USE_STATIC_KERNEL CACHE)
179 unset(DIS_QUANT CACHE)
180 unset(DIS_FLOAT CACHE)
181 unset(ENABLE_ONERT_MICRO_TEST CACHE)
182 unset(NOT_BUILD_EXTERNALS CACHE)
184 set(MICRO_ARM_BINARY "${MICRO_ARM_BUILD_DIR}/luci-interpreter/src/libluci_interpreter_micro.a")
187 OUTPUT "${MICRO_ARM_BINARY}"
188 COMMAND "${CMAKE_MAKE_PROGRAM}" luci_interpreter_micro -j ${CPU_COUNT}
189 WORKING_DIRECTORY "${MICRO_ARM_BUILD_DIR}"
190 DEPENDS luci_interpreter_micro_arm_cmake luci_micro_circle_schema
194 add_custom_target(luci_interpreter_micro_arm DEPENDS "${MICRO_ARM_BINARY}")
196 add_subdirectory(eval-driver)
198 if (NOT DEFINED BUILD_TEST)
203 nnas_find_package(MbedOSSource EXACT 6.15 QUIET)
205 if (NOT MbedOSSource_FOUND)
206 message(STATUS "Skipping luci-micro: MbedOSSource not found")
210 set(MBED_OS_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/tests/mbed-os")
211 file(MAKE_DIRECTORY "${MBED_OS_BUILD_DIR}")
213 set(MBED_OS_BUILD_DEPENDENCY "${MBED_OS_BUILD_DIR}/CMakeCache.txt")
215 set(ONERTMICRO_SRC_DIR "${NNAS_PROJECT_SOURCE_DIR}/onert-micro")
218 OUTPUT "${MBED_OS_BUILD_DEPENDENCY}"
219 COMMAND "${CMAKE_COMMAND}" "${CMAKE_CURRENT_SOURCE_DIR}/tests/mbed-os"
220 -DMICRO_ARM_BUILD_DIR=${MICRO_ARM_BUILD_DIR}
221 -DMbedOSSource_DIR=${MbedOSSource_DIR}
222 -DFlatBuffersSource_DIR=${FlatBuffersSource_DIR}
223 -DONERTMICRO_SRC_DIR=${ONERTMICRO_SRC_DIR}
224 WORKING_DIRECTORY "${MBED_OS_BUILD_DIR}"
225 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/tests/mbed-os/CMakeLists.txt"
229 add_custom_target(mbed_os_cmake DEPENDS "${MBED_OS_BUILD_DEPENDENCY}")
231 set(MBED_OS_BINARY "${MBED_OS_BUILD_DIR}/libmbed_os.a")
234 OUTPUT "${MBED_OS_BINARY}"
235 COMMAND "${CMAKE_MAKE_PROGRAM}" mbed_os -j ${CPU_COUNT}
236 WORKING_DIRECTORY "${MBED_OS_BUILD_DIR}"
237 DEPENDS mbed_os_cmake
241 add_custom_target(mbed_os_arm DEPENDS "${MBED_OS_BINARY}")
243 set(BUILD_TEST_BINARY "${MBED_OS_BUILD_DIR}/build_test.bin")
246 OUTPUT "${BUILD_TEST_BINARY}"
247 COMMAND "${CMAKE_MAKE_PROGRAM}" build_test -j ${CPU_COUNT}
248 WORKING_DIRECTORY "${MBED_OS_BUILD_DIR}"
249 DEPENDS mbed_os_arm "${CMAKE_CURRENT_SOURCE_DIR}/tests/mbed-os/main.cpp" ${MICRO_ARM_BINARY}
252 add_custom_target(onert_micro_build_test_arm DEPENDS "${BUILD_TEST_BINARY}")