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,40 @@
1
+ #
2
+ # Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
3
+ #
4
+ # This file is part of MLonMCU.
5
+ # See https://github.com/tum-ei-eda/mlonmcu.git for further info.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ from .common import get_task_factory
21
+
22
+ __all__ = ["get_task_factory"]
23
+
24
+ from .arm_gcc import * # noqa: F401, F403
25
+ from .cmsisnn import * # noqa: F401, F403
26
+ from .corstone300 import * # noqa: F401, F403
27
+ from .espidf import * # noqa: F401, F403
28
+ from .etiss import * # noqa: F401, F403
29
+ from .llvm import * # noqa: F401, F403
30
+ from .mlif import * # noqa: F401, F403
31
+ from .muriscvnn import * # noqa: F401, F403
32
+ from .riscv_gcc import * # noqa: F401, F403
33
+ from .spike import * # noqa: F401, F403
34
+ from .tflite import * # noqa: F401, F403
35
+ from .tflmc import * # noqa: F401, F403
36
+ from .tf import * # noqa: F401, F403
37
+ from .tvm import * # noqa: F401, F403
38
+ from .utvmcg import * # noqa: F401, F403
39
+ from .zephyr import * # noqa: F401, F403
40
+ from .pulp import * # noqa: F401, F403
@@ -0,0 +1,58 @@
1
+ #
2
+ # Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
3
+ #
4
+ # This file is part of MLonMCU.
5
+ # See https://github.com/tum-ei-eda/mlonmcu.git for further info.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ """Definition of tasks used to dynamically install MLonMCU dependencies"""
20
+
21
+ import multiprocessing
22
+
23
+ from mlonmcu.setup.task import TaskType
24
+ from mlonmcu.context.context import MlonMcuContext
25
+ from mlonmcu.setup import utils
26
+ from mlonmcu.logging import get_logger
27
+
28
+ from .common import _validate_gcc, get_task_factory
29
+ from .corstone300 import _validate_corstone300
30
+
31
+ logger = get_logger()
32
+ Tasks = get_task_factory()
33
+
34
+
35
+ def _validate_arm_gcc(context: MlonMcuContext, params=None):
36
+ return _validate_corstone300(context, params=params) and _validate_gcc(context, params=params)
37
+
38
+
39
+ @Tasks.provides(["arm_gcc.install_dir"])
40
+ @Tasks.validate(_validate_corstone300)
41
+ @Tasks.register(category=TaskType.TARGET)
42
+ def install_arm_gcc(
43
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
44
+ ):
45
+ """Download and install GNU compiler toolchain from ARM."""
46
+ armName = utils.makeDirName("arm_gcc")
47
+ armInstallDir = context.environment.paths["deps"].path / "install" / armName
48
+ user_vars = context.environment.vars
49
+ if "arm_gcc.install_dir" in user_vars: # TODO: also check command line flags?
50
+ # armInstallDir = user_vars["riscv_gcc.install_dir"]
51
+ return False
52
+ else:
53
+ if not utils.is_populated(armInstallDir):
54
+ armUrl = "https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/"
55
+ armFileName = "gcc-arm-11.2-2022.02-x86_64-arm-none-eabi"
56
+ armArchive = armFileName + ".tar.xz"
57
+ utils.download_and_extract(armUrl, armArchive, armInstallDir, progress=verbose)
58
+ context.cache["arm_gcc.install_dir"] = armInstallDir
@@ -0,0 +1,151 @@
1
+ #
2
+ # Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
3
+ #
4
+ # This file is part of MLonMCU.
5
+ # See https://github.com/tum-ei-eda/mlonmcu.git for further info.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ """Definition of tasks used to dynamically install MLonMCU dependencies"""
20
+
21
+ import os
22
+ import multiprocessing
23
+ from pathlib import Path
24
+
25
+ from mlonmcu.setup.task import TaskType
26
+ from mlonmcu.context.context import MlonMcuContext
27
+ from mlonmcu.setup import utils
28
+ from mlonmcu.logging import get_logger
29
+
30
+ from .common import get_task_factory
31
+
32
+ logger = get_logger()
33
+
34
+ Tasks = get_task_factory()
35
+
36
+
37
+ def _validate_cmsisnn(context: MlonMcuContext, params=None):
38
+ if not (context.environment.has_feature("cmsisnn") or context.environment.has_feature("cmsisnnbyoc")):
39
+ return False
40
+ mvei = params.get("mvei", False)
41
+ dsp = params.get("dsp", False)
42
+ target_arch = params.get("target_arch", None)
43
+ if target_arch == "arm":
44
+ if dsp and not context.environment.has_feature("arm_dsp"):
45
+ return False
46
+ if mvei and not context.environment.has_feature("arm_mvei"):
47
+ return False
48
+ else:
49
+ if mvei or dsp:
50
+ return False
51
+ return True
52
+
53
+
54
+ def _validate_cmsis(context: MlonMcuContext, params=None):
55
+ return _validate_cmsisnn(context, params=params) or context.environment.has_target("corstone300")
56
+
57
+
58
+ @Tasks.provides(["cmsisnn.dir"])
59
+ @Tasks.validate(_validate_cmsis)
60
+ @Tasks.register(category=TaskType.MISC)
61
+ def clone_cmsis(
62
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
63
+ ):
64
+ """CMSIS repository."""
65
+ cmsisName = utils.makeDirName("cmsis")
66
+ cmsisSrcDir = Path(context.environment.paths["deps"].path) / "src" / cmsisName
67
+ # TODO: allow to skip this if cmsisnn.dir+cmsisnn.lib are provided by the user and corstone is not used
68
+ # -> move those checks to validate?
69
+ if rebuild or not utils.is_populated(cmsisSrcDir):
70
+ cmsisRepo = context.environment.repos["cmsis"]
71
+ utils.clone(cmsisRepo.url, cmsisSrcDir, branch=cmsisRepo.ref, refresh=rebuild)
72
+ context.cache["cmsisnn.dir"] = cmsisSrcDir
73
+
74
+
75
+ @Tasks.needs(["cmsisnn.dir"])
76
+ @Tasks.optional(["riscv_gcc.install_dir", "riscv_gcc.name", "arm_gcc.install_dir"])
77
+ @Tasks.provides(["cmsisnn.lib"])
78
+ @Tasks.param("dbg", [False, True])
79
+ # @Tasks.param("target_arch", ["x86", "riscv", "arm"])
80
+ @Tasks.param("target_arch", ["x86"]) # Arm/riscv currently broken
81
+ @Tasks.param("mvei", [False, True])
82
+ @Tasks.param("dsp", [False, True])
83
+ @Tasks.validate(_validate_cmsisnn)
84
+ @Tasks.register(category=TaskType.OPT) # TODO: rename to TaskType.FEATURE?
85
+ def build_cmsisnn(
86
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
87
+ ):
88
+ target_arch = params["target_arch"]
89
+ mvei = params["mvei"]
90
+ dsp = params["dsp"]
91
+ dbg = params["dbg"]
92
+ flags = utils.makeFlags(
93
+ (True, target_arch),
94
+ (mvei, "mvei"),
95
+ (dsp, "dsp"),
96
+ (dbg, "dbg"),
97
+ )
98
+ cmsisnnName = utils.makeDirName("cmsisnn", flags=flags)
99
+ cmsisnnBuildDir = context.environment.paths["deps"].path / "build" / cmsisnnName
100
+ cmsisnnInstallDir = context.environment.paths["deps"].path / "install" / cmsisnnName
101
+ cmsisnnLib = cmsisnnInstallDir / "libcmsis-nn.a"
102
+ cmsisSrcDir = Path(context.cache["cmsisnn.dir"])
103
+ cmsisnnSrcDir = cmsisSrcDir / "CMSIS" / "NN"
104
+ if rebuild or not utils.is_populated(cmsisnnBuildDir) or not cmsisnnLib.is_file():
105
+ utils.mkdirs(cmsisnnBuildDir)
106
+ cmakeArgs = []
107
+ env = os.environ.copy()
108
+ # utils.cmake("-DTF_SRC=" + str(tfSrcDir), str(tflmcSrcDir), debug=params["dbg"], cwd=tflmcBuildDir)
109
+ if params["target_arch"] == "arm":
110
+ toolchainFile = cmsisSrcDir / "CMSIS" / "DSP" / "gcc.cmake"
111
+ armCpu = "cortex-m55" # TODO: make this variable?
112
+ cmakeArgs.append(f"-DARM_CPU={armCpu}")
113
+ cmakeArgs.append(f"-DCMAKE_TOOLCHAIN_FILE={toolchainFile}") # Why does this not set CMAKE_C_COMPILER?
114
+ armBinDir = Path(context.cache["arm_gcc.install_dir"]) / "bin"
115
+ cmakeArgs.append("-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY")
116
+ # Warning: this does not work!
117
+ if dsp:
118
+ cmakeArgs.append("-DARM_MATH_DSP=ON")
119
+ if mvei:
120
+ cmakeArgs.append("-DARM_MATH_MVEI=ON")
121
+ old = env["PATH"]
122
+ env["PATH"] = f"{armBinDir}:{old}"
123
+ elif params["target_arch"] == "riscv":
124
+ riscvPrefix = context.cache["riscv_gcc.install_dir"]
125
+ riscvBasename = context.cache["riscv_gcc.name"]
126
+ cmakeArgs.append(f"-DCMAKE_C_COMPILER={riscvPrefix}/bin/{riscvBasename}-gcc")
127
+ # cmakeArgs.append("-DCMAKE_CXX_COMPILER={riscvprefix}/bin/{riscvBasename}-g++")
128
+ # cmakeArgs.append("-DCMAKE_ASM_COMPILER={riscvprefix}/bin/{riscvBasename}-gcc")
129
+ # cmakeArgs.append("-DCMAKE_EXE_LINKER_FLAGS=\"'-march=rv32gc' '-mabi=ilp32d'\"") # TODO: How about vext?
130
+ # cmakeArgs.append("-E env LDFLAGS=\"-march=rv32gc -mabi=ilp32d\"")
131
+ # cmakeArgs.append("-E env LDFLAGS=\"-march=rv32gc -mabi=ilp32d\"")
132
+ env["LDFLAGS"] = "-march=rv32gc -mabi=ilp32d"
133
+ cmakeArgs.append("-DCMAKE_SYSTEM_NAME=Generic")
134
+ # TODO: how about linker, objcopy, ar?
135
+ elif params["target_arch"] == "x86":
136
+ pass
137
+ else:
138
+ raise ValueError(f"Target architecture '{target_arch}' is not supported")
139
+
140
+ utils.cmake(
141
+ *cmakeArgs,
142
+ str(cmsisnnSrcDir),
143
+ debug=dbg,
144
+ cwd=cmsisnnBuildDir,
145
+ live=verbose,
146
+ env=env,
147
+ )
148
+ utils.make(cwd=cmsisnnBuildDir, threads=threads, live=verbose)
149
+ utils.mkdirs(cmsisnnInstallDir)
150
+ utils.move(cmsisnnBuildDir / "Source" / "libcmsis-nn.a", cmsisnnLib)
151
+ context.cache["cmsisnn.lib", flags] = cmsisnnLib
@@ -0,0 +1,36 @@
1
+ #
2
+ # Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
3
+ #
4
+ # This file is part of MLonMCU.
5
+ # See https://github.com/tum-ei-eda/mlonmcu.git for further info.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ """Definition of tasks used to dynamically install MLonMCU dependencies"""
20
+
21
+
22
+ from mlonmcu.setup.task import TaskFactory
23
+ from mlonmcu.context.context import MlonMcuContext
24
+ from mlonmcu.logging import get_logger
25
+
26
+ logger = get_logger()
27
+
28
+ Tasks = TaskFactory()
29
+
30
+
31
+ def get_task_factory():
32
+ return Tasks
33
+
34
+
35
+ def _validate_gcc(context: MlonMcuContext, params=None):
36
+ return context.environment.has_toolchain("gcc")
@@ -0,0 +1,64 @@
1
+ #
2
+ # Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
3
+ #
4
+ # This file is part of MLonMCU.
5
+ # See https://github.com/tum-ei-eda/mlonmcu.git for further info.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ """Definition of tasks used to dynamically install MLonMCU dependencies"""
20
+
21
+ import multiprocessing
22
+
23
+ from mlonmcu.setup.task import TaskType
24
+ from mlonmcu.context.context import MlonMcuContext
25
+ from mlonmcu.setup import utils
26
+ from mlonmcu.logging import get_logger
27
+
28
+ from .common import _validate_gcc, get_task_factory
29
+
30
+ logger = get_logger()
31
+
32
+ Tasks = get_task_factory()
33
+
34
+
35
+ def _validate_corstone300(context: MlonMcuContext, params=None):
36
+ return context.environment.has_target("corstone300") and _validate_gcc(context, params=params)
37
+
38
+
39
+ @Tasks.provides(["corstone300.exe"])
40
+ @Tasks.validate(_validate_corstone300)
41
+ @Tasks.register(category=TaskType.TARGET)
42
+ def install_corstone300(
43
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
44
+ ):
45
+ """Download and install corstone300 FVP from ARM."""
46
+ fvpName = utils.makeDirName("corstone300")
47
+ fvpInstallDir = context.environment.paths["deps"].path / "install" / fvpName
48
+ fvpSubDir = fvpInstallDir / "fvp"
49
+ fvpExe = fvpSubDir / "models" / "Linux64_GCC-6.4" / "FVP_Corstone_SSE-300_Ethos-U55"
50
+ user_vars = context.environment.vars
51
+ if "corstone300.exe" in user_vars: # TODO: also check command line flags?
52
+ # fvpExe = user_vars["corstone300.exe"]
53
+ return False
54
+ else:
55
+ if not fvpExe.is_file():
56
+ fvpUrl = "https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/Corstone-300/"
57
+ fvpFileName = "FVP_Corstone_SSE-300_11.16_26"
58
+ fvpArchive = fvpFileName + ".tgz"
59
+ utils.download_and_extract(fvpUrl, fvpArchive, fvpInstallDir, progress=verbose)
60
+ fvpScript = fvpInstallDir / "FVP_Corstone_SSE-300.sh"
61
+ utils.exec_getout(
62
+ fvpScript, "--i-agree-to-the-contained-eula", "--no-interactive", "-d", fvpSubDir, print_output=False
63
+ )
64
+ context.cache["corstone300.exe"] = fvpExe
@@ -0,0 +1,87 @@
1
+ #
2
+ # Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
3
+ #
4
+ # This file is part of MLonMCU.
5
+ # See https://github.com/tum-ei-eda/mlonmcu.git for further info.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ """Definition of tasks used to dynamically install MLonMCU dependencies"""
20
+
21
+ import os
22
+ import multiprocessing
23
+ from pathlib import Path
24
+
25
+ from mlonmcu.setup.task import TaskType
26
+ from mlonmcu.context.context import MlonMcuContext
27
+ from mlonmcu.setup import utils
28
+ from mlonmcu.logging import get_logger
29
+
30
+ from .common import get_task_factory
31
+
32
+ logger = get_logger()
33
+
34
+ Tasks = get_task_factory()
35
+
36
+
37
+ def _validate_espidf(context: MlonMcuContext, params=None):
38
+ return context.environment.has_platform("espidf")
39
+
40
+
41
+ @Tasks.provides(["espidf.src_dir"])
42
+ @Tasks.validate(_validate_espidf)
43
+ @Tasks.register(category=TaskType.PLATFORM)
44
+ def clone_espidf(
45
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
46
+ ):
47
+ """Clone the ESP-IDF repository."""
48
+ espidfName = utils.makeDirName("espidf")
49
+ espidfSrcDir = context.environment.paths["deps"].path / "src" / espidfName
50
+ user_vars = context.environment.vars
51
+ if "espidf.src_dir" in user_vars: # TODO: also check command line flags?
52
+ return False
53
+ if rebuild or not utils.is_populated(espidfSrcDir):
54
+ espidfRepo = context.environment.repos["espidf"]
55
+ utils.clone(espidfRepo.url, espidfSrcDir, branch=espidfRepo.ref, refresh=rebuild, recursive=True)
56
+ context.cache["espidf.src_dir"] = espidfSrcDir
57
+
58
+
59
+ @Tasks.needs(["espidf.src_dir"])
60
+ @Tasks.provides(["espidf.install_dir"])
61
+ @Tasks.validate(_validate_espidf)
62
+ @Tasks.register(category=TaskType.PLATFORM)
63
+ def install_espidf(
64
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
65
+ ):
66
+ """Download and install target support for ESP-IDF toolchain."""
67
+ espidfName = utils.makeDirName("espidf")
68
+ espidfInstallDir = context.environment.paths["deps"].path / "install" / espidfName
69
+ espidfSrcDir = context.cache["espidf.src_dir"] # TODO: This will fail if the espidf.src_dir is user-supplied
70
+ user_vars = context.environment.vars
71
+ if "espidf.install_dir" in user_vars: # TODO: also check command line flags?
72
+ return False
73
+ boards = ["all"]
74
+ if "espidf.boards" in user_vars:
75
+ boards = user_vars["espidf.boards"]
76
+ if not isinstance(boards, str):
77
+ assert isinstance(boards, list)
78
+ boards = ",".join(boards)
79
+ if not utils.is_populated(espidfInstallDir) or rebuild:
80
+ # Using idf_tools.py directory instead of ./install.sh because we
81
+ # don't want to use espe-idfs python environment
82
+ espidfInstallScript = Path(espidfSrcDir) / "tools" / "idf_tools.py"
83
+ espidfInstallArgs = ["install", f"--targets={boards}"]
84
+ env = os.environ.copy()
85
+ env["IDF_TOOLS_PATH"] = str(espidfInstallDir)
86
+ utils.python(espidfInstallScript, *espidfInstallArgs, print_output=False, live=verbose, env=env)
87
+ context.cache["espidf.install_dir"] = espidfInstallDir
@@ -0,0 +1,147 @@
1
+ #
2
+ # Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
3
+ #
4
+ # This file is part of MLonMCU.
5
+ # See https://github.com/tum-ei-eda/mlonmcu.git for further info.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ """Definition of tasks used to dynamically install MLonMCU dependencies"""
20
+
21
+ import os
22
+ import multiprocessing
23
+ from pathlib import Path
24
+
25
+ from mlonmcu.setup.task import TaskType
26
+ from mlonmcu.context.context import MlonMcuContext
27
+ from mlonmcu.setup import utils
28
+ from mlonmcu.logging import get_logger
29
+
30
+ from .common import get_task_factory
31
+
32
+ logger = get_logger()
33
+
34
+ Tasks = get_task_factory()
35
+
36
+
37
+ def _validate_etiss(context: MlonMcuContext, params={}):
38
+ if "dbg" in params:
39
+ dbg = params["dbg"]
40
+ if dbg:
41
+ if not context.environment.has_feature("etissdbg"):
42
+ return False
43
+ return context.environment.has_target("etiss_pulpino")
44
+
45
+
46
+ @Tasks.provides(["etiss.src_dir"])
47
+ @Tasks.validate(_validate_etiss)
48
+ @Tasks.register(category=TaskType.TARGET)
49
+ def clone_etiss(
50
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
51
+ ):
52
+ """Clone the ETISS repository."""
53
+ etissName = utils.makeDirName("etiss")
54
+ user_vars = context.environment.vars
55
+ if "etiss.src_dir" in user_vars:
56
+ etissSrcDir = Path(user_vars["etiss.src_dir"])
57
+ rebuild = False
58
+ else:
59
+ etissSrcDir = context.environment.paths["deps"].path / "src" / etissName
60
+ if rebuild or not utils.is_populated(etissSrcDir):
61
+ etissRepo = context.environment.repos["etiss"]
62
+ utils.clone(etissRepo.url, etissSrcDir, branch=etissRepo.ref)
63
+ context.cache["etiss.src_dir"] = etissSrcDir
64
+
65
+
66
+ # @Tasks.needs(["etiss.src_dir", "llvm.install_dir"])
67
+ @Tasks.needs(["etiss.src_dir"])
68
+ @Tasks.provides(["etiss.build_dir", "etiss.install_dir"])
69
+ @Tasks.param("dbg", [False, True])
70
+ @Tasks.validate(_validate_etiss)
71
+ @Tasks.register(category=TaskType.TARGET)
72
+ def build_etiss(
73
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
74
+ ):
75
+ """Build the ETISS simulator."""
76
+ if not params:
77
+ params = {}
78
+ flags = utils.makeFlags((params["dbg"], "dbg"))
79
+ etissName = utils.makeDirName("etiss", flags=flags)
80
+ etissBuildDir = context.environment.paths["deps"].path / "build" / etissName
81
+ etissInstallDir = context.environment.paths["deps"].path / "install" / etissName
82
+ # llvmInstallDir = context.cache["llvm.install_dir"]
83
+ user_vars = context.environment.vars
84
+ if "etiss.build_dir" in user_vars or "etiss.install_dir" in user_vars:
85
+ return False
86
+ if rebuild or not utils.is_populated(etissBuildDir):
87
+ utils.mkdirs(etissBuildDir)
88
+ env = os.environ.copy()
89
+ # env["LLVM_DIR"] = str(llvmInstallDir)
90
+ utils.cmake(
91
+ context.cache["etiss.src_dir"],
92
+ "-DCMAKE_INSTALL_PREFIX=" + str(etissInstallDir),
93
+ cwd=etissBuildDir,
94
+ debug=params["dbg"],
95
+ env=env,
96
+ live=verbose,
97
+ )
98
+ utils.make(cwd=etissBuildDir, threads=threads, live=verbose)
99
+ context.cache["etiss.build_dir", flags] = etissBuildDir
100
+ context.cache["etiss.install_dir", flags] = etissInstallDir
101
+
102
+
103
+ @Tasks.needs(["etiss.build_dir"])
104
+ @Tasks.provides(["etiss.install_dir", "etissvp.exe", "etissvp.script"])
105
+ @Tasks.param("dbg", [False, True])
106
+ @Tasks.validate(_validate_etiss)
107
+ @Tasks.register(category=TaskType.TARGET)
108
+ def install_etiss(
109
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
110
+ ):
111
+ """Install ETISS."""
112
+ if not params:
113
+ params = {}
114
+ user_vars = context.environment.vars
115
+ if "etiss.install_dir" in user_vars and "etissvp.exe" in user_vars and "etissvp.script" in user_vars:
116
+ return False
117
+ flags = utils.makeFlags((params["dbg"], "dbg"))
118
+ # etissName = utils.makeDirName("etiss", flags=flags)
119
+ etissBuildDir = context.cache["etiss.build_dir", flags]
120
+ etissInstallDir = context.cache["etiss.install_dir", flags]
121
+ etissvpExe = etissInstallDir / "bin" / "bare_etiss_processor"
122
+ etissvpScript = etissInstallDir / "bin" / "run_helper.sh"
123
+ if rebuild or not utils.is_populated(etissInstallDir) or not etissvpExe.is_file():
124
+ utils.make("install", cwd=etissBuildDir, threads=threads, live=verbose)
125
+ context.cache["etiss.install_dir", flags] = etissInstallDir
126
+ context.cache["etissvp.exe", flags] = etissvpExe
127
+ context.cache["etissvp.script", flags] = etissvpScript
128
+
129
+
130
+ def _validate_microtvm_etissvp(context: MlonMcuContext, params=None):
131
+ return context.environment.has_target("microtvm_etissvp")
132
+
133
+
134
+ @Tasks.provides(["microtvm_etissvp.src_dir", "microtvm_etissvp.template"])
135
+ @Tasks.validate(_validate_microtvm_etissvp)
136
+ @Tasks.register(category=TaskType.FEATURE)
137
+ def clone_microtvm_etissvp(
138
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
139
+ ):
140
+ """Clone the microtvm-etissvp-template repository."""
141
+ name = utils.makeDirName("microtvm_etissvp")
142
+ srcDir = context.environment.paths["deps"].path / "src" / name
143
+ if rebuild or not utils.is_populated(srcDir):
144
+ repo = context.environment.repos["microtvm_etissvp"]
145
+ utils.clone(repo.url, srcDir, branch=repo.ref, refresh=rebuild)
146
+ context.cache["microtvm_etissvp.src_dir"] = srcDir
147
+ context.cache["microtvm_etissvp.template"] = srcDir / "template_project"
@@ -0,0 +1,67 @@
1
+ #
2
+ # Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
3
+ #
4
+ # This file is part of MLonMCU.
5
+ # See https://github.com/tum-ei-eda/mlonmcu.git for further info.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ """Definition of tasks used to dynamically install MLonMCU dependencies"""
20
+
21
+ import multiprocessing
22
+
23
+ from mlonmcu.setup.task import TaskType
24
+ from mlonmcu.context.context import MlonMcuContext
25
+ from mlonmcu.setup import utils
26
+ from mlonmcu.logging import get_logger
27
+
28
+ from .common import get_task_factory
29
+
30
+ logger = get_logger()
31
+
32
+ Tasks = get_task_factory()
33
+
34
+
35
+ def _validate_llvm(context: MlonMcuContext, params=None):
36
+ if context.environment.has_toolchain("llvm"):
37
+ return True
38
+ if context.environment.has_framework("tvm"):
39
+ user_vars = context.environment.vars
40
+ if "tvm.use_tlcpack" in user_vars and not user_vars["tvm.use_tlcpack"]:
41
+ return True
42
+
43
+
44
+ @Tasks.provides(["llvm.install_dir"])
45
+ @Tasks.validate(_validate_llvm)
46
+ @Tasks.register(category=TaskType.MISC)
47
+ def install_llvm(
48
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
49
+ ):
50
+ """Download and install LLVM."""
51
+ llvmName = utils.makeDirName("llvm")
52
+ llvmInstallDir = context.environment.paths["deps"].path / "install" / llvmName
53
+ user_vars = context.environment.vars
54
+ if "llvm.install_dir" in user_vars: # TODO: also check command line flags?
55
+ # TODO: WARNING
56
+ llvmInstallDir = user_vars["llvm.install_dir"]
57
+ else:
58
+ llvmVersion = user_vars.get("llvm.version", "14.0.0")
59
+ llvmDist = user_vars.get("llvm.distribution", "x86_64-linux-gnu-ubuntu-18.04")
60
+ llvmUrl = f"https://github.com/llvm/llvm-project/releases/download/llvmorg-{llvmVersion}/"
61
+ llvmFileName = f"clang+llvm-{llvmVersion}-{llvmDist}"
62
+ llvmArchive = llvmFileName + ".tar.xz"
63
+ # if rebuild or not utils.is_populated(llvmInstallDir):
64
+ # rebuild should only be triggered if the version/url changes but we can not detect that at the moment
65
+ if not utils.is_populated(llvmInstallDir):
66
+ utils.download_and_extract(llvmUrl, llvmArchive, llvmInstallDir, progress=verbose)
67
+ context.cache["llvm.install_dir"] = llvmInstallDir