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,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
+ from mlonmcu.logging import get_logger
20
+
21
+ from mlonmcu.flow.tvm.backend.backend import TVMBackend
22
+
23
+ # from mlonmcu.flow.tvm.backend.tvmaot import TVMAOTBackend
24
+ # from mlonmcu.flow.tvm.backend.tvmaotplus import TVMAOTPlusBackend
25
+ # from mlonmcu.flow.tvm.backend.tvmllvm import TVMLLVMBackend
26
+ from mlonmcu.flow.tvm.backend.tvmrt import TVMRTBackend
27
+
28
+ logger = get_logger()
29
+
30
+ MICROTVM_PLATFORM_BACKEND_REGISTRY = {}
31
+
32
+
33
+ def register_microtvm_platform_backend(backend_name, b, override=False):
34
+ global MICROTVM_PLATFORM_BACKEND_REGISTRY
35
+
36
+ if backend_name in MICROTVM_PLATFORM_BACKEND_REGISTRY and not override:
37
+ raise RuntimeError(f"TVM platform backend {backend_name} is already registered")
38
+ MICROTVM_PLATFORM_BACKEND_REGISTRY[backend_name] = b
39
+
40
+
41
+ def get_microtvm_platform_backends():
42
+ return MICROTVM_PLATFORM_BACKEND_REGISTRY
43
+
44
+
45
+ # register_microtvm_platform_backend("tvmaot", TVMAOTBackend)
46
+ # register_microtvm_platform_backend("tvmaotplus", TVMAOTPlusBackend)
47
+ register_microtvm_platform_backend("tvmrt", TVMRTBackend)
48
+ # register_microtvm_platform_backend("tvmllvm", TVMLLVMBackend)
49
+
50
+
51
+ def create_microtvm_platform_backend(name, platform, base=TVMBackend):
52
+ class MicroTvmPlatformBackend(base):
53
+ FEATURES = base.FEATURES + []
54
+
55
+ DEFAULTS = {
56
+ **base.DEFAULTS,
57
+ }
58
+ REQUIRED = base.REQUIRED + []
59
+
60
+ def __init__(self, features=None, config=None):
61
+ super().__init__(runtime="crt", fmt="mlf", features=features, config=config)
62
+ self.platform = platform
63
+
64
+ return MicroTvmPlatformBackend
@@ -0,0 +1,94 @@
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
+ from pathlib import Path
20
+
21
+ from mlonmcu.target.target import Target
22
+
23
+ from mlonmcu.logging import get_logger
24
+
25
+ from .microtvm_template_target import TemplateMicroTvmPlatformTarget
26
+
27
+ logger = get_logger()
28
+
29
+
30
+ class EspidfMicroTvmPlatformTarget(TemplateMicroTvmPlatformTarget):
31
+ FEATURES = TemplateMicroTvmPlatformTarget.FEATURES + []
32
+
33
+ DEFAULTS = {
34
+ **Target.DEFAULTS,
35
+ "project_type": "host_driven",
36
+ "verbose": False,
37
+ "board": None,
38
+ "port": None,
39
+ "baud": None,
40
+ }
41
+ REQUIRED = Target.REQUIRED + ["microtvm_espidf.template", "espidf.src_dir", "espidf.install_dir"]
42
+
43
+ def __init__(self, name=None, features=None, config=None):
44
+ super().__init__(name=name, features=features, config=config)
45
+ self.template_path = self.microtvm_espidf_template
46
+ # TODO: interate into TVM build config
47
+ self.option_names = [
48
+ "project_type",
49
+ "verbose",
50
+ "idf_path",
51
+ "idf_tools_path",
52
+ "idf_target",
53
+ "idf_serial_port",
54
+ "idf_serial_baud",
55
+ "warning_as_error",
56
+ "compile_definitions",
57
+ "extra_files_tar",
58
+ ]
59
+
60
+ @property
61
+ def microtvm_espidf_template(self):
62
+ return Path(self.config["microtvm_espidf.template"])
63
+
64
+ @property
65
+ def esp_idf_src_dir(self):
66
+ return Path(self.config["espidf.src_dir"])
67
+
68
+ @property
69
+ def esp_idf_install_dir(self):
70
+ return Path(self.config["espidf.install_dir"])
71
+
72
+ @property
73
+ def board(self):
74
+ return self.config["board"]
75
+
76
+ @property
77
+ def port(self):
78
+ return self.config["port"]
79
+
80
+ @property
81
+ def baud(self):
82
+ return self.config["baud"]
83
+
84
+ def get_project_options(self):
85
+ ret = super().get_project_options()
86
+ ret.update({"idf_path": self.esp_idf_src_dir})
87
+ ret.update({"idf_tools_path": self.esp_idf_install_dir})
88
+ assert self.board, "microtvm_espidf.board has do be defined"
89
+ ret.update({"idf_target": self.board})
90
+ if self.port:
91
+ ret.update({"idf_serial_port": self.port})
92
+ if self.baud:
93
+ ret.update({"idf_serial_baud": self.baud})
94
+ return ret
@@ -0,0 +1,98 @@
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
+ from pathlib import Path
20
+
21
+ from mlonmcu.target.target import Target
22
+ from mlonmcu.feature.features import SUPPORTED_TVM_BACKENDS
23
+
24
+ from mlonmcu.logging import get_logger
25
+
26
+ from .microtvm_template_target import TemplateMicroTvmPlatformTarget
27
+
28
+ logger = get_logger()
29
+
30
+
31
+ class EtissvpMicroTvmPlatformTarget(TemplateMicroTvmPlatformTarget):
32
+ FEATURES = Target.FEATURES + []
33
+
34
+ DEFAULTS = {
35
+ **Target.DEFAULTS,
36
+ "extra_files_tar": None,
37
+ "project_type": "?",
38
+ "verbose": False,
39
+ "warning_as_error": True,
40
+ "compile_definitions": "",
41
+ "config_main_stack_size": -1,
42
+ # "riscv_path": "?",
43
+ # "etiss_path": "?",
44
+ # "etissvp_script": "?",
45
+ "etissvp_script_args": "?",
46
+ "transport": True,
47
+ }
48
+ REQUIRED = Target.REQUIRED + ["microtvm_etissvp.src_dir", "riscv_gcc.install_dir", "etiss.install_dir"]
49
+
50
+ def __init__(self, name=None, features=None, config=None):
51
+ super().__init__(name=name, features=features, config=config)
52
+ self.template_path = self.microtvm_etissvp.src_dir / "template_project"
53
+ self.option_names = [
54
+ "extra_files_tar",
55
+ "project_type",
56
+ # "verbose",
57
+ "warning_as_error",
58
+ "compile_definitions",
59
+ "config_main_stack_size",
60
+ "etissvp_script_args",
61
+ "transport",
62
+ ]
63
+
64
+ @property
65
+ def microtvm_etissvp_src_dir(self):
66
+ return Path(self.config["microtvm_etissvp.src_dir"])
67
+
68
+ @property
69
+ def riscv_gcc_install_dir(self):
70
+ return Path(self.config["riscv_gcc_install_dir"])
71
+
72
+ @property
73
+ def etiss_install_dir(self):
74
+ return Path(self.config["etiss.install_dir"])
75
+
76
+ def get_project_options(self):
77
+ ret = super().get_project_options()
78
+ ret.update(
79
+ {
80
+ "riscv_path": self.riscv_gcc_install_dir,
81
+ "etiss_path": self.etiss_install_dir,
82
+ "etissvp_script": self.etiss_install_dir / "bin" / "run_helper.sh",
83
+ }
84
+ )
85
+ return ret
86
+
87
+ def get_backend_config(self, backend):
88
+ if backend in SUPPORTED_TVM_BACKENDS:
89
+ return {
90
+ "target_device": "riscv_cpu",
91
+ # "target_march": "TODO",
92
+ # "target_model": "TODO",
93
+ # "target_mtriple": "TODO",
94
+ # "target_mabi": "TODO",
95
+ # "target_mattr": "TODO",
96
+ # "target_mcpu": "TODO",
97
+ }
98
+ return {}
@@ -0,0 +1,46 @@
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
+ from pathlib import Path
20
+
21
+ from mlonmcu.target.target import Target
22
+
23
+ from mlonmcu.logging import get_logger
24
+
25
+ from .microtvm_template_target import TemplateMicroTvmPlatformTarget
26
+
27
+ logger = get_logger()
28
+
29
+
30
+ class HostMicroTvmPlatformTarget(TemplateMicroTvmPlatformTarget):
31
+ FEATURES = Target.FEATURES + []
32
+
33
+ DEFAULTS = {
34
+ **Target.DEFAULTS,
35
+ "verbose": False,
36
+ }
37
+ REQUIRED = Target.REQUIRED + ["tvm.build_dir"]
38
+
39
+ def __init__(self, name=None, features=None, config=None):
40
+ super().__init__(name=name, features=features, config=config)
41
+ self.template_path = self.tvm_build_dir / "standalone_crt" / "template" / "host"
42
+ # self.option_names = ["verbose"]
43
+
44
+ @property
45
+ def tvm_build_dir(self):
46
+ return Path(self.config["tvm.build_dir"])
@@ -0,0 +1,230 @@
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
+ from pathlib import Path
20
+
21
+ from mlonmcu.target.target import Target
22
+ from mlonmcu.feature.features import SUPPORTED_TVM_BACKENDS
23
+ from mlonmcu.config import str2bool
24
+ import mlonmcu.target.riscv.util as riscv_util
25
+
26
+ from mlonmcu.logging import get_logger
27
+
28
+ from .microtvm_template_target import TemplateMicroTvmPlatformTarget
29
+
30
+ logger = get_logger()
31
+
32
+
33
+ class SpikeMicroTvmPlatformTarget(TemplateMicroTvmPlatformTarget):
34
+ FEATURES = TemplateMicroTvmPlatformTarget.FEATURES + ["vext", "pext"]
35
+
36
+ DEFAULTS = {
37
+ **TemplateMicroTvmPlatformTarget.DEFAULTS,
38
+ "verbose": True,
39
+ "arch": "rv32gc",
40
+ "abi": None,
41
+ "spike_extra_args": None,
42
+ "pk_extra_args": None,
43
+ "enable_vext": False,
44
+ "vext_spec": 1.0,
45
+ "embedded_vext": False,
46
+ "enable_pext": False,
47
+ "pext_spec": 0.92, # ?
48
+ "vlen": 0, # vectorization=off
49
+ "elen": 32,
50
+ }
51
+ REQUIRED = Target.REQUIRED + [
52
+ "spike.exe",
53
+ "spike.pk",
54
+ "riscv_gcc.name",
55
+ "riscv_gcc.install_dir",
56
+ "riscv_gcc.variant",
57
+ "tvm.src_dir",
58
+ ]
59
+
60
+ def __init__(self, name=None, features=None, config=None):
61
+ super().__init__(name=name, features=features, config=config)
62
+ self.template_path = self.tvm_src_dir / "apps" / "microtvm" / "spike"
63
+ # TODO: interate into TVM build config
64
+ self.option_names = [
65
+ "verbose",
66
+ "spike_exe",
67
+ "spike_pk",
68
+ "arch",
69
+ "abi",
70
+ "triple",
71
+ "spike_extra_args",
72
+ "pk_extra_args",
73
+ ]
74
+
75
+ @property
76
+ def spike_exe(self):
77
+ return Path(self.config["spike.exe"])
78
+
79
+ @property
80
+ def spike_pk(self):
81
+ return Path(self.config["spike.pk"])
82
+
83
+ @property
84
+ def riscv_gcc_name(self):
85
+ return self.config["riscv_gcc.name"]
86
+
87
+ @property
88
+ def gcc_variant(self):
89
+ return self.config["riscv_gcc.variant"]
90
+
91
+ @property
92
+ def riscv_gcc_install_dir(self):
93
+ return Path(self.config["riscv_gcc.install_dir"])
94
+
95
+ @property
96
+ def tvm_src_dir(self):
97
+ return Path(self.config["tvm.src_dir"])
98
+
99
+ @property
100
+ def enable_vext(self):
101
+ value = self.config["enable_vext"]
102
+ return str2bool(value) if not isinstance(value, (bool, int)) else value
103
+
104
+ @property
105
+ def enable_pext(self):
106
+ value = self.config["enable_pext"]
107
+ return str2bool(value) if not isinstance(value, (bool, int)) else value
108
+
109
+ @property
110
+ def fpu(self):
111
+ exts = self.extensions
112
+ if "g" in exts or "d" in exts:
113
+ return "double"
114
+ elif "f" in exts:
115
+ return "single"
116
+ return "none"
117
+
118
+ @property
119
+ def has_fpu(self):
120
+ return self.fpu != "none"
121
+
122
+ @property
123
+ def xlen(self):
124
+ arch = self.config["arch"]
125
+ xlen = int(arch[2:4])
126
+ return xlen
127
+
128
+ @property
129
+ def extensions(self):
130
+ arch = self.config["arch"]
131
+ exts_str = arch[4:]
132
+
133
+ def _split_exts(x):
134
+ ret = []
135
+ splitted = x.split("_")
136
+ for c in splitted:
137
+ lowered = c.lower()
138
+ assert len(c) > 0
139
+ if len(c) == 1:
140
+ ret.append(lowered)
141
+ else:
142
+ for i, cc in enumerate(lowered):
143
+ if cc in ["x", "z"]:
144
+ ret.append(lowered[i:])
145
+ break
146
+ else:
147
+ ret.append(cc)
148
+ return ret
149
+
150
+ exts = _split_exts(exts_str)
151
+ if "g" in exts or "d" in exts:
152
+ fpu = "double"
153
+ elif "f" in exts:
154
+ fpu = "single"
155
+ return riscv_util.update_extensions(
156
+ exts,
157
+ pext=self.enable_pext,
158
+ pext_spec=self.pext_spec,
159
+ vext=self.enable_vext,
160
+ elen=self.elen,
161
+ embedded=self.embedded_vext,
162
+ fpu=fpu,
163
+ variant=self.gcc_variant,
164
+ )
165
+
166
+ @property
167
+ def vlen(self):
168
+ return int(self.config["vlen"])
169
+
170
+ @property
171
+ def elen(self):
172
+ return int(self.config["elen"])
173
+
174
+ @property
175
+ def vext_spec(self):
176
+ return float(self.config["vext_spec"])
177
+
178
+ @property
179
+ def embedded_vext(self):
180
+ value = self.config["embedded_vext"]
181
+ return str2bool(value) if not isinstance(value, (bool, int)) else value
182
+
183
+ @property
184
+ def pext_spec(self):
185
+ return float(self.config["pext_spec"])
186
+
187
+ @property
188
+ def arch(self):
189
+ exts_str = riscv_util.join_extensions(riscv_util.sort_extensions_canonical(self.extensions, lower=True))
190
+ return f"rv{self.xlen}{exts_str}"
191
+
192
+ def get_project_options(self):
193
+ ret = super().get_project_options()
194
+ ret.update(
195
+ {
196
+ "spike_exe": str(self.spike_exe),
197
+ "spike_pk": str(self.spike_pk),
198
+ "triple": str(self.riscv_gcc_install_dir / "bin" / self.riscv_gcc_name),
199
+ }
200
+ )
201
+ return ret
202
+
203
+ def update_environment(self, env):
204
+ super().update_environment(env)
205
+ if "PATH" in env:
206
+ env["PATH"] = str(self.riscv_gcc_install_dir / "bin") + ":" + env["PATH"]
207
+ else:
208
+ env["PATH"] = str(self.riscv_gcc_install_dir / "bin")
209
+
210
+ def get_backend_config(self, backend):
211
+ ret = {}
212
+ if backend in SUPPORTED_TVM_BACKENDS:
213
+ ret.update(
214
+ {
215
+ "target_device": "riscv_cpu",
216
+ "target_march": self.arch,
217
+ "target_model": f"spike-{self.arch}",
218
+ "target_mtriple": self.riscv_gcc_name,
219
+ "target_mabi": self.config.get("abi", None),
220
+ }
221
+ )
222
+ if self.enable_pext or self.enable_vext:
223
+ ret.update(
224
+ {
225
+ # Warning: passing kernel layouts does not work with upstream TVM
226
+ # TODO: allow passing map?
227
+ "desired_layout": "NHWC:HWOI",
228
+ }
229
+ )
230
+ return ret