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