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,49 @@
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_mlif(context: MlonMcuContext, params=None):
36
+ return context.environment.has_platform("mlif")
37
+
38
+
39
+ @Tasks.provides(["mlif.src_dir"])
40
+ @Tasks.validate(_validate_mlif)
41
+ @Tasks.register(category=TaskType.PLATFORM)
42
+ def clone_mlif(context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()):
43
+ """Clone the MLonMCU SW repository."""
44
+ mlifName = utils.makeDirName("mlif")
45
+ mlifSrcDir = context.environment.paths["deps"].path / "src" / mlifName
46
+ if rebuild or not utils.is_populated(mlifSrcDir):
47
+ mlifRepo = context.environment.repos["mlif"]
48
+ utils.clone(mlifRepo.url, mlifSrcDir, branch=mlifRepo.ref, refresh=rebuild)
49
+ context.cache["mlif.src_dir"] = mlifSrcDir
@@ -0,0 +1,166 @@
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
+ from pathlib import Path
23
+
24
+ from mlonmcu.setup.task import TaskType
25
+ from mlonmcu.context.context import MlonMcuContext
26
+ from mlonmcu.setup import utils
27
+ from mlonmcu.logging import get_logger
28
+
29
+ from .common import get_task_factory
30
+
31
+ logger = get_logger()
32
+
33
+ Tasks = get_task_factory()
34
+
35
+
36
+ def _validate_muriscvnn(context: MlonMcuContext, params=None):
37
+ if not context.environment.supports_feature("muriscvnn"):
38
+ return False
39
+ user_vars = context.environment.vars
40
+ if "muriscvnn.src_dir" not in user_vars:
41
+ assert "muriscvnn" in context.environment.repos, "Undefined repository: 'muriscvnn'"
42
+ if params:
43
+ toolchain = params.get("toolchain", "gcc")
44
+ if not context.environment.has_toolchain(toolchain):
45
+ return False
46
+ target_arch = params.get("target_arch", "riscv")
47
+ if target_arch == "riscv":
48
+ if params.get("vext", False):
49
+ if not context.environment.supports_feature("vext"):
50
+ return False
51
+ if params.get("pext", False):
52
+ if toolchain == "llvm":
53
+ # Unsupported
54
+ return False
55
+ if not context.environment.supports_feature("pext"):
56
+ return False
57
+ if params.get("vext", False) and params.get("pext", False):
58
+ # Either pext or vext!
59
+ return False
60
+ elif target_arch == "x86":
61
+ if toolchain != "gcc":
62
+ return False
63
+ if params.get("vext", False) or params.get("pext", False):
64
+ return False
65
+ # TODO: validate chosen toolchain?
66
+ return True
67
+
68
+
69
+ @Tasks.provides(["muriscvnn.src_dir", "muriscvnn.inc_dir"])
70
+ @Tasks.validate(_validate_muriscvnn)
71
+ @Tasks.register(category=TaskType.OPT)
72
+ def clone_muriscvnn(
73
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
74
+ ):
75
+ """Clone the muRISCV-NN project."""
76
+ muriscvnnName = utils.makeDirName("muriscvnn")
77
+ user_vars = context.environment.vars
78
+ # if "muriscvnn.lib" in user_vars: # TODO: also check command line flags?
79
+ # return False
80
+ if "muriscvnn.src_dir" in user_vars:
81
+ muriscvnnSrcDir = user_vars["muriscvnn.src_dir"]
82
+ muriscvnnIncludeDir = Path(muriscvnnSrcDir) / "Include"
83
+ rebuild = False
84
+ else:
85
+ muriscvnnSrcDir = context.environment.paths["deps"].path / "src" / muriscvnnName
86
+ muriscvnnIncludeDir = muriscvnnSrcDir / "Include"
87
+ if rebuild or not utils.is_populated(muriscvnnSrcDir):
88
+ muriscvnnRepo = context.environment.repos["muriscvnn"]
89
+ utils.clone(muriscvnnRepo.url, muriscvnnSrcDir, branch=muriscvnnRepo.ref)
90
+ context.cache["muriscvnn.src_dir"] = muriscvnnSrcDir
91
+ context.cache["muriscvnn.inc_dir"] = muriscvnnIncludeDir
92
+
93
+
94
+ @Tasks.needs(["muriscvnn.src_dir", "riscv_gcc.install_dir", "riscv_gcc.name"])
95
+ # @Tasks.optional(["riscv_gcc.install_dir", "riscv_gcc.name", "arm_gcc.install_dir"])
96
+ @Tasks.provides(["muriscvnn.build_dir", "muriscvnn.lib"])
97
+ # @Tasks.param("dbg", [False, True])
98
+ @Tasks.param("dbg", [False]) # disable due to bug with vext gcc
99
+ @Tasks.param("vext", [False, True])
100
+ @Tasks.param("pext", [False, True])
101
+ @Tasks.param("toolchain", ["gcc"])
102
+ @Tasks.param("target_arch", ["x86", "riscv"])
103
+ @Tasks.validate(_validate_muriscvnn)
104
+ @Tasks.register(category=TaskType.OPT)
105
+ def build_muriscvnn(
106
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
107
+ ):
108
+ """Build muRISCV-NN."""
109
+ if not params:
110
+ params = {}
111
+ flags = utils.makeFlags(
112
+ (params["dbg"], "dbg"),
113
+ (params["vext"], "vext"),
114
+ (params["pext"], "pext"),
115
+ (True, params["toolchain"]),
116
+ (True, params["target_arch"]),
117
+ )
118
+ flags_ = utils.makeFlags((params["vext"], "vext"), (params["pext"], "pext"))
119
+ muriscvnnName = utils.makeDirName("muriscvnn", flags=flags)
120
+ muriscvnnSrcDir = context.cache["muriscvnn.src_dir"]
121
+ muriscvnnBuildDir = context.environment.paths["deps"].path / "build" / muriscvnnName
122
+ muriscvnnInstallDir = context.environment.paths["deps"].path / "install" / muriscvnnName
123
+ muriscvnnLib = muriscvnnInstallDir / "libmuriscvnn.a"
124
+ user_vars = context.environment.vars
125
+ if "muriscvnn.lib" in user_vars: # TODO: also check command line flags?
126
+ return False
127
+ if rebuild or not (utils.is_populated(muriscvnnBuildDir) and muriscvnnLib.is_file()):
128
+ utils.mkdirs(muriscvnnBuildDir)
129
+ muriscvnnArgs = []
130
+ target_arch = params.get("target_arch", "riscv")
131
+ if target_arch == "riscv":
132
+ gccName = context.cache["riscv_gcc.name", flags_]
133
+ toolchain = params.get("toolchain", "gcc")
134
+ assert (
135
+ gccName == "riscv32-unknown-elf" or toolchain != "llvm"
136
+ ), "muRISCV-NN requires a non-multilib toolchain!"
137
+ if "riscv_gcc.install_dir" in user_vars:
138
+ riscv_gcc = user_vars["riscv_gcc.install_dir"]
139
+ else:
140
+ riscv_gcc = context.cache["riscv_gcc.install_dir", flags_]
141
+ muriscvnnArgs.append("-DRISCV_GCC_PREFIX=" + str(riscv_gcc))
142
+ muriscvnnArgs.append("-DTOOLCHAIN=" + params["toolchain"].upper())
143
+ vext = params.get("vext", False)
144
+ pext = params.get("pext", False)
145
+ muriscvnnArgs.append("-DUSE_VEXT=" + ("ON" if vext else "OFF"))
146
+ muriscvnnArgs.append("-DUSE_PEXT=" + ("ON" if pext else "OFF"))
147
+ muriscvnnArgs.append(f"-DRISCV_GCC_BASENAME={gccName}")
148
+ elif target_arch == "x86":
149
+ toolchain = params.get("toolchain", "gcc")
150
+ muriscvnnArgs.append("-DTOOLCHAIN=x86")
151
+ muriscvnnArgs.append("-DUSE_VEXT=OFF")
152
+ muriscvnnArgs.append("-DUSE_PEXT=OFF")
153
+ else:
154
+ raise RuntimeError(f"Unsupported target_arch for muriscvnn: {target_arch}")
155
+ utils.cmake(
156
+ muriscvnnSrcDir,
157
+ *muriscvnnArgs,
158
+ cwd=muriscvnnBuildDir,
159
+ debug=params["dbg"],
160
+ live=verbose,
161
+ )
162
+ utils.make(cwd=muriscvnnBuildDir, threads=threads, live=verbose)
163
+ utils.mkdirs(muriscvnnInstallDir)
164
+ utils.move(muriscvnnBuildDir / "Source" / "libmuriscvnn.a", muriscvnnLib)
165
+ context.cache["muriscvnn.build_dir", flags] = muriscvnnBuildDir
166
+ context.cache["muriscvnn.lib", flags] = muriscvnnLib
@@ -0,0 +1,192 @@
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 pkg_resources
23
+ from pathlib import Path
24
+ import multiprocessing
25
+
26
+ from mlonmcu.setup.task import TaskType
27
+ from mlonmcu.context.context import MlonMcuContext
28
+ from mlonmcu.setup import utils
29
+ from mlonmcu.logging import get_logger
30
+
31
+ from .common import get_task_factory
32
+
33
+ logger = get_logger()
34
+ Tasks = get_task_factory()
35
+
36
+ #############
37
+ # pulp-gcc #
38
+ #############
39
+
40
+
41
+ def _validate_pulp(context: MlonMcuContext, params=None):
42
+ return context.environment.has_target("gvsoc_pulp") or context.environment.has_target("gvsoc_pulpissimo")
43
+
44
+
45
+ def _validate_pulp_gcc(context: MlonMcuContext, params=None):
46
+ return context.environment.has_toolchain("gcc") and _validate_pulp(context, params)
47
+
48
+
49
+ @Tasks.provides(["pulp_gcc.install_dir", "pulp_gcc.name"])
50
+ @Tasks.validate(_validate_pulp_gcc)
51
+ @Tasks.register(category=TaskType.TOOLCHAIN)
52
+ def install_pulp_gcc(
53
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
54
+ ):
55
+ """Download and install the PULP (RISCV) GCC toolchain."""
56
+ if not params:
57
+ params = {}
58
+ user_vars = context.environment.vars
59
+ from_source = user_vars.get("pulp_gcc.from_source", False)
60
+ flags = utils.makeFlags()
61
+ pulpGccName = utils.makeDirName("pulp_gcc", flags=flags)
62
+ pulpGccInstallDir = context.environment.paths["deps"].path / "install" / pulpGccName
63
+ if "pulp_gcc.install_dir" in user_vars: # TODO: also check command line flags?
64
+ # This would overwrite the cache.ini entry which is NOT wanted! -> return false but populate gcc_name?
65
+ pulpGccInstallDir = user_vars["pulp_gcc.install_dir"]
66
+ else:
67
+ if rebuild or not utils.is_populated(pulpGccInstallDir):
68
+ if from_source:
69
+ pulpGccSrcDir = context.environment.paths["deps"].path / "src" / pulpGccName
70
+ pulpGccBuildDir = context.environment.paths["deps"].path / "build" / pulpGccName
71
+ utils.mkdirs(pulpGccBuildDir)
72
+ if rebuild or not utils.is_populated(pulpGccSrcDir):
73
+ pulpGccRepo = context.environment.repos["pulp_gcc"]
74
+ utils.clone(pulpGccRepo.url, pulpGccSrcDir, branch=pulpGccRepo.ref, refresh=rebuild, recursive=True)
75
+ env = os.environ.copy()
76
+ env["PATH"] = str(pulpGccInstallDir) + ":" + env["PATH"]
77
+ if rebuild or not utils.is_populated(pulpGccBuildDir):
78
+ pulpGccArgs = []
79
+ pulpGccArgs.append("--prefix=" + str(pulpGccInstallDir))
80
+ pulpGccArgs.append("--with-arch=rv32imc")
81
+ pulpGccArgs.append("--with-cmodel=medlow")
82
+ pulpGccArgs.append("--enable-multilib")
83
+ utils.exec_getout(
84
+ str(pulpGccSrcDir / "configure"),
85
+ *pulpGccArgs,
86
+ cwd=pulpGccBuildDir,
87
+ env=env,
88
+ live=verbose,
89
+ )
90
+ utils.make(
91
+ cwd=pulpGccBuildDir,
92
+ env=env,
93
+ live=verbose,
94
+ threads=threads,
95
+ )
96
+ else:
97
+ pulpGccUrl = user_vars.get("pulp_gcc.dl_url", None)
98
+ assert pulpGccUrl, "pulp_gcc.dl_url undefined and environment and pulp_gcc.from_source=0"
99
+ pulpGccBaseUrl, pulpGccArchive = pulpGccUrl.rsplit("/", 1)
100
+ utils.download_and_extract(pulpGccBaseUrl, pulpGccArchive, pulpGccInstallDir)
101
+ if "pulp_gcc.name" in user_vars:
102
+ pulpGccName = user_vars["pulp_gcc.name"]
103
+ else:
104
+ pulpGccName = "riscv32-unknown-elf"
105
+ context.cache["pulp_gcc.install_dir", flags] = pulpGccInstallDir
106
+ context.cache["pulp_gcc.name", flags] = pulpGccName
107
+ # context.cache["pulp_gcc.build_dir", flags] = pulpGccBuildDir
108
+
109
+
110
+ @Tasks.provides(["pulp_freertos.src_dir", "pulp_freertos.support_dir", "pulp_freertos.config_dir"])
111
+ @Tasks.validate(_validate_pulp)
112
+ @Tasks.register(category=TaskType.TARGET)
113
+ def clone_pulp_freertos(
114
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
115
+ ):
116
+ """Clone the pulp-freertos repository."""
117
+ pulpRtosName = utils.makeDirName("pulp_freertos")
118
+ pulpRtosSrcDir = context.environment.paths["deps"].path / "src" / pulpRtosName
119
+ pulpRtosSupportDir = pulpRtosSrcDir / "support"
120
+ pulpConfigsDir = pulpRtosSupportDir / "pulp-configs" / "configs"
121
+ if (
122
+ rebuild
123
+ or not utils.is_populated(pulpRtosSrcDir)
124
+ or not utils.is_populated(pulpRtosSupportDir)
125
+ or not utils.is_populated(pulpConfigsDir)
126
+ ):
127
+ pulpRtosRepo = context.environment.repos["pulp_freertos"]
128
+ utils.clone(pulpRtosRepo.url, pulpRtosSrcDir, branch=pulpRtosRepo.ref, refresh=rebuild, recursive=True)
129
+ user_vars = context.environment.vars
130
+ experimental_install = user_vars.get("pulp_freertos.experimental_install", False)
131
+ if experimental_install:
132
+ patchFile = Path(
133
+ pkg_resources.resource_filename(
134
+ "mlonmcu", os.path.join("..", "resources", "patches", "pulp_freertos_support.patch")
135
+ )
136
+ )
137
+ if patchFile.is_file():
138
+ utils.patch(patchFile, cwd=pulpRtosSrcDir)
139
+ context.cache["pulp_freertos.src_dir"] = pulpRtosSrcDir
140
+ context.cache["pulp_freertos.support_dir"] = pulpRtosSupportDir
141
+ context.cache["pulp_freertos.config_dir"] = pulpConfigsDir
142
+
143
+
144
+ @Tasks.needs(["pulp_freertos.src_dir", "pulp_freertos.support_dir", "pulp_freertos.config_dir"])
145
+ @Tasks.provides(["pulp_freertos.install_dir", "pulp_freertos.pythonpath", "gvsoc.exe"])
146
+ @Tasks.validate(_validate_pulp)
147
+ @Tasks.register(category=TaskType.TARGET)
148
+ def install_gvsoc(
149
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
150
+ ):
151
+ """Setup the pulp-freertos build."""
152
+ pulpRtosName = utils.makeDirName("pulp_freertos")
153
+ user_vars = context.environment.vars
154
+ experimental_install = user_vars.get("pulp_freertos.experimental_install", False)
155
+ pulpRtosSupportDir = context.cache["pulp_freertos.support_dir"]
156
+ gvsocExe = pulpRtosSupportDir / "egvsoc.sh"
157
+ pulpConfigDir = context.cache["pulp_freertos.config_dir"]
158
+ if experimental_install:
159
+ pulpRtosInstallDir = context.environment.paths["deps"].path / "install" / pulpRtosName
160
+ else:
161
+ pulpRtosInstallDir = pulpRtosSupportDir / "install"
162
+ pulpPythonPath = pulpRtosInstallDir / "python"
163
+ if rebuild or not utils.is_populated(pulpRtosInstallDir) or not utils.is_populated(pulpPythonPath):
164
+ utils.mkdirs(pulpRtosInstallDir)
165
+ env = os.environ.copy()
166
+ env.update(
167
+ {
168
+ "PULP_CURRENT_CONFIG": "pulpissimo@config_file=chips/pulpissimo/pulpissimo.json",
169
+ "PULP_CONFIGS_PATH": pulpConfigDir,
170
+ "PYTHONPATH": pulpRtosInstallDir / "python",
171
+ "INSTALL_DIR": pulpRtosInstallDir,
172
+ "ARCHI_DIR": pulpRtosSupportDir / "archi" / "include",
173
+ "SUPPORT_ROOT": pulpRtosSupportDir,
174
+ }
175
+ )
176
+ if experimental_install:
177
+ env.update(
178
+ {
179
+ "SUPPORT_INSTALL_DIR": pulpRtosInstallDir,
180
+ }
181
+ )
182
+ makeArgs = ["-f", pulpRtosSupportDir / "support.mk", "gvsoc"]
183
+ utils.make(
184
+ *makeArgs,
185
+ cwd=pulpRtosInstallDir,
186
+ env=env,
187
+ live=verbose,
188
+ threads=1, # Script returns 2 exit code if parallel
189
+ )
190
+ context.cache["pulp_freertos.install_dir"] = pulpRtosInstallDir
191
+ context.cache["pulp_freertos.pythonpath"] = pulpPythonPath
192
+ context.cache["gvsoc.exe"] = gvsocExe
@@ -0,0 +1,146 @@
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
+ from pathlib import Path
23
+
24
+ from mlonmcu.setup.task import TaskType
25
+ from mlonmcu.context.context import MlonMcuContext
26
+ from mlonmcu.setup import utils
27
+ from mlonmcu.logging import get_logger
28
+
29
+ from .common import _validate_gcc, get_task_factory
30
+
31
+ logger = get_logger()
32
+
33
+ Tasks = get_task_factory()
34
+
35
+
36
+ def _validate_riscv_gcc(context: MlonMcuContext, params=None):
37
+ if not _validate_gcc(context, params=params):
38
+ return False
39
+ if not (
40
+ context.environment.has_target("etiss_pulpino")
41
+ or context.environment.has_target("spike")
42
+ or context.environment.has_target("ovpsim")
43
+ ):
44
+ return False
45
+ if params:
46
+ vext = params.get("vext", False)
47
+ pext = params.get("pext", False)
48
+ user_vars = context.environment.vars
49
+ multilib = user_vars.get("riscv_gcc.multilib", False)
50
+ if vext and pext:
51
+ return multilib
52
+ elif vext:
53
+ if not context.environment.has_feature("vext"):
54
+ return False
55
+ elif pext:
56
+ if not context.environment.has_feature("pext"):
57
+ return False
58
+ return True
59
+
60
+
61
+ @Tasks.provides(["riscv_gcc.install_dir", "riscv_gcc.name", "riscv_gcc.variant"])
62
+ @Tasks.param("vext", [False, True])
63
+ @Tasks.param("pext", [False, True])
64
+ @Tasks.validate(_validate_riscv_gcc)
65
+ @Tasks.register(category=TaskType.TOOLCHAIN)
66
+ def install_riscv_gcc(
67
+ context: MlonMcuContext, params=None, rebuild=False, verbose=False, threads=multiprocessing.cpu_count()
68
+ ):
69
+ """Download and install the RISCV GCC toolchain."""
70
+ if not params:
71
+ params = {}
72
+ user_vars = context.environment.vars
73
+ vext = params["vext"]
74
+ pext = params["pext"]
75
+ multilib = user_vars.get("riscv_gcc.multilib", False)
76
+ variant = user_vars.get("riscv_gcc.variant", "unknown")
77
+ flags = utils.makeFlags((params["vext"], "vext"), (params["pext"], "pext"))
78
+ # TODO: if the used gcc supports both pext and vext we do not need to download it 3 times!
79
+ if multilib:
80
+ riscvName = utils.makeDirName("riscv_gcc", flags=[])
81
+ else:
82
+ riscvName = utils.makeDirName("riscv_gcc", flags=flags)
83
+ riscvInstallDir = context.environment.paths["deps"].path / "install" / riscvName
84
+ if (not vext) and (not pext) and "riscv_gcc.install_dir_default" in user_vars:
85
+ riscvInstallDir = user_vars["riscv_gcc.install_dir_default"]
86
+ if vext and "riscv_gcc.install_dir_vext" in user_vars:
87
+ assert not multilib, "Multilib toolchain does only support riscv_gcc.install_dir"
88
+ riscvInstallDir = user_vars["riscv_gcc.install_dir_vext"]
89
+ elif pext and "riscv_gcc.install_dir_pext" in user_vars:
90
+ assert not multilib, "Multilib toolchain does only support riscv_gcc.install_dir"
91
+ riscvInstallDir = user_vars["riscv_gcc.install_dir_pext"]
92
+ elif "riscv_gcc.install_dir" in user_vars: # TODO: also check command line flags?
93
+ # This would overwrite the cache.ini entry which is NOT wanted! -> return false but populate gcc_name?
94
+ riscvInstallDir = user_vars["riscv_gcc.install_dir"]
95
+ else:
96
+
97
+ def _helper(url):
98
+ fullUrlSplit = url.split("/")
99
+ riscvUrl = "/".join(fullUrlSplit[:-1])
100
+ riscvFileName, riscvFileExtension = fullUrlSplit[-1].split(".", 1)
101
+ return riscvUrl, riscvFileName, riscvFileExtension
102
+
103
+ if vext and "riscv_gcc.dl_url_vext" in user_vars:
104
+ assert not multilib, "Multilib toolchain does only support riscv_gcc.dl_url"
105
+ riscvUrl, riscvFileName, riscvFileExtension = _helper(user_vars["riscv_gcc.dl_url_vext"])
106
+ elif pext and "riscv_gcc.dl_url_pext" in user_vars:
107
+ assert not multilib, "Multilib toolchain does only support riscv_gcc.dl_url"
108
+ riscvUrl, riscvFileName, riscvFileExtension = _helper(user_vars["riscv_gcc.dl_url_pext"])
109
+ elif "riscv_gcc.dl_url" in user_vars:
110
+ riscvUrl, riscvFileName, riscvFileExtension = _helper(user_vars["riscv_gcc.dl_url"])
111
+ else:
112
+ riscvVersion = (
113
+ user_vars["riscv.version"]
114
+ if "riscv.version" in user_vars
115
+ else ("8.3.0-2020.04.0" if not vext else "10.2.0-2020.12.8")
116
+ )
117
+ riscvDist = (
118
+ user_vars["riscv.distribution"] if "riscv.distribution" in user_vars else "x86_64-linux-ubuntu14"
119
+ )
120
+ if vext:
121
+ subdir = "v" + ".".join(riscvVersion.split("-")[1].split(".")[:-1])
122
+ riscvUrl = "https://static.dev.sifive.com/dev-tools/freedom-tools/" + subdir + "/"
123
+ riscvFileName = f"riscv64-unknown-elf-toolchain-{riscvVersion}-{riscvDist}"
124
+ else:
125
+ riscvUrl = "https://static.dev.sifive.com/dev-tools/"
126
+ riscvFileName = f"riscv64-unknown-elf-gcc-{riscvVersion}-{riscvDist}"
127
+ riscvFileExtension = "tar.gz"
128
+ riscvArchive = riscvFileName + "." + riscvFileExtension
129
+ # if rebuild or not utils.is_populated(riscvInstallDir):
130
+ # rebuild should only be triggered if the version/url changes but we can not detect that at the moment
131
+ if not utils.is_populated(riscvInstallDir):
132
+ utils.download_and_extract(riscvUrl, riscvArchive, riscvInstallDir, progress=verbose)
133
+ assert utils.is_populated(riscvInstallDir)
134
+ if "riscv_gcc.name" in user_vars:
135
+ gccName = user_vars["riscv_gcc.name"]
136
+ else:
137
+ gccNames = ["riscv64-unknown-elf", "riscv32-unknown-elf"]
138
+ gccName = None
139
+ for name in gccNames:
140
+ if (Path(riscvInstallDir) / name).is_dir():
141
+ gccName = name
142
+ break
143
+ assert gccName is not None, "Toolchain name could not be determined automatically"
144
+ context.cache["riscv_gcc.install_dir", flags] = riscvInstallDir
145
+ context.cache["riscv_gcc.name", flags] = gccName
146
+ context.cache["riscv_gcc.variant", flags] = variant