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.
- mlonmcu/__init__.py +26 -0
- mlonmcu/artifact.py +172 -0
- mlonmcu/cli/__init__.py +19 -0
- mlonmcu/cli/build.py +119 -0
- mlonmcu/cli/cleanup.py +75 -0
- mlonmcu/cli/common.py +227 -0
- mlonmcu/cli/compile.py +87 -0
- mlonmcu/cli/env.py +68 -0
- mlonmcu/cli/export.py +93 -0
- mlonmcu/cli/flow.py +67 -0
- mlonmcu/cli/helper/__init__.py +18 -0
- mlonmcu/cli/helper/filter.py +25 -0
- mlonmcu/cli/helper/parse.py +159 -0
- mlonmcu/cli/init.py +130 -0
- mlonmcu/cli/load.py +87 -0
- mlonmcu/cli/main.py +116 -0
- mlonmcu/cli/models.py +48 -0
- mlonmcu/cli/run.py +56 -0
- mlonmcu/cli/setup.py +136 -0
- mlonmcu/cli/tune.py +48 -0
- mlonmcu/config.py +219 -0
- mlonmcu/context/__init__.py +22 -0
- mlonmcu/context/context.py +545 -0
- mlonmcu/context/read_write_filelock.py +327 -0
- mlonmcu/environment/__init__.py +18 -0
- mlonmcu/environment/config.py +214 -0
- mlonmcu/environment/environment.py +501 -0
- mlonmcu/environment/init.py +191 -0
- mlonmcu/environment/list.py +81 -0
- mlonmcu/environment/loader.py +250 -0
- mlonmcu/environment/templates.py +69 -0
- mlonmcu/environment/writer.py +117 -0
- mlonmcu/feature/__init__.py +18 -0
- mlonmcu/feature/feature.py +230 -0
- mlonmcu/feature/features.py +1537 -0
- mlonmcu/feature/type.py +33 -0
- mlonmcu/flow/__init__.py +61 -0
- mlonmcu/flow/backend.py +234 -0
- mlonmcu/flow/framework.py +69 -0
- mlonmcu/flow/tflm/__init__.py +23 -0
- mlonmcu/flow/tflm/backend/__init__.py +23 -0
- mlonmcu/flow/tflm/backend/backend.py +47 -0
- mlonmcu/flow/tflm/backend/tflmc.py +129 -0
- mlonmcu/flow/tflm/backend/tflmi.py +385 -0
- mlonmcu/flow/tflm/framework.py +81 -0
- mlonmcu/flow/tvm/__init__.py +23 -0
- mlonmcu/flow/tvm/backend/__init__.py +26 -0
- mlonmcu/flow/tvm/backend/backend.py +282 -0
- mlonmcu/flow/tvm/backend/model_info.py +307 -0
- mlonmcu/flow/tvm/backend/python_utils.py +36 -0
- mlonmcu/flow/tvm/backend/tuner.py +41 -0
- mlonmcu/flow/tvm/backend/tvmaot.py +162 -0
- mlonmcu/flow/tvm/backend/tvmaotplus.py +51 -0
- mlonmcu/flow/tvm/backend/tvmc_utils.py +172 -0
- mlonmcu/flow/tvm/backend/tvmcg.py +102 -0
- mlonmcu/flow/tvm/backend/tvmllvm.py +106 -0
- mlonmcu/flow/tvm/backend/tvmrt.py +151 -0
- mlonmcu/flow/tvm/backend/wrapper.py +645 -0
- mlonmcu/flow/tvm/framework.py +96 -0
- mlonmcu/logging.py +79 -0
- mlonmcu/mlonmcu.py +19 -0
- mlonmcu/models/__init__.py +31 -0
- mlonmcu/models/convert_data.py +107 -0
- mlonmcu/models/frontend.py +571 -0
- mlonmcu/models/group.py +29 -0
- mlonmcu/models/lookup.py +345 -0
- mlonmcu/models/metadata.py +133 -0
- mlonmcu/models/model.py +104 -0
- mlonmcu/models/options.py +64 -0
- mlonmcu/models/utils.py +136 -0
- mlonmcu/platform/__init__.py +27 -0
- mlonmcu/platform/_platform.py +46 -0
- mlonmcu/platform/espidf/__init__.py +25 -0
- mlonmcu/platform/espidf/espidf.py +489 -0
- mlonmcu/platform/espidf/espidf_target.py +257 -0
- mlonmcu/platform/lookup.py +126 -0
- mlonmcu/platform/microtvm/__init__.py +25 -0
- mlonmcu/platform/microtvm/microtvm.py +580 -0
- mlonmcu/platform/microtvm/microtvm_arduino_target.py +68 -0
- mlonmcu/platform/microtvm/microtvm_backend.py +64 -0
- mlonmcu/platform/microtvm/microtvm_espidf_target.py +94 -0
- mlonmcu/platform/microtvm/microtvm_etissvp_target.py +98 -0
- mlonmcu/platform/microtvm/microtvm_host_target.py +46 -0
- mlonmcu/platform/microtvm/microtvm_spike_target.py +230 -0
- mlonmcu/platform/microtvm/microtvm_target.py +189 -0
- mlonmcu/platform/microtvm/microtvm_template_target.py +55 -0
- mlonmcu/platform/microtvm/microtvm_zephyr_target.py +91 -0
- mlonmcu/platform/mlif/__init__.py +25 -0
- mlonmcu/platform/mlif/mlif.py +300 -0
- mlonmcu/platform/mlif/mlif_target.py +86 -0
- mlonmcu/platform/platform.py +244 -0
- mlonmcu/platform/tvm/__init__.py +25 -0
- mlonmcu/platform/tvm/tvm.py +429 -0
- mlonmcu/platform/tvm/tvm_backend.py +57 -0
- mlonmcu/platform/tvm/tvm_target.py +165 -0
- mlonmcu/platform/zephyr/__init__.py +25 -0
- mlonmcu/platform/zephyr/zephyr.py +450 -0
- mlonmcu/platform/zephyr/zephyr_target.py +110 -0
- mlonmcu/plugins.py +26 -0
- mlonmcu/report.py +99 -0
- mlonmcu/session/__init__.py +18 -0
- mlonmcu/session/postprocess/__init__.py +43 -0
- mlonmcu/session/postprocess/postprocess.py +62 -0
- mlonmcu/session/postprocess/postprocesses.py +487 -0
- mlonmcu/session/run.py +1008 -0
- mlonmcu/session/session.py +373 -0
- mlonmcu/setup/__init__.py +18 -0
- mlonmcu/setup/cache.py +147 -0
- mlonmcu/setup/gen_requirements.py +619 -0
- mlonmcu/setup/setup.py +285 -0
- mlonmcu/setup/task.py +380 -0
- mlonmcu/setup/tasks/__init__.py +40 -0
- mlonmcu/setup/tasks/arm_gcc.py +58 -0
- mlonmcu/setup/tasks/cmsisnn.py +151 -0
- mlonmcu/setup/tasks/common.py +36 -0
- mlonmcu/setup/tasks/corstone300.py +64 -0
- mlonmcu/setup/tasks/espidf.py +87 -0
- mlonmcu/setup/tasks/etiss.py +147 -0
- mlonmcu/setup/tasks/llvm.py +67 -0
- mlonmcu/setup/tasks/mlif.py +49 -0
- mlonmcu/setup/tasks/muriscvnn.py +166 -0
- mlonmcu/setup/tasks/pulp.py +192 -0
- mlonmcu/setup/tasks/riscv_gcc.py +146 -0
- mlonmcu/setup/tasks/spike.py +190 -0
- mlonmcu/setup/tasks/tf.py +92 -0
- mlonmcu/setup/tasks/tflite.py +59 -0
- mlonmcu/setup/tasks/tflmc.py +141 -0
- mlonmcu/setup/tasks/tvm.py +172 -0
- mlonmcu/setup/tasks/utvmcg.py +96 -0
- mlonmcu/setup/tasks/zephyr.py +119 -0
- mlonmcu/setup/utils.py +374 -0
- mlonmcu/target/__init__.py +37 -0
- mlonmcu/target/_target.py +41 -0
- mlonmcu/target/arm/__init__.py +3 -0
- mlonmcu/target/arm/corstone300.py +235 -0
- mlonmcu/target/arm/util.py +109 -0
- mlonmcu/target/common.py +194 -0
- mlonmcu/target/elf.py +256 -0
- mlonmcu/target/host_x86.py +84 -0
- mlonmcu/target/metrics.py +75 -0
- mlonmcu/target/riscv/__init__.py +7 -0
- mlonmcu/target/riscv/etiss_pulpino.py +462 -0
- mlonmcu/target/riscv/gvsoc_pulp.py +215 -0
- mlonmcu/target/riscv/ovpsim.py +301 -0
- mlonmcu/target/riscv/riscv.py +185 -0
- mlonmcu/target/riscv/riscv_qemu.py +166 -0
- mlonmcu/target/riscv/spike.py +243 -0
- mlonmcu/target/riscv/util.py +134 -0
- mlonmcu/target/target.py +200 -0
- mlonmcu/utils.py +49 -0
- mlonmcu/version.py +21 -0
- mlonmcu-0.3.0.dev0.dist-info/LICENSE +202 -0
- mlonmcu-0.3.0.dev0.dist-info/METADATA +343 -0
- mlonmcu-0.3.0.dev0.dist-info/NOTICE +8 -0
- mlonmcu-0.3.0.dev0.dist-info/RECORD +376 -0
- mlonmcu-0.3.0.dev0.dist-info/WHEEL +5 -0
- mlonmcu-0.3.0.dev0.dist-info/entry_points.txt +3 -0
- mlonmcu-0.3.0.dev0.dist-info/top_level.txt +1 -0
- resources/frameworks/tvm/crt_config/README.md +7 -0
- resources/frameworks/tvm/crt_config/crt_config.h +53 -0
- resources/frameworks/tvm/tuning_records/riscv_cpu_v0.01.log.best +46 -0
- resources/patches/fix_esp32c3_march.patch +20 -0
- resources/patches/pulp_freertos_support.patch +55 -0
- resources/platforms/espidf/micro_speech_esp32devboard/CMakeLists.txt +29 -0
- resources/platforms/espidf/micro_speech_esp32devboard/README.md +70 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/CMakeLists.txt +78 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/Kconfig +76 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_data.c +26 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_model_support/process_input.c +35 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_model_support/process_output.c +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/exit.h +26 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/ml_interface.h +70 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/printing.h +31 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface.c +74 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface_tflm.cc +64 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface_tvm.c +53 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tflite-lib/CMakeLists.txt +140 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tflite-lib/Kconfig +8 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tvm-lib/CMakeLists.txt +66 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tvm-lib/Kconfig +7 -0
- resources/platforms/espidf/micro_speech_esp32devboard/example_test.py +38 -0
- resources/platforms/espidf/micro_speech_esp32devboard/info.txt +9 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/CMakeLists.txt +58 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/audio_provider.cc +193 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/audio_provider.h +49 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/command_responder.cc +53 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/command_responder.h +35 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.cc +132 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.cc.orig +145 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.h +55 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/COPYING +11 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/_kiss_fft_guts.h +168 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/kiss_fft.c +408 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/kiss_fft.h +124 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/tools/kiss_fftr.c +159 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/tools/kiss_fftr.h +46 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/main.cc +63 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/main_functions.cc +204 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/main_functions.h +37 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_features_generator.cc +121 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_features_generator.h +38 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_model_settings.cc +23 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_model_settings.h +43 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/bits.h +102 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft.cc +52 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft.h +50 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft_util.cc +69 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft_util.h +34 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank.c +134 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank.h +63 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank_util.c +220 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank_util.h +50 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend.c +72 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend.h +64 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend_util.c +85 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend_util.h +52 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_common.h +48 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_int16.cc +8 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_int16.h +34 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_lut.c +30 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_lut.h +40 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale.c +83 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale.h +39 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale_util.c +27 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale_util.h +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.c +51 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.h +46 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.c +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.h +50 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.c +56 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.h +47 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control_util.c +92 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control_util.h +57 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window.c +70 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window.h +49 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window_util.c +73 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window_util.h +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/pins.c +14 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/pins.h +30 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/recognize_commands.cc +150 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/recognize_commands.h +173 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/ringbuf.c +333 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/ringbuf.h +74 -0
- resources/platforms/espidf/micro_speech_esp32devboard/sdkconfig.defaults +36 -0
- resources/platforms/espidf/project/CMakeLists.txt +29 -0
- resources/platforms/espidf/project/README.md +70 -0
- resources/platforms/espidf/project/components/mlif/CMakeLists.txt +77 -0
- resources/platforms/espidf/project/components/mlif/Kconfig +76 -0
- resources/platforms/espidf/project/components/mlif/default_data.c +26 -0
- resources/platforms/espidf/project/components/mlif/default_model_support/process_input.c +35 -0
- resources/platforms/espidf/project/components/mlif/default_model_support/process_output.c +45 -0
- resources/platforms/espidf/project/components/mlif/include/exit.h +26 -0
- resources/platforms/espidf/project/components/mlif/include/ml_interface.h +60 -0
- resources/platforms/espidf/project/components/mlif/include/printing.h +31 -0
- resources/platforms/espidf/project/components/mlif/ml_interface.c +54 -0
- resources/platforms/espidf/project/components/mlif/ml_interface_tflm.cc +40 -0
- resources/platforms/espidf/project/components/mlif/ml_interface_tvm.c +40 -0
- resources/platforms/espidf/project/components/tflite-lib/CMakeLists.txt +142 -0
- resources/platforms/espidf/project/components/tflite-lib/Kconfig +8 -0
- resources/platforms/espidf/project/components/tvm-lib/CMakeLists.txt +66 -0
- resources/platforms/espidf/project/components/tvm-lib/Kconfig +7 -0
- resources/platforms/espidf/project/example_test.py +38 -0
- resources/platforms/espidf/project/main/CMakeLists.txt +25 -0
- resources/platforms/espidf/project/main/main.c +57 -0
- resources/platforms/espidf/project/sdkconfig.defaults +26 -0
- resources/platforms/zephyr/project/CMakeLists.txt +22 -0
- resources/platforms/zephyr/project/Kconfig +101 -0
- resources/platforms/zephyr/project/README.rst +33 -0
- resources/platforms/zephyr/project/cmake/AddAllSubdirs.cmake +21 -0
- resources/platforms/zephyr/project/cmake/ChooseTarget.cmake +22 -0
- resources/platforms/zephyr/project/cmake/LinkTFLite.cmake +223 -0
- resources/platforms/zephyr/project/cmake/LinkTVM.cmake +68 -0
- resources/platforms/zephyr/project/cmake/LookupClang.cmake +41 -0
- resources/platforms/zephyr/project/cmake/backends/tflmc.cmake +5 -0
- resources/platforms/zephyr/project/cmake/backends/tflmi.cmake +5 -0
- resources/platforms/zephyr/project/cmake/backends/tvmaot.cmake +10 -0
- resources/platforms/zephyr/project/cmake/backends/tvmaotplus.cmake +10 -0
- resources/platforms/zephyr/project/cmake/backends/tvmcg.cmake +10 -0
- resources/platforms/zephyr/project/cmake/backends/tvmllvm.cmake +8 -0
- resources/platforms/zephyr/project/cmake/backends/tvmrt.cmake +8 -0
- resources/platforms/zephyr/project/cmake/extras.cmake +9 -0
- resources/platforms/zephyr/project/cmake/features/auto_vectorize_gcc.cmake +65 -0
- resources/platforms/zephyr/project/cmake/features/auto_vectorize_llvm.cmake +20 -0
- resources/platforms/zephyr/project/cmake/features/cmsisnn.cmake +86 -0
- resources/platforms/zephyr/project/cmake/features/muriscvnn.cmake +87 -0
- resources/platforms/zephyr/project/cmake/frameworks/tflm.cmake +1 -0
- resources/platforms/zephyr/project/cmake/frameworks/tflm_mlif.cmake +8 -0
- resources/platforms/zephyr/project/cmake/frameworks/tvm.cmake +1 -0
- resources/platforms/zephyr/project/cmake/frameworks/tvm_mlif.cmake +37 -0
- resources/platforms/zephyr/project/lib/CMakeLists.txt +13 -0
- resources/platforms/zephyr/project/lib/drivers/fake_input.c +10 -0
- resources/platforms/zephyr/project/lib/drivers/fake_input.h +8 -0
- resources/platforms/zephyr/project/lib/ml_interface/CMakeLists.txt +31 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_data.c +8 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_model_support/CMakeLists.txt +2 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_model_support/process_input.c +17 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_model_support/process_output.c +27 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface.c +36 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface.h +47 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface_tflm.cc +22 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface_tvm.c +22 -0
- resources/platforms/zephyr/project/lib/support/CMakeLists.txt +2 -0
- resources/platforms/zephyr/project/lib/support/dummy.c +0 -0
- resources/platforms/zephyr/project/lib/support/exit.h +8 -0
- resources/platforms/zephyr/project/lib/support/printing.h +11 -0
- resources/platforms/zephyr/project/lib/support/quantize.h +23 -0
- resources/platforms/zephyr/project/lib/targets/corstone300.c +62 -0
- resources/platforms/zephyr/project/lib/targets/default.c +2 -0
- resources/platforms/zephyr/project/lib/targets/etiss_pulpino.c +112 -0
- resources/platforms/zephyr/project/lib/targets/generic_riscv.c +112 -0
- resources/platforms/zephyr/project/lib/targets/riscv_qemu.c +112 -0
- resources/platforms/zephyr/project/lib/targets/target.h +2 -0
- resources/platforms/zephyr/project/prj.conf +11 -0
- resources/platforms/zephyr/project/sample.yaml +19 -0
- resources/platforms/zephyr/project/src/main.c +71 -0
- resources/platforms/zephyr/project2/CMakeLists.txt +72 -0
- resources/platforms/zephyr/project2/Kconfig +101 -0
- resources/platforms/zephyr/project2/README.rst +33 -0
- resources/platforms/zephyr/project2/cmake/AddAllSubdirs.cmake +21 -0
- resources/platforms/zephyr/project2/cmake/ChooseTarget.cmake +22 -0
- resources/platforms/zephyr/project2/cmake/LinkTFLite.cmake +223 -0
- resources/platforms/zephyr/project2/cmake/LinkTVM.cmake +68 -0
- resources/platforms/zephyr/project2/cmake/LookupClang.cmake +41 -0
- resources/platforms/zephyr/project2/cmake/backends/tflmc.cmake +5 -0
- resources/platforms/zephyr/project2/cmake/backends/tflmi.cmake +5 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmaot.cmake +10 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmaotplus.cmake +10 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmcg.cmake +10 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmllvm.cmake +8 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmrt.cmake +8 -0
- resources/platforms/zephyr/project2/cmake/extras.cmake +9 -0
- resources/platforms/zephyr/project2/cmake/features/auto_vectorize_gcc.cmake +65 -0
- resources/platforms/zephyr/project2/cmake/features/auto_vectorize_llvm.cmake +20 -0
- resources/platforms/zephyr/project2/cmake/features/cmsisnn.cmake +86 -0
- resources/platforms/zephyr/project2/cmake/features/muriscvnn.cmake +87 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tflm.cmake +1 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tflm_mlif.cmake +8 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tvm.cmake +1 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tvm_mlif.cmake +37 -0
- resources/platforms/zephyr/project2/default_data.c +8 -0
- resources/platforms/zephyr/project2/default_model_support/CMakeLists.txt +3 -0
- resources/platforms/zephyr/project2/default_model_support/process_input.c +17 -0
- resources/platforms/zephyr/project2/default_model_support/process_output.c +27 -0
- resources/platforms/zephyr/project2/lib/CMakeLists.txt +13 -0
- resources/platforms/zephyr/project2/lib/drivers/fake_input.c +10 -0
- resources/platforms/zephyr/project2/lib/drivers/fake_input.h +8 -0
- resources/platforms/zephyr/project2/lib/support/CMakeLists.txt +2 -0
- resources/platforms/zephyr/project2/lib/support/dummy.c +0 -0
- resources/platforms/zephyr/project2/lib/support/exit.h +8 -0
- resources/platforms/zephyr/project2/lib/support/printing.h +11 -0
- resources/platforms/zephyr/project2/lib/support/quantize.h +23 -0
- resources/platforms/zephyr/project2/lib/targets/corstone300.c +62 -0
- resources/platforms/zephyr/project2/lib/targets/default.c +2 -0
- resources/platforms/zephyr/project2/lib/targets/etiss_pulpino.c +112 -0
- resources/platforms/zephyr/project2/lib/targets/generic_riscv.c +112 -0
- resources/platforms/zephyr/project2/lib/targets/riscv_qemu.c +112 -0
- resources/platforms/zephyr/project2/lib/targets/target.h +2 -0
- resources/platforms/zephyr/project2/ml_interface.c +36 -0
- resources/platforms/zephyr/project2/ml_interface.h +47 -0
- resources/platforms/zephyr/project2/ml_interface_tflm.cc +22 -0
- resources/platforms/zephyr/project2/ml_interface_tvm.c +22 -0
- resources/platforms/zephyr/project2/prj.conf +13 -0
- resources/platforms/zephyr/project2/sample.yaml +19 -0
- resources/platforms/zephyr/project2/settings.json +6 -0
- resources/platforms/zephyr/project2/src/main.c +35 -0
- resources/pycharm/.run/README.md +73 -0
- resources/pycharm/.run/step1_ init env.run.xml +24 -0
- resources/pycharm/.run/step2_ setup.run.xml +25 -0
- resources/pycharm/.run/step3_ run resnet on pulpxpulpissimo.run.xml +25 -0
- resources/templates/default.yml.j2 +258 -0
- resources/templates/dev.yml.j2 +212 -0
- resources/templates/minimal.yml.j2 +234 -0
- resources/templates/phi.yml.j2 +282 -0
- resources/templates/pulp.yml.j2 +267 -0
- resources/templates/research.yml.j2 +237 -0
- 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
|