mlonmcu 0.3.0.dev0__3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. mlonmcu/__init__.py +26 -0
  2. mlonmcu/artifact.py +172 -0
  3. mlonmcu/cli/__init__.py +19 -0
  4. mlonmcu/cli/build.py +119 -0
  5. mlonmcu/cli/cleanup.py +75 -0
  6. mlonmcu/cli/common.py +227 -0
  7. mlonmcu/cli/compile.py +87 -0
  8. mlonmcu/cli/env.py +68 -0
  9. mlonmcu/cli/export.py +93 -0
  10. mlonmcu/cli/flow.py +67 -0
  11. mlonmcu/cli/helper/__init__.py +18 -0
  12. mlonmcu/cli/helper/filter.py +25 -0
  13. mlonmcu/cli/helper/parse.py +159 -0
  14. mlonmcu/cli/init.py +130 -0
  15. mlonmcu/cli/load.py +87 -0
  16. mlonmcu/cli/main.py +116 -0
  17. mlonmcu/cli/models.py +48 -0
  18. mlonmcu/cli/run.py +56 -0
  19. mlonmcu/cli/setup.py +136 -0
  20. mlonmcu/cli/tune.py +48 -0
  21. mlonmcu/config.py +219 -0
  22. mlonmcu/context/__init__.py +22 -0
  23. mlonmcu/context/context.py +545 -0
  24. mlonmcu/context/read_write_filelock.py +327 -0
  25. mlonmcu/environment/__init__.py +18 -0
  26. mlonmcu/environment/config.py +214 -0
  27. mlonmcu/environment/environment.py +501 -0
  28. mlonmcu/environment/init.py +191 -0
  29. mlonmcu/environment/list.py +81 -0
  30. mlonmcu/environment/loader.py +250 -0
  31. mlonmcu/environment/templates.py +69 -0
  32. mlonmcu/environment/writer.py +117 -0
  33. mlonmcu/feature/__init__.py +18 -0
  34. mlonmcu/feature/feature.py +230 -0
  35. mlonmcu/feature/features.py +1537 -0
  36. mlonmcu/feature/type.py +33 -0
  37. mlonmcu/flow/__init__.py +61 -0
  38. mlonmcu/flow/backend.py +234 -0
  39. mlonmcu/flow/framework.py +69 -0
  40. mlonmcu/flow/tflm/__init__.py +23 -0
  41. mlonmcu/flow/tflm/backend/__init__.py +23 -0
  42. mlonmcu/flow/tflm/backend/backend.py +47 -0
  43. mlonmcu/flow/tflm/backend/tflmc.py +129 -0
  44. mlonmcu/flow/tflm/backend/tflmi.py +385 -0
  45. mlonmcu/flow/tflm/framework.py +81 -0
  46. mlonmcu/flow/tvm/__init__.py +23 -0
  47. mlonmcu/flow/tvm/backend/__init__.py +26 -0
  48. mlonmcu/flow/tvm/backend/backend.py +282 -0
  49. mlonmcu/flow/tvm/backend/model_info.py +307 -0
  50. mlonmcu/flow/tvm/backend/python_utils.py +36 -0
  51. mlonmcu/flow/tvm/backend/tuner.py +41 -0
  52. mlonmcu/flow/tvm/backend/tvmaot.py +162 -0
  53. mlonmcu/flow/tvm/backend/tvmaotplus.py +51 -0
  54. mlonmcu/flow/tvm/backend/tvmc_utils.py +172 -0
  55. mlonmcu/flow/tvm/backend/tvmcg.py +102 -0
  56. mlonmcu/flow/tvm/backend/tvmllvm.py +106 -0
  57. mlonmcu/flow/tvm/backend/tvmrt.py +151 -0
  58. mlonmcu/flow/tvm/backend/wrapper.py +645 -0
  59. mlonmcu/flow/tvm/framework.py +96 -0
  60. mlonmcu/logging.py +79 -0
  61. mlonmcu/mlonmcu.py +19 -0
  62. mlonmcu/models/__init__.py +31 -0
  63. mlonmcu/models/convert_data.py +107 -0
  64. mlonmcu/models/frontend.py +571 -0
  65. mlonmcu/models/group.py +29 -0
  66. mlonmcu/models/lookup.py +345 -0
  67. mlonmcu/models/metadata.py +133 -0
  68. mlonmcu/models/model.py +104 -0
  69. mlonmcu/models/options.py +64 -0
  70. mlonmcu/models/utils.py +136 -0
  71. mlonmcu/platform/__init__.py +27 -0
  72. mlonmcu/platform/_platform.py +46 -0
  73. mlonmcu/platform/espidf/__init__.py +25 -0
  74. mlonmcu/platform/espidf/espidf.py +489 -0
  75. mlonmcu/platform/espidf/espidf_target.py +257 -0
  76. mlonmcu/platform/lookup.py +126 -0
  77. mlonmcu/platform/microtvm/__init__.py +25 -0
  78. mlonmcu/platform/microtvm/microtvm.py +580 -0
  79. mlonmcu/platform/microtvm/microtvm_arduino_target.py +68 -0
  80. mlonmcu/platform/microtvm/microtvm_backend.py +64 -0
  81. mlonmcu/platform/microtvm/microtvm_espidf_target.py +94 -0
  82. mlonmcu/platform/microtvm/microtvm_etissvp_target.py +98 -0
  83. mlonmcu/platform/microtvm/microtvm_host_target.py +46 -0
  84. mlonmcu/platform/microtvm/microtvm_spike_target.py +230 -0
  85. mlonmcu/platform/microtvm/microtvm_target.py +189 -0
  86. mlonmcu/platform/microtvm/microtvm_template_target.py +55 -0
  87. mlonmcu/platform/microtvm/microtvm_zephyr_target.py +91 -0
  88. mlonmcu/platform/mlif/__init__.py +25 -0
  89. mlonmcu/platform/mlif/mlif.py +300 -0
  90. mlonmcu/platform/mlif/mlif_target.py +86 -0
  91. mlonmcu/platform/platform.py +244 -0
  92. mlonmcu/platform/tvm/__init__.py +25 -0
  93. mlonmcu/platform/tvm/tvm.py +429 -0
  94. mlonmcu/platform/tvm/tvm_backend.py +57 -0
  95. mlonmcu/platform/tvm/tvm_target.py +165 -0
  96. mlonmcu/platform/zephyr/__init__.py +25 -0
  97. mlonmcu/platform/zephyr/zephyr.py +450 -0
  98. mlonmcu/platform/zephyr/zephyr_target.py +110 -0
  99. mlonmcu/plugins.py +26 -0
  100. mlonmcu/report.py +99 -0
  101. mlonmcu/session/__init__.py +18 -0
  102. mlonmcu/session/postprocess/__init__.py +43 -0
  103. mlonmcu/session/postprocess/postprocess.py +62 -0
  104. mlonmcu/session/postprocess/postprocesses.py +487 -0
  105. mlonmcu/session/run.py +1008 -0
  106. mlonmcu/session/session.py +373 -0
  107. mlonmcu/setup/__init__.py +18 -0
  108. mlonmcu/setup/cache.py +147 -0
  109. mlonmcu/setup/gen_requirements.py +619 -0
  110. mlonmcu/setup/setup.py +285 -0
  111. mlonmcu/setup/task.py +380 -0
  112. mlonmcu/setup/tasks/__init__.py +40 -0
  113. mlonmcu/setup/tasks/arm_gcc.py +58 -0
  114. mlonmcu/setup/tasks/cmsisnn.py +151 -0
  115. mlonmcu/setup/tasks/common.py +36 -0
  116. mlonmcu/setup/tasks/corstone300.py +64 -0
  117. mlonmcu/setup/tasks/espidf.py +87 -0
  118. mlonmcu/setup/tasks/etiss.py +147 -0
  119. mlonmcu/setup/tasks/llvm.py +67 -0
  120. mlonmcu/setup/tasks/mlif.py +49 -0
  121. mlonmcu/setup/tasks/muriscvnn.py +166 -0
  122. mlonmcu/setup/tasks/pulp.py +192 -0
  123. mlonmcu/setup/tasks/riscv_gcc.py +146 -0
  124. mlonmcu/setup/tasks/spike.py +190 -0
  125. mlonmcu/setup/tasks/tf.py +92 -0
  126. mlonmcu/setup/tasks/tflite.py +59 -0
  127. mlonmcu/setup/tasks/tflmc.py +141 -0
  128. mlonmcu/setup/tasks/tvm.py +172 -0
  129. mlonmcu/setup/tasks/utvmcg.py +96 -0
  130. mlonmcu/setup/tasks/zephyr.py +119 -0
  131. mlonmcu/setup/utils.py +374 -0
  132. mlonmcu/target/__init__.py +37 -0
  133. mlonmcu/target/_target.py +41 -0
  134. mlonmcu/target/arm/__init__.py +3 -0
  135. mlonmcu/target/arm/corstone300.py +235 -0
  136. mlonmcu/target/arm/util.py +109 -0
  137. mlonmcu/target/common.py +194 -0
  138. mlonmcu/target/elf.py +256 -0
  139. mlonmcu/target/host_x86.py +84 -0
  140. mlonmcu/target/metrics.py +75 -0
  141. mlonmcu/target/riscv/__init__.py +7 -0
  142. mlonmcu/target/riscv/etiss_pulpino.py +462 -0
  143. mlonmcu/target/riscv/gvsoc_pulp.py +215 -0
  144. mlonmcu/target/riscv/ovpsim.py +301 -0
  145. mlonmcu/target/riscv/riscv.py +185 -0
  146. mlonmcu/target/riscv/riscv_qemu.py +166 -0
  147. mlonmcu/target/riscv/spike.py +243 -0
  148. mlonmcu/target/riscv/util.py +134 -0
  149. mlonmcu/target/target.py +200 -0
  150. mlonmcu/utils.py +49 -0
  151. mlonmcu/version.py +21 -0
  152. mlonmcu-0.3.0.dev0.dist-info/LICENSE +202 -0
  153. mlonmcu-0.3.0.dev0.dist-info/METADATA +343 -0
  154. mlonmcu-0.3.0.dev0.dist-info/NOTICE +8 -0
  155. mlonmcu-0.3.0.dev0.dist-info/RECORD +376 -0
  156. mlonmcu-0.3.0.dev0.dist-info/WHEEL +5 -0
  157. mlonmcu-0.3.0.dev0.dist-info/entry_points.txt +3 -0
  158. mlonmcu-0.3.0.dev0.dist-info/top_level.txt +1 -0
  159. resources/frameworks/tvm/crt_config/README.md +7 -0
  160. resources/frameworks/tvm/crt_config/crt_config.h +53 -0
  161. resources/frameworks/tvm/tuning_records/riscv_cpu_v0.01.log.best +46 -0
  162. resources/patches/fix_esp32c3_march.patch +20 -0
  163. resources/patches/pulp_freertos_support.patch +55 -0
  164. resources/platforms/espidf/micro_speech_esp32devboard/CMakeLists.txt +29 -0
  165. resources/platforms/espidf/micro_speech_esp32devboard/README.md +70 -0
  166. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/CMakeLists.txt +78 -0
  167. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/Kconfig +76 -0
  168. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_data.c +26 -0
  169. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_model_support/process_input.c +35 -0
  170. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_model_support/process_output.c +45 -0
  171. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/exit.h +26 -0
  172. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/ml_interface.h +70 -0
  173. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/printing.h +31 -0
  174. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface.c +74 -0
  175. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface_tflm.cc +64 -0
  176. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface_tvm.c +53 -0
  177. resources/platforms/espidf/micro_speech_esp32devboard/components/tflite-lib/CMakeLists.txt +140 -0
  178. resources/platforms/espidf/micro_speech_esp32devboard/components/tflite-lib/Kconfig +8 -0
  179. resources/platforms/espidf/micro_speech_esp32devboard/components/tvm-lib/CMakeLists.txt +66 -0
  180. resources/platforms/espidf/micro_speech_esp32devboard/components/tvm-lib/Kconfig +7 -0
  181. resources/platforms/espidf/micro_speech_esp32devboard/example_test.py +38 -0
  182. resources/platforms/espidf/micro_speech_esp32devboard/info.txt +9 -0
  183. resources/platforms/espidf/micro_speech_esp32devboard/main/CMakeLists.txt +58 -0
  184. resources/platforms/espidf/micro_speech_esp32devboard/main/audio_provider.cc +193 -0
  185. resources/platforms/espidf/micro_speech_esp32devboard/main/audio_provider.h +49 -0
  186. resources/platforms/espidf/micro_speech_esp32devboard/main/command_responder.cc +53 -0
  187. resources/platforms/espidf/micro_speech_esp32devboard/main/command_responder.h +35 -0
  188. resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.cc +132 -0
  189. resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.cc.orig +145 -0
  190. resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.h +55 -0
  191. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/COPYING +11 -0
  192. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/_kiss_fft_guts.h +168 -0
  193. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/kiss_fft.c +408 -0
  194. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/kiss_fft.h +124 -0
  195. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/tools/kiss_fftr.c +159 -0
  196. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/tools/kiss_fftr.h +46 -0
  197. resources/platforms/espidf/micro_speech_esp32devboard/main/main.cc +63 -0
  198. resources/platforms/espidf/micro_speech_esp32devboard/main/main_functions.cc +204 -0
  199. resources/platforms/espidf/micro_speech_esp32devboard/main/main_functions.h +37 -0
  200. resources/platforms/espidf/micro_speech_esp32devboard/main/micro_features_generator.cc +121 -0
  201. resources/platforms/espidf/micro_speech_esp32devboard/main/micro_features_generator.h +38 -0
  202. resources/platforms/espidf/micro_speech_esp32devboard/main/micro_model_settings.cc +23 -0
  203. resources/platforms/espidf/micro_speech_esp32devboard/main/micro_model_settings.h +43 -0
  204. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/bits.h +102 -0
  205. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft.cc +52 -0
  206. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft.h +50 -0
  207. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft_util.cc +69 -0
  208. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft_util.h +34 -0
  209. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank.c +134 -0
  210. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank.h +63 -0
  211. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank_util.c +220 -0
  212. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank_util.h +50 -0
  213. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend.c +72 -0
  214. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend.h +64 -0
  215. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend_util.c +85 -0
  216. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend_util.h +52 -0
  217. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_common.h +48 -0
  218. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_int16.cc +8 -0
  219. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_int16.h +34 -0
  220. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_lut.c +30 -0
  221. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_lut.h +40 -0
  222. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale.c +83 -0
  223. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale.h +39 -0
  224. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale_util.c +27 -0
  225. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale_util.h +45 -0
  226. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.c +51 -0
  227. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.h +46 -0
  228. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.c +45 -0
  229. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.h +50 -0
  230. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.c +56 -0
  231. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.h +47 -0
  232. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control_util.c +92 -0
  233. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control_util.h +57 -0
  234. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window.c +70 -0
  235. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window.h +49 -0
  236. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window_util.c +73 -0
  237. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window_util.h +45 -0
  238. resources/platforms/espidf/micro_speech_esp32devboard/main/pins.c +14 -0
  239. resources/platforms/espidf/micro_speech_esp32devboard/main/pins.h +30 -0
  240. resources/platforms/espidf/micro_speech_esp32devboard/main/recognize_commands.cc +150 -0
  241. resources/platforms/espidf/micro_speech_esp32devboard/main/recognize_commands.h +173 -0
  242. resources/platforms/espidf/micro_speech_esp32devboard/main/ringbuf.c +333 -0
  243. resources/platforms/espidf/micro_speech_esp32devboard/main/ringbuf.h +74 -0
  244. resources/platforms/espidf/micro_speech_esp32devboard/sdkconfig.defaults +36 -0
  245. resources/platforms/espidf/project/CMakeLists.txt +29 -0
  246. resources/platforms/espidf/project/README.md +70 -0
  247. resources/platforms/espidf/project/components/mlif/CMakeLists.txt +77 -0
  248. resources/platforms/espidf/project/components/mlif/Kconfig +76 -0
  249. resources/platforms/espidf/project/components/mlif/default_data.c +26 -0
  250. resources/platforms/espidf/project/components/mlif/default_model_support/process_input.c +35 -0
  251. resources/platforms/espidf/project/components/mlif/default_model_support/process_output.c +45 -0
  252. resources/platforms/espidf/project/components/mlif/include/exit.h +26 -0
  253. resources/platforms/espidf/project/components/mlif/include/ml_interface.h +60 -0
  254. resources/platforms/espidf/project/components/mlif/include/printing.h +31 -0
  255. resources/platforms/espidf/project/components/mlif/ml_interface.c +54 -0
  256. resources/platforms/espidf/project/components/mlif/ml_interface_tflm.cc +40 -0
  257. resources/platforms/espidf/project/components/mlif/ml_interface_tvm.c +40 -0
  258. resources/platforms/espidf/project/components/tflite-lib/CMakeLists.txt +142 -0
  259. resources/platforms/espidf/project/components/tflite-lib/Kconfig +8 -0
  260. resources/platforms/espidf/project/components/tvm-lib/CMakeLists.txt +66 -0
  261. resources/platforms/espidf/project/components/tvm-lib/Kconfig +7 -0
  262. resources/platforms/espidf/project/example_test.py +38 -0
  263. resources/platforms/espidf/project/main/CMakeLists.txt +25 -0
  264. resources/platforms/espidf/project/main/main.c +57 -0
  265. resources/platforms/espidf/project/sdkconfig.defaults +26 -0
  266. resources/platforms/zephyr/project/CMakeLists.txt +22 -0
  267. resources/platforms/zephyr/project/Kconfig +101 -0
  268. resources/platforms/zephyr/project/README.rst +33 -0
  269. resources/platforms/zephyr/project/cmake/AddAllSubdirs.cmake +21 -0
  270. resources/platforms/zephyr/project/cmake/ChooseTarget.cmake +22 -0
  271. resources/platforms/zephyr/project/cmake/LinkTFLite.cmake +223 -0
  272. resources/platforms/zephyr/project/cmake/LinkTVM.cmake +68 -0
  273. resources/platforms/zephyr/project/cmake/LookupClang.cmake +41 -0
  274. resources/platforms/zephyr/project/cmake/backends/tflmc.cmake +5 -0
  275. resources/platforms/zephyr/project/cmake/backends/tflmi.cmake +5 -0
  276. resources/platforms/zephyr/project/cmake/backends/tvmaot.cmake +10 -0
  277. resources/platforms/zephyr/project/cmake/backends/tvmaotplus.cmake +10 -0
  278. resources/platforms/zephyr/project/cmake/backends/tvmcg.cmake +10 -0
  279. resources/platforms/zephyr/project/cmake/backends/tvmllvm.cmake +8 -0
  280. resources/platforms/zephyr/project/cmake/backends/tvmrt.cmake +8 -0
  281. resources/platforms/zephyr/project/cmake/extras.cmake +9 -0
  282. resources/platforms/zephyr/project/cmake/features/auto_vectorize_gcc.cmake +65 -0
  283. resources/platforms/zephyr/project/cmake/features/auto_vectorize_llvm.cmake +20 -0
  284. resources/platforms/zephyr/project/cmake/features/cmsisnn.cmake +86 -0
  285. resources/platforms/zephyr/project/cmake/features/muriscvnn.cmake +87 -0
  286. resources/platforms/zephyr/project/cmake/frameworks/tflm.cmake +1 -0
  287. resources/platforms/zephyr/project/cmake/frameworks/tflm_mlif.cmake +8 -0
  288. resources/platforms/zephyr/project/cmake/frameworks/tvm.cmake +1 -0
  289. resources/platforms/zephyr/project/cmake/frameworks/tvm_mlif.cmake +37 -0
  290. resources/platforms/zephyr/project/lib/CMakeLists.txt +13 -0
  291. resources/platforms/zephyr/project/lib/drivers/fake_input.c +10 -0
  292. resources/platforms/zephyr/project/lib/drivers/fake_input.h +8 -0
  293. resources/platforms/zephyr/project/lib/ml_interface/CMakeLists.txt +31 -0
  294. resources/platforms/zephyr/project/lib/ml_interface/default_data.c +8 -0
  295. resources/platforms/zephyr/project/lib/ml_interface/default_model_support/CMakeLists.txt +2 -0
  296. resources/platforms/zephyr/project/lib/ml_interface/default_model_support/process_input.c +17 -0
  297. resources/platforms/zephyr/project/lib/ml_interface/default_model_support/process_output.c +27 -0
  298. resources/platforms/zephyr/project/lib/ml_interface/ml_interface.c +36 -0
  299. resources/platforms/zephyr/project/lib/ml_interface/ml_interface.h +47 -0
  300. resources/platforms/zephyr/project/lib/ml_interface/ml_interface_tflm.cc +22 -0
  301. resources/platforms/zephyr/project/lib/ml_interface/ml_interface_tvm.c +22 -0
  302. resources/platforms/zephyr/project/lib/support/CMakeLists.txt +2 -0
  303. resources/platforms/zephyr/project/lib/support/dummy.c +0 -0
  304. resources/platforms/zephyr/project/lib/support/exit.h +8 -0
  305. resources/platforms/zephyr/project/lib/support/printing.h +11 -0
  306. resources/platforms/zephyr/project/lib/support/quantize.h +23 -0
  307. resources/platforms/zephyr/project/lib/targets/corstone300.c +62 -0
  308. resources/platforms/zephyr/project/lib/targets/default.c +2 -0
  309. resources/platforms/zephyr/project/lib/targets/etiss_pulpino.c +112 -0
  310. resources/platforms/zephyr/project/lib/targets/generic_riscv.c +112 -0
  311. resources/platforms/zephyr/project/lib/targets/riscv_qemu.c +112 -0
  312. resources/platforms/zephyr/project/lib/targets/target.h +2 -0
  313. resources/platforms/zephyr/project/prj.conf +11 -0
  314. resources/platforms/zephyr/project/sample.yaml +19 -0
  315. resources/platforms/zephyr/project/src/main.c +71 -0
  316. resources/platforms/zephyr/project2/CMakeLists.txt +72 -0
  317. resources/platforms/zephyr/project2/Kconfig +101 -0
  318. resources/platforms/zephyr/project2/README.rst +33 -0
  319. resources/platforms/zephyr/project2/cmake/AddAllSubdirs.cmake +21 -0
  320. resources/platforms/zephyr/project2/cmake/ChooseTarget.cmake +22 -0
  321. resources/platforms/zephyr/project2/cmake/LinkTFLite.cmake +223 -0
  322. resources/platforms/zephyr/project2/cmake/LinkTVM.cmake +68 -0
  323. resources/platforms/zephyr/project2/cmake/LookupClang.cmake +41 -0
  324. resources/platforms/zephyr/project2/cmake/backends/tflmc.cmake +5 -0
  325. resources/platforms/zephyr/project2/cmake/backends/tflmi.cmake +5 -0
  326. resources/platforms/zephyr/project2/cmake/backends/tvmaot.cmake +10 -0
  327. resources/platforms/zephyr/project2/cmake/backends/tvmaotplus.cmake +10 -0
  328. resources/platforms/zephyr/project2/cmake/backends/tvmcg.cmake +10 -0
  329. resources/platforms/zephyr/project2/cmake/backends/tvmllvm.cmake +8 -0
  330. resources/platforms/zephyr/project2/cmake/backends/tvmrt.cmake +8 -0
  331. resources/platforms/zephyr/project2/cmake/extras.cmake +9 -0
  332. resources/platforms/zephyr/project2/cmake/features/auto_vectorize_gcc.cmake +65 -0
  333. resources/platforms/zephyr/project2/cmake/features/auto_vectorize_llvm.cmake +20 -0
  334. resources/platforms/zephyr/project2/cmake/features/cmsisnn.cmake +86 -0
  335. resources/platforms/zephyr/project2/cmake/features/muriscvnn.cmake +87 -0
  336. resources/platforms/zephyr/project2/cmake/frameworks/tflm.cmake +1 -0
  337. resources/platforms/zephyr/project2/cmake/frameworks/tflm_mlif.cmake +8 -0
  338. resources/platforms/zephyr/project2/cmake/frameworks/tvm.cmake +1 -0
  339. resources/platforms/zephyr/project2/cmake/frameworks/tvm_mlif.cmake +37 -0
  340. resources/platforms/zephyr/project2/default_data.c +8 -0
  341. resources/platforms/zephyr/project2/default_model_support/CMakeLists.txt +3 -0
  342. resources/platforms/zephyr/project2/default_model_support/process_input.c +17 -0
  343. resources/platforms/zephyr/project2/default_model_support/process_output.c +27 -0
  344. resources/platforms/zephyr/project2/lib/CMakeLists.txt +13 -0
  345. resources/platforms/zephyr/project2/lib/drivers/fake_input.c +10 -0
  346. resources/platforms/zephyr/project2/lib/drivers/fake_input.h +8 -0
  347. resources/platforms/zephyr/project2/lib/support/CMakeLists.txt +2 -0
  348. resources/platforms/zephyr/project2/lib/support/dummy.c +0 -0
  349. resources/platforms/zephyr/project2/lib/support/exit.h +8 -0
  350. resources/platforms/zephyr/project2/lib/support/printing.h +11 -0
  351. resources/platforms/zephyr/project2/lib/support/quantize.h +23 -0
  352. resources/platforms/zephyr/project2/lib/targets/corstone300.c +62 -0
  353. resources/platforms/zephyr/project2/lib/targets/default.c +2 -0
  354. resources/platforms/zephyr/project2/lib/targets/etiss_pulpino.c +112 -0
  355. resources/platforms/zephyr/project2/lib/targets/generic_riscv.c +112 -0
  356. resources/platforms/zephyr/project2/lib/targets/riscv_qemu.c +112 -0
  357. resources/platforms/zephyr/project2/lib/targets/target.h +2 -0
  358. resources/platforms/zephyr/project2/ml_interface.c +36 -0
  359. resources/platforms/zephyr/project2/ml_interface.h +47 -0
  360. resources/platforms/zephyr/project2/ml_interface_tflm.cc +22 -0
  361. resources/platforms/zephyr/project2/ml_interface_tvm.c +22 -0
  362. resources/platforms/zephyr/project2/prj.conf +13 -0
  363. resources/platforms/zephyr/project2/sample.yaml +19 -0
  364. resources/platforms/zephyr/project2/settings.json +6 -0
  365. resources/platforms/zephyr/project2/src/main.c +35 -0
  366. resources/pycharm/.run/README.md +73 -0
  367. resources/pycharm/.run/step1_ init env.run.xml +24 -0
  368. resources/pycharm/.run/step2_ setup.run.xml +25 -0
  369. resources/pycharm/.run/step3_ run resnet on pulpxpulpissimo.run.xml +25 -0
  370. resources/templates/default.yml.j2 +258 -0
  371. resources/templates/dev.yml.j2 +212 -0
  372. resources/templates/minimal.yml.j2 +234 -0
  373. resources/templates/phi.yml.j2 +282 -0
  374. resources/templates/pulp.yml.j2 +267 -0
  375. resources/templates/research.yml.j2 +237 -0
  376. resources/templates/tumeda.yml.j2 +239 -0
