@@ -28,109 +28,100 @@ if (PICO_SDK_PATH)
28
28
set (MICROLITE_PLATFORM "RP2" )
29
29
endif ()
30
30
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 )
33
33
endif ()
34
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 ()
35
+ # `py.cmake` for `micropy_gather_target_properties` macro usage
36
+ include (${MICROPY_DIR} /py/py.cmake )
42
37
43
- if (IDF_TARGET STREQUAL "esp32c3" )
44
- set (MICROLITE_PLATFORM "ESP32C3" )
45
- endif ()
38
+ include (${CMAKE_CURRENT_LIST_DIR} /micropython_esp.cmake )
46
39
47
40
get_filename_component (TENSORFLOW_DIR ${PROJECT_DIR} /../../../tensorflow ABSOLUTE )
48
41
49
42
add_library (microlite INTERFACE )
50
43
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
-
61
44
# needed when we have custom/specialized kernels.
62
45
# add_custom_command(
63
46
# OUTPUT ${TF_MICROLITE_SPECIALIZED_SRCS}
64
47
# COMMAND cd ${TENSORFLOW_DIR} && ${Python3_EXECUTABLE} ${MICROPY_DIR}/py/makeversionhdr.py ${MICROPY_MPVERSION}
65
48
# DEPENDS MICROPY_FORCE_BUILD
66
49
# )
67
50
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
-
78
51
if (MICROLITE_PLATFORM STREQUAL "RP2" )
79
- set (TF_MICROLITE_LOG
52
+ set (TF_MICROLITE_LOG
80
53
${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/cortex_m_generic/debug_log.cpp
81
54
${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/cortex_m_generic/micro_time.cpp
82
55
)
83
56
endif ()
84
57
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 ()
85
70
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
94
72
95
73
file (GLOB TF_LITE_C_SRCS
96
74
"${TF_LITE_DIR} /c/*.cpp"
97
75
"${TF_LITE_DIR} /c/*.c" )
98
76
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 ()
101
85
file (GLOB TF_LITE_API_SRCS
102
86
"${TF_LITE_DIR} /core/api/*.cpp"
103
87
"${TF_LITE_DIR} /core/api/*.c" )
88
+ endif ()
104
89
105
- # lite experimental
90
+ # lite experimental
106
91
107
92
file (GLOB TF_LITE_MICROFRONTEND_SRCS
108
93
"${TF_LITE_DIR} /experimental/microfrontend/lib/*.c"
94
+ "${TF_LITE_DIR} /experimental/microfrontend/lib/*.cc"
109
95
"${TF_LITE_DIR} /experimental/microfrontend/lib/*.cpp" )
110
96
111
- # lite kernels
97
+ # lite kernels
112
98
113
99
file (GLOB TF_LITE_KERNELS_SRCS
114
100
"${TF_LITE_DIR} /kernels/*.c"
115
101
"${TF_LITE_DIR} /kernels/*.cpp"
102
+ "${TF_LITE_DIR} /kernels/*.cc"
116
103
"${TF_LITE_DIR} /kernels/internal/*.c"
117
104
"${TF_LITE_DIR} /kernels/internal/*.cpp"
105
+ "${TF_LITE_DIR} /kernels/internal/*.cc"
118
106
"${TF_LITE_DIR} /kernels/internal/reference/*.c"
119
107
"${TF_LITE_DIR} /kernels/internal/reference/*.cpp"
108
+ "${TF_LITE_DIR} /kernels/internal/reference/*.cc"
120
109
)
121
110
122
- # lite schema
111
+ # lite schema
123
112
file (GLOB TF_LITE_SCHEMA_SRCS
124
113
"${TF_LITE_DIR} /schema/*.c"
114
+ "${TF_LITE_DIR} /schema/*.cc"
125
115
"${TF_LITE_DIR} /schema/*.cpp" )
126
116
127
- # micro
117
+ # micro
128
118
129
119
file (GLOB TF_MICRO_SRCS
130
120
"${TF_MICRO_DIR} /*.c"
121
+ "${TF_MICRO_DIR} /*.cc"
131
122
"${TF_MICRO_DIR} /*.cpp" )
132
123
133
-
124
+
134
125
# logs are platform specific and added seperately
135
126
136
127
list (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
139
130
# arena allocator
140
131
file (GLOB TF_MICRO_ARENA_ALLOCATOR_SRCS
141
132
"${TF_MICRO_DIR} /arena_allocator/*.cpp"
133
+ "${TF_MICRO_DIR} /arena_allocator/*.cc"
142
134
"${TF_MICRO_DIR} /arena_allocator/*.c" )
143
135
144
- # micro kernels
136
+ # micro kernels
145
137
146
138
file (GLOB TF_MICRO_KERNELS_SRCS
147
139
"${TF_MICRO_DIR} /kernels/*.c"
140
+ "${TF_MICRO_DIR} /kernels/*.cc"
148
141
"${TF_MICRO_DIR} /kernels/*.cpp" )
149
142
150
- # micro memory_planner
143
+ # micro memory_planner
151
144
152
145
file (GLOB TF_MICRO_MEMORY_PLANNER_SRCS
153
146
"${TF_MICRO_DIR} /memory_planner/*.cpp"
147
+ "${TF_MICRO_DIR} /memory_planner/*.cc"
154
148
"${TF_MICRO_DIR} /memory_planner/*.c" )
155
149
156
150
# tflite_bridge
157
151
158
152
file (GLOB TF_MICRO_TFLITE_BRIDGE_SRCS
159
153
"${TF_MICRO_DIR} /tflite_bridge/*.cpp"
154
+ "${TF_MICRO_DIR} /tflite_bridge/*.cc"
160
155
"${TF_MICRO_DIR} /tflite_bridge/*.c" )
161
156
162
157
set (BOARD_ADDITIONAL_SRCS "" )
@@ -171,7 +166,7 @@ if (MICROLITE_PLATFORM STREQUAL "RP2")
171
166
list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/pooling.cpp )
172
167
list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/softmax.cpp )
173
168
list (REMOVE_ITEM TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/svdf.cpp )
174
-
169
+
175
170
list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/add.cpp )
176
171
list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/conv.cpp )
177
172
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")
180
175
list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/pooling.cpp )
181
176
list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/softmax.cpp )
182
177
list (APPEND TF_MICRO_KERNELS_SRCS ${CMAKE_CURRENT_LIST_DIR} /tflm/tensorflow/lite/micro/kernels/cmsis_nn/svdf.cpp )
183
-
178
+
184
179
set (CMSIS_NN_SRCS
185
180
186
181
${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source/ActivationFunctions/arm_relu6_s8.c
@@ -243,7 +238,7 @@ if (MICROLITE_PLATFORM STREQUAL "RP2")
243
238
${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source/SoftmaxFunctions/arm_softmax_s8.c
244
239
${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source/SoftmaxFunctions/arm_softmax_s8_s16.c
245
240
${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source/SoftmaxFunctions/arm_softmax_u8.c
246
-
241
+
247
242
${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source/SVDFunctions
248
243
${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/cmsis_nn/Source/SVDFunctions/arm_svdf_s8.c
249
244
${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
279
274
280
275
else ()
281
276
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 ()
282
297
283
- target_sources (microlite INTERFACE
284
298
# microlite micropython module sources
299
+ set (MICROLITE_PYTHON_SRCS
285
300
${CMAKE_CURRENT_LIST_DIR} /tensorflow-microlite.c
286
301
${CMAKE_CURRENT_LIST_DIR} /audio_frontend.c
287
- ${CMAKE_CURRENT_LIST_DIR} /openmv-libtf.cpp
288
302
${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}
289
318
290
319
# tf lite sources
291
320
${TF_LITE_C_SRCS}
@@ -302,8 +331,27 @@ target_sources(microlite INTERFACE
302
331
${TF_MICRO_TFLITE_BRIDGE_SRCS}
303
332
304
333
${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
+ )
305
337
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 ()
307
355
308
356
endif ()
309
357
@@ -350,11 +398,22 @@ target_compile_options(microlite INTERFACE
350
398
-Wno-error=maybe-uninitialized
351
399
)
352
400
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
+ )
355
415
else ()
356
416
357
- # ESP32
358
417
target_include_directories (microlite INTERFACE
359
418
${CMAKE_CURRENT_LIST_DIR}
360
419
${CMAKE_CURRENT_LIST_DIR} /tflm
@@ -364,13 +423,20 @@ target_include_directories(microlite INTERFACE
364
423
${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/gemmlowp
365
424
${CMAKE_CURRENT_LIST_DIR} /tflm/third_party/ruy
366
425
)
426
+ endif ()
367
427
368
428
target_compile_definitions (microlite INTERFACE
369
429
MODULE_MICROLITE_ENABLED=1
370
430
TF_LITE_STATIC_MEMORY=1
371
431
TF_LITE_MCU_DEBUG_LOG
372
432
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 ()
374
440
375
441
target_compile_options (microlite INTERFACE
376
442
-Wno-error
@@ -388,7 +454,5 @@ target_compile_options(microlite INTERFACE
388
454
389
455
endif ()
390
456
391
-
392
-
393
457
target_link_libraries (usermod INTERFACE microlite )
394
-
458
+ micropy_gather_target_properties ( microlite )
0 commit comments