@@ -28,109 +28,93 @@ if (PICO_SDK_PATH)
2828 set (MICROLITE_PLATFORM "RP2" )
2929endif ()
3030
31- if (IDF_TARGET STREQUAL "esp32" )
32- set (MICROLITE_PLATFORM "ESP32" )
33- endif ()
34-
35- if (IDF_TARGET STREQUAL "esp32s2" )
36- set (MICROLITE_PLATFORM "ESP32S2" )
37- endif ()
38-
39- if (IDF_TARGET STREQUAL "esp32s3" )
40- set (MICROLITE_PLATFORM "ESP32S3" )
41- endif ()
42-
43- if (IDF_TARGET STREQUAL "esp32c3" )
44- set (MICROLITE_PLATFORM "ESP32C3" )
45- endif ()
31+ include (${CMAKE_CURRENT_LIST_DIR} /micropython_esp.cmake)
4632
4733get_filename_component (TENSORFLOW_DIR ${PROJECT_DIR} /../../../tensorflow ABSOLUTE )
4834
4935add_library (microlite INTERFACE )
5036
51- if (MICROLITE_PLATFORM STREQUAL "ESP32" OR
52- MICROLITE_PLATFORM STREQUAL "ESP32S3" OR
53- MICROLITE_PLATFORM STREQUAL "ESP32C3" OR
54- MICROLITE_PLATFORM STREQUAL "ESP32S2" )
55-
56- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
57- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++" )
58-
59- endif ()
60-
6137# needed when we have custom/specialized kernels.
6238# add_custom_command(
6339# OUTPUT ${TF_MICROLITE_SPECIALIZED_SRCS}
6440# COMMAND cd ${TENSORFLOW_DIR} && ${Python3_EXECUTABLE} ${MICROPY_DIR}/py/makeversionhdr.py ${MICROPY_MPVERSION}
6541# DEPENDS MICROPY_FORCE_BUILD
6642# )
6743
68- if (MICROLITE_PLATFORM STREQUAL "ESP32" OR
69- MICROLITE_PLATFORM STREQUAL "ESP32S3" OR
70- MICROLITE_PLATFORM STREQUAL "ESP32C3" OR
71- MICROLITE_PLATFORM STREQUAL "ESP32S2" )
72- set (TF_MICROLITE_LOG
73- ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/debug_log.cpp
74- ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/micro_time.cpp
75- )
76- endif ()
77-
7844if (MICROLITE_PLATFORM STREQUAL "RP2" )
79- set (TF_MICROLITE_LOG
45+ set (TF_MICROLITE_LOG
8046 ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/cortex_m_generic/debug_log.cpp
8147 ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/cortex_m_generic/micro_time.cpp
8248 )
8349endif ()
8450
51+ if (CONFIG_IDF_TARGET)
52+ set (TF_ESP_DIR "${CMAKE_CURRENT_LIST_DIR} /../../tflm_esp_kernels/components/tflite-lib" )
53+ set (TF_LITE_DIR "${TF_ESP_DIR} /tensorflow/lite" )
54+ set (TF_MICRO_DIR "${TF_LITE_DIR} /micro" )
55+ set (TF_MICROLITE_LOG
56+ ${TF_MICRO_DIR} /debug_log.cc
57+ ${TF_MICRO_DIR} /micro_time.cc
58+ )
59+ else ()
60+ set (TF_LITE_DIR "${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite" )
61+ set (TF_MICRO_DIR "${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro" )
62+ endif ()
8563
86-
87-
88- # copied from https://github.com/espressif/tflite-micro-esp-examples/blob/master/components/tflite-lib/CMakeLists.txt
89- # commit: 2ef35273160643b172ce76078c0c95c71d528842
90- set (TF_LITE_DIR "${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite" )
91- set (TF_MICRO_DIR "${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro" )
92-
93- # lite c
64+ # lite c
9465
9566file (GLOB TF_LITE_C_SRCS
9667 "${TF_LITE_DIR} /c/*.cpp"
9768 "${TF_LITE_DIR} /c/*.c" )
9869
99- # lite core/api
100-
70+ # lite core/api
71+ if (CONFIG_IDF_TARGET)
72+ file (GLOB TF_LITE_API_SRCS
73+ "${TF_LITE_DIR} /core/api/*.cc"
74+ "${TF_LITE_DIR} /core/api/*.c"
75+ "${TF_LITE_DIR} /core/c/*.cc"
76+ "${TF_LITE_DIR} /core/c/*.c" )
77+ else ()
10178file (GLOB TF_LITE_API_SRCS
10279 "${TF_LITE_DIR} /core/api/*.cpp"
10380 "${TF_LITE_DIR} /core/api/*.c" )
81+ endif ()
10482
105- # lite experimental
83+ # lite experimental
10684
10785file (GLOB TF_LITE_MICROFRONTEND_SRCS
10886 "${TF_LITE_DIR} /experimental/microfrontend/lib/*.c"
87+ "${TF_LITE_DIR} /experimental/microfrontend/lib/*.cc"
10988 "${TF_LITE_DIR} /experimental/microfrontend/lib/*.cpp" )
11089
111- # lite kernels
90+ # lite kernels
11291
11392file (GLOB TF_LITE_KERNELS_SRCS
11493 "${TF_LITE_DIR} /kernels/*.c"
11594 "${TF_LITE_DIR} /kernels/*.cpp"
95+ "${TF_LITE_DIR} /kernels/*.cc"
11696 "${TF_LITE_DIR} /kernels/internal/*.c"
11797 "${TF_LITE_DIR} /kernels/internal/*.cpp"
98+ "${TF_LITE_DIR} /kernels/internal/*.cc"
11899 "${TF_LITE_DIR} /kernels/internal/reference/*.c"
119100 "${TF_LITE_DIR} /kernels/internal/reference/*.cpp"
101+ "${TF_LITE_DIR} /kernels/internal/reference/*.cc"
120102 )
121103
122- # lite schema
104+ # lite schema
123105file (GLOB TF_LITE_SCHEMA_SRCS
124106 "${TF_LITE_DIR} /schema/*.c"
107+ "${TF_LITE_DIR} /schema/*.cc"
125108 "${TF_LITE_DIR} /schema/*.cpp" )
126109
127- # micro
110+ # micro
128111
129112file (GLOB TF_MICRO_SRCS
130113 "${TF_MICRO_DIR} /*.c"
114+ "${TF_MICRO_DIR} /*.cc"
131115 "${TF_MICRO_DIR} /*.cpp" )
132116
133-
117+
134118# logs are platform specific and added seperately
135119
136120list (REMOVE_ITEM TF_MICRO_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/debug_log.cpp)
@@ -139,24 +123,28 @@ list(REMOVE_ITEM TF_MICRO_SRCS ${CMAKE_CURRENT_LIST_DIR}/tflm/tensorflow/lite/mi
139123# arena allocator
140124file (GLOB TF_MICRO_ARENA_ALLOCATOR_SRCS
141125 "${TF_MICRO_DIR} /arena_allocator/*.cpp"
126+ "${TF_MICRO_DIR} /arena_allocator/*.cc"
142127 "${TF_MICRO_DIR} /arena_allocator/*.c" )
143128
144- # micro kernels
129+ # micro kernels
145130
146131file (GLOB TF_MICRO_KERNELS_SRCS
147132 "${TF_MICRO_DIR} /kernels/*.c"
133+ "${TF_MICRO_DIR} /kernels/*.cc"
148134 "${TF_MICRO_DIR} /kernels/*.cpp" )
149135
150- # micro memory_planner
136+ # micro memory_planner
151137
152138file (GLOB TF_MICRO_MEMORY_PLANNER_SRCS
153139 "${TF_MICRO_DIR} /memory_planner/*.cpp"
140+ "${TF_MICRO_DIR} /memory_planner/*.cc"
154141 "${TF_MICRO_DIR} /memory_planner/*.c" )
155142
156143# tflite_bridge
157144
158145file (GLOB TF_MICRO_TFLITE_BRIDGE_SRCS
159146 "${TF_MICRO_DIR} /tflite_bridge/*.cpp"
147+ "${TF_MICRO_DIR} /tflite_bridge/*.cc"
160148 "${TF_MICRO_DIR} /tflite_bridge/*.c" )
161149
162150set (BOARD_ADDITIONAL_SRCS "" )
@@ -171,7 +159,7 @@ if (MICROLITE_PLATFORM STREQUAL "RP2")
171159 list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/pooling.cpp)
172160 list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/softmax.cpp)
173161 list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/svdf.cpp)
174-
162+
175163 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/add.cpp)
176164 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/conv.cpp)
177165 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/depthwise_conv.cpp)
@@ -180,7 +168,7 @@ if (MICROLITE_PLATFORM STREQUAL "RP2")
180168 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/pooling.cpp)
181169 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/softmax.cpp)
182170 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/svdf.cpp)
183-
171+
184172 set (CMSIS_NN_SRCS
185173
186174 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /ActivationFunctions/arm_relu6_s8.c
@@ -243,7 +231,7 @@ if (MICROLITE_PLATFORM STREQUAL "RP2")
243231 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SoftmaxFunctions/arm_softmax_s8.c
244232 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SoftmaxFunctions/arm_softmax_s8_s16.c
245233 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SoftmaxFunctions/arm_softmax_u8.c
246-
234+
247235 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SVDFunctions
248236 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SVDFunctions/arm_svdf_s8.c
249237 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SVDFunctions/arm_svdf_state_s16_s8.c
@@ -279,13 +267,47 @@ target_sources(microlite INTERFACE
279267
280268else ()
281269
270+ if (CONFIG_IDF_TARGET)
271+ set (tfmicro_kernels_dir ${TF_MICRO_DIR} /kernels)
272+ # set(tfmicro_nn_kernels_dir
273+ # ${tfmicro_kernels_dir}/)
274+
275+ # remove sources which will be provided by esp_nn
276+ list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS
277+ "${tfmicro_kernels_dir} /add.cc"
278+ "${tfmicro_kernels_dir} /conv.cc"
279+ "${tfmicro_kernels_dir} /depthwise_conv.cc"
280+ "${tfmicro_kernels_dir} /fully_connected.cc"
281+ "${tfmicro_kernels_dir} /mul.cc"
282+ "${tfmicro_kernels_dir} /pooling.cc"
283+ "${tfmicro_kernels_dir} /softmax.cc"
284+ )
285+
286+ # tflm wrappers for ESP_NN
287+ FILE (GLOB ESP_NN_WRAPPERS
288+ "${tfmicro_kernels_dir} /esp_nn/*.cc" )
289+ endif ()
282290
283- target_sources (microlite INTERFACE
284291# microlite micropython module sources
292+ set (MICROLITE_PYTHON_SRCS
285293 ${CMAKE_CURRENT_LIST_DIR} /tensorflow-microlite.c
286294 ${CMAKE_CURRENT_LIST_DIR} /audio_frontend.c
287- ${CMAKE_CURRENT_LIST_DIR} /openmv-libtf.cpp
288295 ${CMAKE_CURRENT_LIST_DIR} /micropython-error-reporter.cpp
296+ )
297+
298+ if (CONFIG_IDF_TARGET)
299+ list (APPEND MICROLITE_PYTHON_SRCS
300+ ${CMAKE_CURRENT_LIST_DIR} /openmv-libtf-updated.cpp
301+ )
302+ else ()
303+ list (APPEND MICROLITE_PYTHON_SRCS
304+ ${CMAKE_CURRENT_LIST_DIR} /openmv-libtf.cpp
305+ )
306+ endif ()
307+
308+ target_sources (microlite INTERFACE
309+ # micro_python sources for tflite
310+ ${MICROLITE_PYTHON_SRCS}
289311
290312 # tf lite sources
291313 ${TF_LITE_C_SRCS}
@@ -302,8 +324,27 @@ target_sources(microlite INTERFACE
302324 ${TF_MICRO_TFLITE_BRIDGE_SRCS}
303325
304326 ${TF_MICROLITE_LOG}
327+ ${ESP_NN_SRCS} # include esp-nn sources for Espressif chipsets
328+ ${ESP_NN_WRAPPERS} # add tflm wrappers for ESP_NN
329+ )
305330
306- )
331+ if (CONFIG_IDF_TARGET)
332+ set (signal_srcs
333+ ${TF_ESP_DIR} /signal/micro/kernels/rfft.cc
334+ ${TF_ESP_DIR} /signal/micro/kernels/window.cc
335+ ${TF_ESP_DIR} /signal/src/kiss_fft_wrappers/kiss_fft_float.cc
336+ ${TF_ESP_DIR} /signal/src/kiss_fft_wrappers/kiss_fft_int16.cc
337+ ${TF_ESP_DIR} /signal/src/kiss_fft_wrappers/kiss_fft_int32.cc
338+ ${TF_ESP_DIR} /signal/src/rfft_float.cc
339+ ${TF_ESP_DIR} /signal/src/rfft_int16.cc
340+ ${TF_ESP_DIR} /signal/src/rfft_int32.cc
341+ ${TF_ESP_DIR} /signal/src/window.cc
342+ )
343+ target_sources (microlite INTERFACE
344+ ${CMAKE_CURRENT_LIST_DIR} /python_ops_resolver.cc
345+ ${signal_srcs}
346+ )
347+ endif ()
307348
308349endif ()
309350
@@ -350,11 +391,22 @@ target_compile_options(microlite INTERFACE
350391 -Wno-error=maybe-uninitialized
351392)
352393
353-
354-
394+ else ()
395+ if (CONFIG_IDF_TARGET)
396+ target_include_directories (microlite INTERFACE
397+ ${TF_ESP_DIR}
398+ ${TF_ESP_DIR} /third_party/kissfft
399+ ${TF_ESP_DIR} /third_party/kissfft/tools
400+ ${TF_ESP_DIR} /third_party/flatbuffers/include
401+ ${TF_ESP_DIR} /third_party/gemmlowp
402+ ${TF_ESP_DIR} /third_party/ruy
403+ ${TF_ESP_DIR} /signal/micro/kernels
404+ ${TF_ESP_DIR} /signal/src
405+ ${TF_ESP_DIR} /signal/src/kiss_fft_wrappers
406+ ${ESP_NN_INC}
407+ )
355408else ()
356409
357- # ESP32
358410target_include_directories (microlite INTERFACE
359411 ${CMAKE_CURRENT_LIST_DIR}
360412 ${CMAKE_CURRENT_LIST_DIR} /tflm
@@ -364,13 +416,20 @@ target_include_directories(microlite INTERFACE
364416 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/gemmlowp
365417 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/ruy
366418)
419+ endif ()
367420
368421target_compile_definitions (microlite INTERFACE
369422 MODULE_MICROLITE_ENABLED=1
370423 TF_LITE_STATIC_MEMORY=1
371424 TF_LITE_MCU_DEBUG_LOG
372425 NDEBUG
373- )
426+ )
427+ if (CONFIG_IDF_TARGET)
428+ target_compile_definitions (microlite INTERFACE
429+ ESP_NN=1 # enables esp_nn optimizations if those sources are added
430+ CONFIG_NN_OPTIMIZED=1 # use Optimized vs ansi code from ESP-NN
431+ )
432+ endif ()
374433
375434target_compile_options (microlite INTERFACE
376435 -Wno-error
@@ -388,7 +447,4 @@ target_compile_options(microlite INTERFACE
388447
389448endif ()
390449
391-
392-
393450target_link_libraries (usermod INTERFACE microlite)
394-
0 commit comments