@@ -28,109 +28,100 @@ if (PICO_SDK_PATH)
2828 set (MICROLITE_PLATFORM "RP2" )
2929endif ()
3030
31- if (IDF_TARGET STREQUAL "esp32" )
32- set (MICROLITE_PLATFORM "ESP32" )
31+ if (NOT MICROPY_DIR )
32+ get_filename_component (MICROPY_DIR ${PROJECT_DIR} /../.. ABSOLUTE )
3333endif ()
3434
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 ()
35+ # `py.cmake` for `micropy_gather_target_properties` macro usage
36+ include (${MICROPY_DIR} /py/py.cmake)
4237
43- if (IDF_TARGET STREQUAL "esp32c3" )
44- set (MICROLITE_PLATFORM "ESP32C3" )
45- endif ()
38+ include (${CMAKE_CURRENT_LIST_DIR} /micropython_esp.cmake)
4639
4740get_filename_component (TENSORFLOW_DIR ${PROJECT_DIR} /../../../tensorflow ABSOLUTE )
4841
4942add_library (microlite INTERFACE )
5043
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-
6144# needed when we have custom/specialized kernels.
6245# add_custom_command(
6346# OUTPUT ${TF_MICROLITE_SPECIALIZED_SRCS}
6447# COMMAND cd ${TENSORFLOW_DIR} && ${Python3_EXECUTABLE} ${MICROPY_DIR}/py/makeversionhdr.py ${MICROPY_MPVERSION}
6548# DEPENDS MICROPY_FORCE_BUILD
6649# )
6750
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-
7851if (MICROLITE_PLATFORM STREQUAL "RP2" )
79- set (TF_MICROLITE_LOG
52+ set (TF_MICROLITE_LOG
8053 ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/cortex_m_generic/debug_log.cpp
8154 ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/cortex_m_generic/micro_time.cpp
8255 )
8356endif ()
8457
58+ if (CONFIG_IDF_TARGET)
59+ set (TF_ESP_DIR "${CMAKE_CURRENT_LIST_DIR} /../../tflm_esp_kernels/components/tflite-lib" )
60+ set (TF_LITE_DIR "${TF_ESP_DIR} /tensorflow/lite" )
61+ set (TF_MICRO_DIR "${TF_LITE_DIR} /micro" )
62+ set (TF_MICROLITE_LOG
63+ ${TF_MICRO_DIR} /debug_log.cc
64+ ${TF_MICRO_DIR} /micro_time.cc
65+ )
66+ else ()
67+ set (TF_LITE_DIR "${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite" )
68+ set (TF_MICRO_DIR "${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro" )
69+ endif ()
8570
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
71+ # lite c
9472
9573file (GLOB TF_LITE_C_SRCS
9674 "${TF_LITE_DIR} /c/*.cpp"
9775 "${TF_LITE_DIR} /c/*.c" )
9876
99- # lite core/api
100-
77+ # lite core/api
78+ if (CONFIG_IDF_TARGET)
79+ file (GLOB TF_LITE_API_SRCS
80+ "${TF_LITE_DIR} /core/api/*.cc"
81+ "${TF_LITE_DIR} /core/api/*.c"
82+ "${TF_LITE_DIR} /core/c/*.cc"
83+ "${TF_LITE_DIR} /core/c/*.c" )
84+ else ()
10185file (GLOB TF_LITE_API_SRCS
10286 "${TF_LITE_DIR} /core/api/*.cpp"
10387 "${TF_LITE_DIR} /core/api/*.c" )
88+ endif ()
10489
105- # lite experimental
90+ # lite experimental
10691
10792file (GLOB TF_LITE_MICROFRONTEND_SRCS
10893 "${TF_LITE_DIR} /experimental/microfrontend/lib/*.c"
94+ "${TF_LITE_DIR} /experimental/microfrontend/lib/*.cc"
10995 "${TF_LITE_DIR} /experimental/microfrontend/lib/*.cpp" )
11096
111- # lite kernels
97+ # lite kernels
11298
11399file (GLOB TF_LITE_KERNELS_SRCS
114100 "${TF_LITE_DIR} /kernels/*.c"
115101 "${TF_LITE_DIR} /kernels/*.cpp"
102+ "${TF_LITE_DIR} /kernels/*.cc"
116103 "${TF_LITE_DIR} /kernels/internal/*.c"
117104 "${TF_LITE_DIR} /kernels/internal/*.cpp"
105+ "${TF_LITE_DIR} /kernels/internal/*.cc"
118106 "${TF_LITE_DIR} /kernels/internal/reference/*.c"
119107 "${TF_LITE_DIR} /kernels/internal/reference/*.cpp"
108+ "${TF_LITE_DIR} /kernels/internal/reference/*.cc"
120109 )
121110
122- # lite schema
111+ # lite schema
123112file (GLOB TF_LITE_SCHEMA_SRCS
124113 "${TF_LITE_DIR} /schema/*.c"
114+ "${TF_LITE_DIR} /schema/*.cc"
125115 "${TF_LITE_DIR} /schema/*.cpp" )
126116
127- # micro
117+ # micro
128118
129119file (GLOB TF_MICRO_SRCS
130120 "${TF_MICRO_DIR} /*.c"
121+ "${TF_MICRO_DIR} /*.cc"
131122 "${TF_MICRO_DIR} /*.cpp" )
132123
133-
124+
134125# logs are platform specific and added seperately
135126
136127list (REMOVE_ITEM TF_MICRO_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/debug_log.cpp)
@@ -139,24 +130,28 @@ list(REMOVE_ITEM TF_MICRO_SRCS ${CMAKE_CURRENT_LIST_DIR}/tflm/tensorflow/lite/mi
139130# arena allocator
140131file (GLOB TF_MICRO_ARENA_ALLOCATOR_SRCS
141132 "${TF_MICRO_DIR} /arena_allocator/*.cpp"
133+ "${TF_MICRO_DIR} /arena_allocator/*.cc"
142134 "${TF_MICRO_DIR} /arena_allocator/*.c" )
143135
144- # micro kernels
136+ # micro kernels
145137
146138file (GLOB TF_MICRO_KERNELS_SRCS
147139 "${TF_MICRO_DIR} /kernels/*.c"
140+ "${TF_MICRO_DIR} /kernels/*.cc"
148141 "${TF_MICRO_DIR} /kernels/*.cpp" )
149142
150- # micro memory_planner
143+ # micro memory_planner
151144
152145file (GLOB TF_MICRO_MEMORY_PLANNER_SRCS
153146 "${TF_MICRO_DIR} /memory_planner/*.cpp"
147+ "${TF_MICRO_DIR} /memory_planner/*.cc"
154148 "${TF_MICRO_DIR} /memory_planner/*.c" )
155149
156150# tflite_bridge
157151
158152file (GLOB TF_MICRO_TFLITE_BRIDGE_SRCS
159153 "${TF_MICRO_DIR} /tflite_bridge/*.cpp"
154+ "${TF_MICRO_DIR} /tflite_bridge/*.cc"
160155 "${TF_MICRO_DIR} /tflite_bridge/*.c" )
161156
162157set (BOARD_ADDITIONAL_SRCS "" )
@@ -171,7 +166,7 @@ if (MICROLITE_PLATFORM STREQUAL "RP2")
171166 list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/pooling.cpp)
172167 list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/softmax.cpp)
173168 list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/svdf.cpp)
174-
169+
175170 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/add.cpp)
176171 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/conv.cpp)
177172 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/depthwise_conv.cpp)
@@ -180,7 +175,7 @@ if (MICROLITE_PLATFORM STREQUAL "RP2")
180175 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/pooling.cpp)
181176 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/softmax.cpp)
182177 list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/svdf.cpp)
183-
178+
184179 set (CMSIS_NN_SRCS
185180
186181 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /ActivationFunctions/arm_relu6_s8.c
@@ -243,7 +238,7 @@ if (MICROLITE_PLATFORM STREQUAL "RP2")
243238 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SoftmaxFunctions/arm_softmax_s8.c
244239 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SoftmaxFunctions/arm_softmax_s8_s16.c
245240 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SoftmaxFunctions/arm_softmax_u8.c
246-
241+
247242 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SVDFunctions
248243 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SVDFunctions/arm_svdf_s8.c
249244 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source /SVDFunctions/arm_svdf_state_s16_s8.c
@@ -279,13 +274,47 @@ target_sources(microlite INTERFACE
279274
280275else ()
281276
277+ if (CONFIG_IDF_TARGET)
278+ set (tfmicro_kernels_dir ${TF_MICRO_DIR} /kernels)
279+ # set(tfmicro_nn_kernels_dir
280+ # ${tfmicro_kernels_dir}/)
281+
282+ # remove sources which will be provided by esp_nn
283+ list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS
284+ "${tfmicro_kernels_dir} /add.cc"
285+ "${tfmicro_kernels_dir} /conv.cc"
286+ "${tfmicro_kernels_dir} /depthwise_conv.cc"
287+ "${tfmicro_kernels_dir} /fully_connected.cc"
288+ "${tfmicro_kernels_dir} /mul.cc"
289+ "${tfmicro_kernels_dir} /pooling.cc"
290+ "${tfmicro_kernels_dir} /softmax.cc"
291+ )
292+
293+ # tflm wrappers for ESP_NN
294+ FILE (GLOB ESP_NN_WRAPPERS
295+ "${tfmicro_kernels_dir} /esp_nn/*.cc" )
296+ endif ()
282297
283- target_sources (microlite INTERFACE
284298# microlite micropython module sources
299+ set (MICROLITE_PYTHON_SRCS
285300 ${CMAKE_CURRENT_LIST_DIR} /tensorflow-microlite.c
286301 ${CMAKE_CURRENT_LIST_DIR} /audio_frontend.c
287- ${CMAKE_CURRENT_LIST_DIR} /openmv-libtf.cpp
288302 ${CMAKE_CURRENT_LIST_DIR} /micropython-error-reporter.cpp
303+ )
304+
305+ if (CONFIG_IDF_TARGET)
306+ list (APPEND MICROLITE_PYTHON_SRCS
307+ ${CMAKE_CURRENT_LIST_DIR} /openmv-libtf-updated.cpp
308+ )
309+ else ()
310+ list (APPEND MICROLITE_PYTHON_SRCS
311+ ${CMAKE_CURRENT_LIST_DIR} /openmv-libtf.cpp
312+ )
313+ endif ()
314+
315+ target_sources (microlite INTERFACE
316+ # micro_python sources for tflite
317+ ${MICROLITE_PYTHON_SRCS}
289318
290319 # tf lite sources
291320 ${TF_LITE_C_SRCS}
@@ -302,8 +331,27 @@ target_sources(microlite INTERFACE
302331 ${TF_MICRO_TFLITE_BRIDGE_SRCS}
303332
304333 ${TF_MICROLITE_LOG}
334+ ${ESP_NN_SRCS} # include esp-nn sources for Espressif chipsets
335+ ${ESP_NN_WRAPPERS} # add tflm wrappers for ESP_NN
336+ )
305337
306- )
338+ if (CONFIG_IDF_TARGET)
339+ set (signal_srcs
340+ ${TF_ESP_DIR} /signal/micro/kernels/rfft.cc
341+ ${TF_ESP_DIR} /signal/micro/kernels/window.cc
342+ ${TF_ESP_DIR} /signal/src/kiss_fft_wrappers/kiss_fft_float.cc
343+ ${TF_ESP_DIR} /signal/src/kiss_fft_wrappers/kiss_fft_int16.cc
344+ ${TF_ESP_DIR} /signal/src/kiss_fft_wrappers/kiss_fft_int32.cc
345+ ${TF_ESP_DIR} /signal/src/rfft_float.cc
346+ ${TF_ESP_DIR} /signal/src/rfft_int16.cc
347+ ${TF_ESP_DIR} /signal/src/rfft_int32.cc
348+ ${TF_ESP_DIR} /signal/src/window.cc
349+ )
350+ target_sources (microlite INTERFACE
351+ ${CMAKE_CURRENT_LIST_DIR} /python_ops_resolver.cc
352+ ${signal_srcs}
353+ )
354+ endif ()
307355
308356endif ()
309357
@@ -350,11 +398,22 @@ target_compile_options(microlite INTERFACE
350398 -Wno-error=maybe-uninitialized
351399)
352400
353-
354-
401+ else ()
402+ if (CONFIG_IDF_TARGET)
403+ target_include_directories (microlite INTERFACE
404+ ${TF_ESP_DIR}
405+ ${TF_ESP_DIR} /third_party/kissfft
406+ ${TF_ESP_DIR} /third_party/kissfft/tools
407+ ${TF_ESP_DIR} /third_party/flatbuffers/include
408+ ${TF_ESP_DIR} /third_party/gemmlowp
409+ ${TF_ESP_DIR} /third_party/ruy
410+ ${TF_ESP_DIR} /signal/micro/kernels
411+ ${TF_ESP_DIR} /signal/src
412+ ${TF_ESP_DIR} /signal/src/kiss_fft_wrappers
413+ ${ESP_NN_INC}
414+ )
355415else ()
356416
357- # ESP32
358417target_include_directories (microlite INTERFACE
359418 ${CMAKE_CURRENT_LIST_DIR}
360419 ${CMAKE_CURRENT_LIST_DIR} /tflm
@@ -364,13 +423,20 @@ target_include_directories(microlite INTERFACE
364423 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/gemmlowp
365424 ${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/ruy
366425)
426+ endif ()
367427
368428target_compile_definitions (microlite INTERFACE
369429 MODULE_MICROLITE_ENABLED=1
370430 TF_LITE_STATIC_MEMORY=1
371431 TF_LITE_MCU_DEBUG_LOG
372432 NDEBUG
373- )
433+ )
434+ if (CONFIG_IDF_TARGET)
435+ target_compile_definitions (microlite INTERFACE
436+ ESP_NN=1 # enables esp_nn optimizations if those sources are added
437+ CONFIG_NN_OPTIMIZED=1 # use Optimized vs ansi code from ESP-NN
438+ )
439+ endif ()
374440
375441target_compile_options (microlite INTERFACE
376442 -Wno-error
@@ -388,7 +454,5 @@ target_compile_options(microlite INTERFACE
388454
389455endif ()
390456
391-
392-
393457target_link_libraries (usermod INTERFACE microlite)
394-
458+ micropy_gather_target_properties(microlite)
0 commit comments