@@ -0,0 +1,8 @@
1
+ IF("${MLONMCU_FRAMEWORK}" STREQUAL "")
2
+ SET(MLONMCU_FRAMEWORK "tvm")
3
+ ENDIF()
4
+
5
+ SET(TVM_REQUIRED_COMPONENTS a b c)
6
+
7
+ SET(TVM_LIB tvm_graph_rt)
8
+ SET(TVM_WRAPPER_FILENAME rt_wrapper.c)
@@ -0,0 +1,9 @@
1
+ IF(DEFINED DEBUG_ARENA_USAGE)
2
+ IF(DEBUG_ARENA_USAGE)
3
+ SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG_ARENA_USAGE=1")
4
+ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG_ARENA_USAGE=1")
5
+ ELSE()
6
+ SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG_ARENA_USAGE=0")
7
+ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG_ARENA_USAGE=0")
8
+ ENDIF()
9
+ ENDIF()
@@ -0,0 +1,65 @@
1
+ IF(NOT RISCV_VEXT)
2
+ MESSAGE(FATAL_ERROR "RISCV_AUTO_VECTORIZE requires RISCV_VEXT")
3
+ ENDIF()
4
+ IF(RISCV_RVV_VLEN)
5
+ SET(VLEN ${RISCV_RVV_VLEN})
6
+ ELSE()
7
+ SET(VLEN "?")
8
+ ENDIF()
9
+ SET(CMAKE_CXX_FLAGS_RELEASE
10
+ "${CMAKE_CXX_FLAGS_RELEASE} \
11
+ -ftree-vectorize \
12
+ -mriscv-vector-bits=${VLEN} \
13
+ "
14
+ )
15
+ SET(CMAKE_C_FLAGS_RELEASE
16
+ "${CMAKE_C_FLAGS_RELEASE} \
17
+ -ftree-vectorize \
18
+ -mriscv-vector-bits=${VLEN} \
19
+ "
20
+ )
21
+ IF(DEFINED RISCV_AUTO_VECTORIZE_LOOP)
22
+ IF(NOT RISCV_AUTO_VECTORIZE_LOOP)
23
+ SET(CMAKE_CXX_FLAGS_RELEASE
24
+ "${CMAKE_CXX_FLAGS_RELEASE} \
25
+ -fno-tree-loop-vectorize \
26
+ "
27
+ )
28
+ SET(CMAKE_C_FLAGS_RELEASE
29
+ "${CMAKE_C_FLAGS_RELEASE} \
30
+ -fno-tree-loop-vectorize \
31
+ "
32
+ )
33
+ ENDIF()
34
+ ENDIF()
35
+ IF(DEFINED RISCV_AUTO_VECTORIZE_SLP)
36
+ IF(NOT RISCV_AUTO_VECTORIZE_SLP)
37
+ SET(CMAKE_CXX_FLAGS_RELEASE
38
+ "${CMAKE_CXX_FLAGS_RELEASE} \
39
+ -fno-tree-slp-vectorize \
40
+ "
41
+ )
42
+ SET(CMAKE_C_FLAGS_RELEASE
43
+ "${CMAKE_C_FLAGS_RELEASE} \
44
+ -fno-tree-slp-vectorize \
45
+ "
46
+ )
47
+ ENDIF()
48
+ ENDIF()
49
+ # Also interesting:
50
+ # -mriscv-vector-lmul=<lmul> Set the vf using lmul in auto-vectorization
51
+ # -fsimd-cost-model=[unlimited|dynamic|cheap|very-cheap] Specifies the vectorization cost model for code marked with a simd directive
52
+ IF(RISCV_AUTO_VECTORIZE_VERBOSE)
53
+ SET(CMAKE_CXX_FLAGS_RELEASE
54
+ "${CMAKE_CXX_FLAGS_RELEASE} \
55
+ -fopt-info-vec \
56
+ -fopt-info-vec-missed \
57
+ "
58
+ )
59
+ SET(CMAKE_C_FLAGS_RELEASE
60
+ "${CMAKE_C_FLAGS_RELEASE} \
61
+ -fopt-info-vec \
62
+ -fopt-info-vec-missed \
63
+ "
64
+ )
65
+ ENDIF()
@@ -0,0 +1,20 @@
1
+ IF(NOT RISCV_VEXT)
2
+ MESSAGE(FATAL_ERROR "RISCV_AUTO_VECTORIZE requires RISCV_VEXT")
3
+ ENDIF()
4
+ IF(RISCV_RVV_VLEN)
5
+ SET(VLEN ${RISCV_RVV_VLEN})
6
+ ELSE()
7
+ SET(VLEN "?")
8
+ ENDIF()
9
+ SET(CMAKE_CXX_FLAGS_RELEASE
10
+ "${CMAKE_CXX_FLAGS_RELEASE} \
11
+ -mllvm \
12
+ --riscv-v-vector-bits-min=${VLEN} \
13
+ "
14
+ )
15
+ SET(CMAKE_C_FLAGS_RELEASE
16
+ "${CMAKE_C_FLAGS_RELEASE} \
17
+ -mllvm \
18
+ --riscv-v-vector-bits-min=${VLEN} \
19
+ "
20
+ )
@@ -0,0 +1,86 @@
1
+ IF(NOT CMSISNN_DIR)
2
+ MESSAGE(FATAL_ERROR "Missing value: CMSISNN_DIR")
3
+ ENDIF()
4
+
5
+ IF(NOT ARM_MVEI)
6
+ SET(USE_MVEI OFF)
7
+ ELSE()
8
+ SET(USE_MVEI ON)
9
+ ENDIF()
10
+
11
+ IF(NOT ARM_DSP)
12
+ SET(USE_DSP OFF)
13
+ ELSE()
14
+ SET(USE_DSP ON)
15
+ ENDIF()
16
+
17
+ SET(BUILD_FLAGS "")
18
+ # IF(USE_MVEI) SET(BUILD_FLAGS "${BUILD_FLAGS} -D__ARM_FEATURE_MVE=1 -DARM_MATH_MVEI=1") ENDIF() IF(USE_DSP)
19
+ # SET(BUILD_FLAGS "${BUILD_FLAGS} -D__ARM_FEATURE_DSP=1 -DARM_MATH_DSP=1") ENDIF()
20
+
21
+ SET(CMSISNN_INCLUDE_DIRS ${CMSISNN_DIR} ${CMSISNN_DIR}/CMSIS/Core/Include ${CMSISNN_DIR}/CMSIS/NN/Include
22
+ ${CMSISNN_DIR}/CMSIS/DSP/Include
23
+ )
24
+
25
+ # TODO: propagarting all toolchain specific vars does not scale well
26
+
27
+ MESSAGE(STATUS "ARM_CPU=${ARM_CPU}")
28
+ INCLUDE(ExternalProject)
29
+ EXTERNALPROJECT_ADD(
30
+ cmsisnn
31
+ PREFIX cmsisnn
32
+ SOURCE_DIR ${CMSISNN_DIR}/CMSIS/NN/
33
+ CMAKE_ARGS -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
34
+ -DCMAKE_C_FLAGS:STRING=${BUILD_FLAGS}
35
+ -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE}
36
+ -DTC_PREFIX=${TC_PREFIX}
37
+ -DEXE_EXT=${EXE_EXT}
38
+ -DARM_CPU=${ARM_CPU}
39
+ -DARM_FLOAT_ABI=${ARM_FLOAT_ABI}
40
+ -DARM_FPU=${ARM_FPU}
41
+ -DRISCV_ARCH=${RISCV_ARCH}
42
+ -DRISCV_ABI=${RISCV_ABI}
43
+ BUILD_COMMAND "${CMAKE_COMMAND}" --build .
44
+ INSTALL_COMMAND ""
45
+ )
46
+
47
+ EXTERNALPROJECT_GET_PROPERTY(cmsisnn BINARY_DIR)
48
+ SET(CMSISNN_LIB ${BINARY_DIR}/Source/libcmsis-nn.a)
49
+
50
+ # TFLite integration
51
+ IF(TFLM_OPTIMIZED_KERNEL_LIB)
52
+ LIST(APPEND TFLM_OPTIMIZED_KERNEL_LIB ${CMSISNN_LIB})
53
+ ELSE()
54
+ SET(TFLM_OPTIMIZED_KERNEL_LIB ${CMSISNN_LIB})
55
+ ENDIF()
56
+
57
+ IF(TFLM_OPTIMIZED_KERNEL_INCLUDE_DIR)
58
+ LIST(APPEND TFLM_OPTIMIZED_KERNEL_INCLUDE_DIR ${CMSISNN_INCLUDE_DIRS})
59
+ ELSE()
60
+ SET(TFLM_OPTIMIZED_KERNEL_INCLUDE_DIR ${CMSISNN_INCLUDE_DIRS})
61
+ ENDIF()
62
+
63
+ IF(TFLM_OPTIMIZED_KERNEL_DEPS)
64
+ LIST(APPEND TFLM_OPTIMIZED_KERNEL_DEPS cmsisnn)
65
+ ELSE()
66
+ SET(TFLM_OPTIMIZED_KERNEL_DEPS cmsisnn)
67
+ ENDIF()
68
+
69
+ # TVM integration
70
+ IF(TVM_EXTRA_LIBS)
71
+ LIST(APPEND TVM_EXTRA_LIBS ${CMSISNN_LIB})
72
+ ELSE()
73
+ SET(TVM_EXTRA_LIBS ${CMSISNN_LIB})
74
+ ENDIF()
75
+
76
+ IF(TVM_EXTRA_INCS)
77
+ LIST(APPEND TVM_EXTRA_INCS ${CMSISNN_INCLUDE_DIRS})
78
+ ELSE()
79
+ SET(TVM_EXTRA_INCS ${CMSISNN_INCLUDE_DIRS})
80
+ ENDIF()
81
+
82
+ IF(TVM_EXTRA_DEPS)
83
+ LIST(APPEND TVM_EXTRA_DEPS cmsisnn)
84
+ ELSE()
85
+ SET(TVM_EXTRA_DEPS cmsisnn)
86
+ ENDIF()
@@ -0,0 +1,87 @@
1
+ IF(NOT MURISCVNN_DIR)
2
+ MESSAGE(FATAL_ERROR "Missing value: MURISCVNN_DIR")
3
+ ENDIF()
4
+
5
+ IF(NOT RISCV_VEXT)
6
+ SET(USE_VEXT OFF)
7
+ ELSE()
8
+ SET(USE_VEXT ON)
9
+ ENDIF()
10
+
11
+ IF(NOT RISCV_PEXT)
12
+ SET(USE_PEXT OFF)
13
+ ELSE()
14
+ SET(USE_PEXT ON)
15
+ ENDIF()
16
+
17
+ IF(NOT MURISCVNN_TOOLCHAIN)
18
+ SET(MURISCVVN_TOOLCHAIN GCC)
19
+ # SET(MURISCVVN_TOOLCHAIN NONE)
20
+ ENDIF()
21
+
22
+ SET(MURISCVNN_INCLUDE_DIRS ${MURISCVNN_DIR}/Include ${MURISCVNN_DIR}/Include/CMSIS/NN/Include)
23
+
24
+ # TODO: propagarting all toolchain specific vars does not scale well
25
+
26
+ INCLUDE(ExternalProject)
27
+ EXTERNALPROJECT_ADD(
28
+ muriscvnn
29
+ PREFIX muriscvnn
30
+ SOURCE_DIR ${MURISCVNN_DIR}
31
+ CMAKE_ARGS -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
32
+ -DUSE_VEXT=${USE_VEXT}
33
+ -DUSE_PEXT=${USE_PEXT}
34
+ -DTOOLCHAIN=${MURISCVNN_TOOLCHAIN}
35
+ -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE}
36
+ -DENABLE_TESTS=OFF
37
+ -DTC_PREFIX=${TC_PREFIX}
38
+ -DEXE_EXT=${EXE_EXT}
39
+ -DRISCV_ARCH=${RISCV_ARCH}
40
+ -DRISCV_ABI=${RISCV_ABI}
41
+ -DARM_CPU=${ARM_CPU}
42
+ -DARM_FLOAT_ABI=${ARM_FLOAT_ABI}
43
+ -DARM_FPU=${ARM_FPU}
44
+ BUILD_COMMAND "${CMAKE_COMMAND}" --build .
45
+ INSTALL_COMMAND ""
46
+ )
47
+
48
+ EXTERNALPROJECT_GET_PROPERTY(muriscvnn BINARY_DIR)
49
+ SET(MURISCVNN_LIB ${BINARY_DIR}/Source/libmuriscv_nn.a)
50
+
51
+ # TFLite integration
52
+ IF(TFLM_OPTIMIZED_KERNEL_LIB)
53
+ LIST(APPEND TFLM_OPTIMIZED_KERNEL_LIB ${MURISCVNN_LIB})
54
+ ELSE()
55
+ SET(TFLM_OPTIMIZED_KERNEL_LIB ${MURISCVNN_LIB})
56
+ ENDIF()
57
+
58
+ IF(TFLM_OPTIMIZED_KERNEL_INCLUDE_DIR)
59
+ LIST(APPEND TFLM_OPTIMIZED_KERNEL_INCLUDE_DIR ${MURISCVNN_INCLUDE_DIRS})
60
+ ELSE()
61
+ SET(TFLM_OPTIMIZED_KERNEL_INCLUDE_DIR ${MURISCVNN_INCLUDE_DIRS})
62
+ ENDIF()
63
+
64
+ IF(TFLM_OPTIMIZED_KERNEL_DEPS)
65
+ LIST(APPEND TFLM_OPTIMIZED_KERNEL_DEPS muriscvnn)
66
+ ELSE()
67
+ SET(TFLM_OPTIMIZED_KERNEL_DEPS muriscvnn)
68
+ ENDIF()
69
+
70
+ # TVM integration
71
+ IF(TVM_EXTRA_LIBS)
72
+ LIST(APPEND TVM_EXTRA_LIBS ${MURISCVNN_LIB})
73
+ ELSE()
74
+ SET(TVM_EXTRA_LIBS ${MURISCVNN_LIB})
75
+ ENDIF()
76
+
77
+ IF(TVM_EXTRA_INCS)
78
+ LIST(APPEND TVM_EXTRA_INCS ${MURISCVNN_INCLUDE_DIRS})
79
+ ELSE()
80
+ SET(TVM_EXTRA_INCS ${MURISCVNN_INCLUDE_DIRS})
81
+ ENDIF()
82
+
83
+ IF(TVM_EXTRA_DEPS)
84
+ LIST(APPEND TVM_EXTRA_DEPS muriscvnn)
85
+ ELSE()
86
+ SET(TVM_EXTRA_DEPS muriscvnn)
87
+ ENDIF()
@@ -0,0 +1,8 @@
1
+ SET(TF_OUT_DIR ${CONFIG_MLONMCU_CODEGEN_DIR}/)
2
+ SET(GEN_SRC ${TF_OUT_DIR}/model.cc)
3
+ GET_FILENAME_COMPONENT(GEN_SRC ${GEN_SRC} REALPATH)
4
+ GET_FILENAME_COMPONENT(EXTRA_INC ${GEN_SRC} DIRECTORY)
5
+ SET(EXTRA_SRC ml_interface_tflm.cc ${GEN_SRC})
6
+ SET(EXTRA_LIBS tflm)
7
+ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DTFLMC_DEBUG_ALLOCATIONS")
8
+ LIST(APPEND EXTRA_LIBS ${CUSTOM_OPS_LIBS})
@@ -0,0 +1,37 @@
1
+ SET(TVM_OUT_DIR ${CONFIG_MLONMCU_CODEGEN_DIR}/codegen/host/)
2
+ SET(EXTRA_SRC ml_interface_tvm.c)
3
+
4
+ FILE(GLOB TVM_SRCS ${TVM_OUT_DIR}/src/*_lib*.c ${TVM_OUT_DIR}/src/*_lib*.cc)
5
+
6
+ IF(NOT TVM_SRCS)
7
+ MESSAGE(STATUS "NO SOURCES")
8
+ FILE(GLOB TVM_OBJS ${TVM_OUT_DIR}/lib/*_lib*.o)
9
+ MESSAGE(STATUS "TVM_OBJS=${TVM_OBJS}")
10
+ ADD_LIBRARY(tvm_extension OBJECT IMPORTED)
11
+
12
+ SET_PROPERTY(TARGET tvm_extension PROPERTY
13
+ IMPORTED_OBJECTS ${TVM_OBJS}
14
+ )
15
+ ELSE()
16
+ # Need this in extra target to avoid circular dependency .
17
+ ADD_LIBRARY(tvm_extension STATIC ${TVM_SRCS})
18
+ TARGET_INCLUDE_DIRECTORIES(tvm_extension PUBLIC ${TVM_HEADERS} ${TVM_OUT_DIR}/include ${CONFIG_MLONMCU_CODEGEN_DIR})
19
+ TARGET_LINK_LIBRARIES(tvm_extension PUBLIC m)
20
+ TARGET_LINK_LIBRARIES(tvm_extension PUBLIC ${TVM_LIB})
21
+ ENDIF()
22
+
23
+ SET(EXTRA_SRC ${EXTRA_SRC} ${CONFIG_MLONMCU_CODEGEN_DIR}/${TVM_WRAPPER_FILENAME})
24
+ TARGET_LINK_LIBRARIES(${TVM_LIB} PUBLIC tvm_extension)
25
+ SET(EXTRA_INC ${TVM_OUT_DIR}/include ${CONFIG_MLONMCU_CODEGEN_DIR})
26
+
27
+ SET(EXTRA_LIBS tvm_extension ${TVM_LIB})
28
+
29
+ FOREACH(ENTRY ${CONFIG_TVM_EXTRA_LIBS})
30
+ TARGET_LINK_LIBRARIES(tvm_extension PUBLIC ${ENTRY})
31
+ ENDFOREACH()
32
+ FOREACH(ENTRY ${CONFIG_TVM_EXTRA_INCS})
33
+ TARGET_INCLUDE_DIRECTORIES(tvm_extension PUBLIC ${ENTRY})
34
+ ENDFOREACH()
35
+ FOREACH(ENTRY ${CONFIG_TVM_EXTRA_DEPS})
36
+ ADD_DEPENDENCIES(tvm_extension ${ENTRY})
37
+ ENDFOREACH()
@@ -0,0 +1,13 @@
1
+ PROJECT(target_sw_lib)
2
+
3
+ ADD_SUBDIRECTORY(support)
4
+ ADD_SUBDIRECTORY(ml_interface)
5
+
6
+ SET(TARGET_LIB_SOURCE targets/${TARGET_SYSTEM}.c)
7
+ IF(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_LIB_SOURCE})
8
+ SET(TARGET_LIB_SOURCE targets/default.c)
9
+ ENDIF()
10
+
11
+ ADD_LIBRARY(${PROJECT_NAME} STATIC drivers/fake_input.c ${TARGET_LIB_SOURCE})
12
+ TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC lib/drivers lib/targets)
13
+ TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC support ml_interface)
@@ -0,0 +1,10 @@
1
+ #include "fake_input.h"
2
+ #include <stdint.h>
3
+
4
+ void FakeInput_GetData(void *out, size_t len) {
5
+ volatile uint8_t *p = 0xc0000000;
6
+
7
+ for (size_t i = 0; i < len; i++) {
8
+ *(uint8_t *)out = *(p + i);
9
+ }
10
+ }
@@ -0,0 +1,8 @@
1
+ #ifndef DRIVER_FAKE_INPUT_H
2
+ #define DRIVER_FAKE_INPUT_H
3
+
4
+ #include <stddef.h>
5
+
6
+ void FakeInput_GetData(void *out, size_t len);
7
+
8
+ #endif
@@ -0,0 +1,31 @@
1
+ PROJECT(ml_interface)
2
+
3
+ INCLUDE(extras)
4
+
5
+ INCLUDE(frameworks/${CONFIG_MLONMCU_FRAMEWORK}_mlif)
6
+
7
+ IF(CONFIG_MODEL_DIR)
8
+ GET_FILENAME_COMPONENT(MODEL_SUPPORT_DIR ${CONFIG_MODEL_DIR}/support REALPATH)
9
+ GET_FILENAME_COMPONENT(MODEL_NAME ${CONFIG_MODEL_DIR} NAME)
10
+ ENDIF()
11
+
12
+ IF(MODEL_SUPPORT_DIR AND EXISTS ${MODEL_SUPPORT_DIR})
13
+ ADD_SUBDIRECTORY(${MODEL_SUPPORT_DIR} model_support_bin_${MODEL_NAME})
14
+ ELSE()
15
+ ADD_SUBDIRECTORY(default_model_support)
16
+ ENDIF()
17
+
18
+ IF(NOT CONFIG_DATA_SRC)
19
+ SET(CONFIG_DATA_SRC "default_data.c")
20
+ ENDIF()
21
+
22
+ ADD_LIBRARY(${PROJECT_NAME}_base STATIC ${CONFIG_DATA_SRC})
23
+ TARGET_LINK_LIBRARIES(${PROJECT_NAME}_base PUBLIC support ${EXTRA_LIBS})
24
+ TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME}_base PUBLIC . ${EXTRA_INC})
25
+
26
+ ADD_LIBRARY(${PROJECT_NAME} STATIC ml_interface.c ${EXTRA_SRC})
27
+ TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC ${PROJECT_NAME}_base model_support)
28
+ TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC ${PROJECT_NAME}_base model_support zephyr)
29
+ IF(CONFIG_NUM_RUNS)
30
+ TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} PUBLIC NUM_RUNS=${CONFIG_NUM_RUNS})
31
+ ENDIF()
@@ -0,0 +1,8 @@
1
+ #include "ml_interface.h"
2
+ #include <stddef.h>
3
+ const int num_data_buffers_in = 0;
4
+ const int num_data_buffers_out = 0;
5
+ const unsigned char *const data_buffers_in[] = {};
6
+ const unsigned char *const data_buffers_out[] = {};
7
+ const size_t data_size_in[] = {};
8
+ const size_t data_size_out[] = {};
@@ -0,0 +1,2 @@
1
+ ADD_LIBRARY(model_support STATIC process_input.c process_output.c)
2
+ TARGET_LINK_LIBRARIES(model_support PUBLIC ml_interface_base)
@@ -0,0 +1,17 @@
1
+ #include <stdlib.h>
2
+ #include <memory.h>
3
+
4
+ #include "printing.h"
5
+ #include "exit.h"
6
+
7
+ void mlif_process_input(const void *in_data, size_t in_size, void *model_input_ptr, size_t model_input_sz) {
8
+ if (in_size != 0) {
9
+ if (in_size != model_input_sz) {
10
+ DBGPRINTF("MLIF: Given input size (%lu) does not match model input buffer size (%lu)!\n", in_size,
11
+ model_input_sz);
12
+ exit(EXIT_MLIF_INVALID_SIZE);
13
+ }
14
+ }
15
+
16
+ memcpy(model_input_ptr, in_data, in_size);
17
+ }
@@ -0,0 +1,27 @@
1
+ #include <stdlib.h>
2
+ #include <memory.h>
3
+
4
+ #include "printing.h"
5
+ #include "exit.h"
6
+
7
+ void mlif_process_output(void *model_output_ptr, size_t model_output_sz, const void *expected_out_data,
8
+ size_t expected_out_size) {
9
+ #ifdef _DEBUG
10
+ if (model_output_sz >= 4) {
11
+ DBGPRINTF("MLIF: First float of output: %f\n", *(float *)model_output_ptr);
12
+ }
13
+ DBGPRINTF("MLIF: Model output data: ");
14
+ for (size_t i = 0; i < model_output_sz; i++) {
15
+ DBGPRINTF("\\x%02X", ((unsigned char *)model_output_ptr)[i]);
16
+ fflush(0);
17
+ }
18
+ DBGPRINTF("\n");
19
+ #endif
20
+
21
+ if (model_output_sz == expected_out_size && memcmp(model_output_ptr, expected_out_data, model_output_sz) == 0) {
22
+ DBGPRINTF("MLIF: Output data matches expected data\n");
23
+ } else {
24
+ DBGPRINTF("MLIF: Wrong output data!\n");
25
+ exit(EXIT_MLIF_MISSMATCH);
26
+ }
27
+ }
@@ -0,0 +1,36 @@
1
+ #include "ml_interface.h"
2
+ #include "printing.h"
3
+
4
+ #include <string.h>
5
+ #include <stdlib.h>
6
+
7
+ __attribute__((weak)) bool mlif_request_input(void *model_input_ptr, size_t model_input_sz) {
8
+ static int num_done = 0;
9
+ if (num_done == num_data_buffers_in) {
10
+ static bool run_once = true;
11
+ if (num_data_buffers_in == 0 && run_once) {
12
+ // Minimal run. Just run the model without data.
13
+ run_once = false;
14
+ return true;
15
+ }
16
+ return false;
17
+ }
18
+
19
+ mlif_process_input(data_buffers_in[num_done], data_size_in[num_done], model_input_ptr, model_input_sz);
20
+ num_done++;
21
+ return true;
22
+ }
23
+
24
+ __attribute__((weak)) void mlif_handle_result(void *model_output_ptr, size_t model_output_sz) {
25
+ static int num_done = 0;
26
+
27
+ if (num_data_buffers_out == 0) {
28
+ return;
29
+ }
30
+
31
+ if (num_done < num_data_buffers_out) {
32
+ mlif_process_output(model_output_ptr, model_output_sz, data_buffers_out[num_done], data_size_out[num_done]);
33
+ }
34
+
35
+ num_done++;
36
+ }
@@ -0,0 +1,47 @@
1
+ #ifndef TARGETLIB_ML_INTERFACE_H
2
+ #define TARGETLIB_ML_INTERFACE_H
3
+
4
+ #include <stddef.h>
5
+ #include <stdbool.h>
6
+
7
+ #ifndef NUM_RUNS
8
+ #define NUM_RUNS 1
9
+ #endif /* NUM_RUNS */
10
+
11
+ #ifdef __cplusplus
12
+ extern "C" {
13
+ #endif
14
+
15
+ // This runs the ML model using the callbacks above.
16
+ // The default implementation will run with garbage data.
17
+ void mlif_run();
18
+
19
+ // These can be overridden by use code.
20
+
21
+ // Provides input data for the model. The default implementation retrieves input from
22
+ // the global variables below and fills the model input with mlif_process_input.
23
+ bool mlif_request_input(void *model_input_ptr, size_t model_input_sz);
24
+ // Is called when the output data is available. The default implementation
25
+ void mlif_handle_result(void *model_output_ptr, size_t model_output_sz);
26
+
27
+ // Callback for any preprocessing on the input data. Responsible for copying the data.
28
+ void mlif_process_input(const void *in_data, size_t in_size, void *model_input_ptr, size_t model_input_sz);
29
+ // Callback for any postprocessing on the output data. The default implementation prints
30
+ // the output and verifies consistency with the expected output.
31
+ void mlif_process_output(void *model_output_ptr, size_t model_output_sz, const void *expected_out_data,
32
+ size_t expected_out_size);
33
+
34
+ extern const int num_data_buffers_in;
35
+ extern const int num_data_buffers_out;
36
+ extern const unsigned char *const data_buffers_in[];
37
+ extern const unsigned char *const data_buffers_out[];
38
+ extern const size_t data_size_in[];
39
+ extern const size_t data_size_out[];
40
+
41
+ extern const int num;
42
+
43
+ #ifdef __cplusplus
44
+ }
45
+ #endif
46
+
47
+ #endif
@@ -0,0 +1,22 @@
1
+ #include "ml_interface.h"
2
+
3
+ #include "model.cc.h"
4
+
5
+ void mlif_run() {
6
+ model_init();
7
+
8
+ size_t input_num = 0;
9
+ size_t remaining = NUM_RUNS;
10
+ while (mlif_request_input(model_input_ptr(input_num), model_input_size(input_num)) || remaining) {
11
+ if (input_num == model_inputs() - 1) {
12
+ model_invoke();
13
+ for (size_t i = 0; i < model_outputs(); i++) {
14
+ mlif_handle_result(model_output_ptr(i), model_output_size(i));
15
+ }
16
+ input_num = 0;
17
+ remaining = remaining > 0 ? remaining - 1 : 0;
18
+ } else {
19
+ input_num++;
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ #include "ml_interface.h"
2
+ #include "tvm_wrapper.h"
3
+
4
+ void mlif_run() {
5
+ TVMWrap_Init();
6
+
7
+ size_t input_num = 0;
8
+ size_t remaining = NUM_RUNS;
9
+ // inout data will only be applied in the first run!
10
+ while (mlif_request_input(TVMWrap_GetInputPtr(input_num), TVMWrap_GetInputSize(input_num)) || remaining) {
11
+ if (input_num == TVMWrap_GetNumInputs() - 1) {
12
+ TVMWrap_Run();
13
+ for (size_t i = 0; i < TVMWrap_GetNumOutputs(); i++) {
14
+ mlif_handle_result(TVMWrap_GetOutputPtr(i), TVMWrap_GetOutputSize(i));
15
+ }
16
+ input_num = 0;
17
+ remaining = remaining > 0 ? remaining - 1 : 0;
18
+ } else {
19
+ input_num++;
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,2 @@
1
+ ADD_LIBRARY(support STATIC dummy.c)
2
+ TARGET_INCLUDE_DIRECTORIES(support PUBLIC .)
File without changes
@@ -0,0 +1,8 @@
1
+ #ifndef SUPPORT_EXIT_H
2
+ #define SUPPORT_EXIT_H
3
+
4
+ #define EXIT_MLIF_BASE (0x10)
5
+ #define EXIT_MLIF_INVALID_SIZE (EXIT_MLIF_BASE + 1)
6
+ #define EXIT_MLIF_MISSMATCH (EXIT_MLIF_BASE + 2)
7
+
8
+ #endif // SUPPORT_EXIT_H
@@ -0,0 +1,11 @@
1
+ #ifndef SUPPORT_PRINTING_H
2
+ #define SUPPORT_PRINTING_H
3
+
4
+ #ifdef _DEBUG
5
+ #include <stdio.h>
6
+ #define DBGPRINTF(format, ...) printf(format, ##__VA_ARGS__)
7
+ #else
8
+ #define DBGPRINTF(format, ...)
9
+ #endif
10
+
11
+ #endif
@@ -0,0 +1,23 @@
1
+ #ifndef SUPPORT_QUANTIZE_H
2
+ #define SUPPORT_QUANTIZE_H
3
+
4
+ #include <stdint.h>
5
+ #include <limits.h>
6
+ #include <math.h>
7
+
8
+ inline float DequantizeInt8ToFloat(int8_t value, float scale, int zero_point) {
9
+ return static_cast<float>(value - zero_point) * scale;
10
+ }
11
+
12
+ inline int8_t QuantizeFloatToInt8(float value, float scale, int zero_point) {
13
+ int32_t result = round(value / scale) + zero_point;
14
+ if (result < INT8_MIN) {
15
+ result = INT8_MIN;
16
+ }
17
+ if (result > INT8_MAX) {
18
+ result = INT8_MAX;
19
+ }
20
+ return static_cast<int8_t>(result);
21
+ }
22
+
23
+ #endif