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,235 @@
|
|
|
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
|
+
"""MLonMCU Corstone300 Target definitions"""
|
|
20
|
+
|
|
21
|
+
import os
|
|
22
|
+
import re
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
from mlonmcu.logging import get_logger
|
|
26
|
+
from mlonmcu.feature.features import SUPPORTED_TVM_BACKENDS
|
|
27
|
+
from mlonmcu.config import str2bool
|
|
28
|
+
from mlonmcu.target import Target
|
|
29
|
+
from mlonmcu.target.common import cli, execute
|
|
30
|
+
from mlonmcu.target.metrics import Metrics
|
|
31
|
+
from .util import resolve_cpu_features
|
|
32
|
+
|
|
33
|
+
logger = get_logger()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class Corstone300Target(Target):
|
|
37
|
+
"""Target using an ARM FVP (fixed virtual platform) based on a Cortex M55 with EthosU support"""
|
|
38
|
+
|
|
39
|
+
FEATURES = ["ethosu", "arm_mvei", "arm_dsp"]
|
|
40
|
+
|
|
41
|
+
DEFAULTS = {
|
|
42
|
+
**Target.DEFAULTS,
|
|
43
|
+
"model": "cortex-m55", # Options: cortex-m{0,0plus,1,3,4,7,23,33,35p,55} (Frequency is fixed at 25MHz)
|
|
44
|
+
# Warning: FVP is still M55 based!
|
|
45
|
+
"timeout_sec": 0, # disabled
|
|
46
|
+
"enable_ethosu": False,
|
|
47
|
+
"enable_fpu": True,
|
|
48
|
+
"enable_mvei": False, # unused
|
|
49
|
+
"enable_dsp": False, # unused
|
|
50
|
+
"ethosu_num_macs": 256,
|
|
51
|
+
"extra_args": "",
|
|
52
|
+
}
|
|
53
|
+
REQUIRED = [
|
|
54
|
+
"corstone300.exe",
|
|
55
|
+
"cmsisnn.dir",
|
|
56
|
+
"arm_gcc.install_dir",
|
|
57
|
+
] # Actually cmsisnn.dir points to the root CMSIS_5 directory
|
|
58
|
+
|
|
59
|
+
def __init__(self, name="corstone300", features=None, config=None):
|
|
60
|
+
super().__init__(name, features=features, config=config)
|
|
61
|
+
|
|
62
|
+
@property
|
|
63
|
+
def model(self):
|
|
64
|
+
return self.config["model"]
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def enable_ethosu(self):
|
|
68
|
+
value = self.config["enable_ethosu"]
|
|
69
|
+
return str2bool(value) if not isinstance(value, (bool, int)) else value
|
|
70
|
+
|
|
71
|
+
@property
|
|
72
|
+
def enable_fpu(self):
|
|
73
|
+
value = self.config["enable_fpu"]
|
|
74
|
+
return str2bool(value) if not isinstance(value, (bool, int)) else value
|
|
75
|
+
|
|
76
|
+
@property
|
|
77
|
+
def enable_mvei(self):
|
|
78
|
+
value = self.config["enable_mvei"]
|
|
79
|
+
return str2bool(value) if not isinstance(value, (bool, int)) else value
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def enable_dsp(self):
|
|
83
|
+
value = self.config["enable_dsp"]
|
|
84
|
+
return str2bool(value) if not isinstance(value, (bool, int)) else value
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def ethosu_num_macs(self):
|
|
88
|
+
return int(self.config["ethosu_num_macs"])
|
|
89
|
+
|
|
90
|
+
@property
|
|
91
|
+
def fvp_exe(self):
|
|
92
|
+
return Path(self.config["corstone300.exe"])
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def gcc_prefix(self):
|
|
96
|
+
return str(self.config["arm_gcc.install_dir"])
|
|
97
|
+
|
|
98
|
+
@property
|
|
99
|
+
def cmsisnn_dir(self):
|
|
100
|
+
return Path(self.config["cmsisnn.dir"])
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def extra_args(self):
|
|
104
|
+
return str(self.config["extra_args"])
|
|
105
|
+
|
|
106
|
+
@property
|
|
107
|
+
def timeout_sec(self):
|
|
108
|
+
# 0 = off
|
|
109
|
+
return int(self.config["timeout_sec"])
|
|
110
|
+
|
|
111
|
+
def get_default_fvp_args(self):
|
|
112
|
+
return [
|
|
113
|
+
"-C",
|
|
114
|
+
"mps3_board.visualisation.disable-visualisation=1",
|
|
115
|
+
"-C",
|
|
116
|
+
"mps3_board.telnetterminal0.start_telnet=0",
|
|
117
|
+
"-C",
|
|
118
|
+
'mps3_board.uart0.out_file="-"',
|
|
119
|
+
"-C",
|
|
120
|
+
"mps3_board.uart0.unbuffered_output=1",
|
|
121
|
+
"-C",
|
|
122
|
+
'mps3_board.uart0.shutdown_tag="EXITTHESIM"',
|
|
123
|
+
"-C",
|
|
124
|
+
"cpu0.CFGDTCMSZ=15", # ?
|
|
125
|
+
"-C",
|
|
126
|
+
"cpu0.CFGITCMSZ=15", # ?
|
|
127
|
+
"-C",
|
|
128
|
+
f"cpu0.FPU={int(self.enable_fpu)}",
|
|
129
|
+
"-C",
|
|
130
|
+
"cpu0.MVE={}".format(
|
|
131
|
+
2 if self.enable_mvei and self.enable_fpu else (1 if self.enable_mvei and not self.enable_fpu else 0)
|
|
132
|
+
),
|
|
133
|
+
]
|
|
134
|
+
|
|
135
|
+
def get_ethosu_fvp_args(self):
|
|
136
|
+
return [
|
|
137
|
+
"-C",
|
|
138
|
+
f"ethosu.num_macs={self.ethosu_num_macs}",
|
|
139
|
+
"-C",
|
|
140
|
+
'ethosu.extra_args="--fast"',
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
def exec(self, program, *args, cwd=os.getcwd(), **kwargs):
|
|
144
|
+
"""Use target to execute a executable with given arguments"""
|
|
145
|
+
fvp_args = []
|
|
146
|
+
fvp_args.extend(self.get_default_fvp_args())
|
|
147
|
+
if self.enable_ethosu:
|
|
148
|
+
fvp_args.extend(self.get_ethosu_fvp_args())
|
|
149
|
+
if self.timeout_sec > 0:
|
|
150
|
+
fvp_args.extend(["--timelimit", str(self.timeout_sec)])
|
|
151
|
+
if len(self.extra_args) > 0:
|
|
152
|
+
fvp_args.extend(self.extra_args.split(" "))
|
|
153
|
+
|
|
154
|
+
if "ethosu" in [feature.name for feature in self.features]: # TODO: remove this
|
|
155
|
+
raise NotImplementedError
|
|
156
|
+
|
|
157
|
+
ret = execute(
|
|
158
|
+
self.fvp_exe.resolve(),
|
|
159
|
+
*fvp_args,
|
|
160
|
+
program,
|
|
161
|
+
*args,
|
|
162
|
+
cwd=cwd,
|
|
163
|
+
**kwargs,
|
|
164
|
+
)
|
|
165
|
+
return ret
|
|
166
|
+
|
|
167
|
+
def parse_stdout(self, out, handle_exit=None):
|
|
168
|
+
exit_match = re.search(r"Application exit code: (.*)\.", out)
|
|
169
|
+
if exit_match:
|
|
170
|
+
exit_code = int(exit_match.group(1))
|
|
171
|
+
if handle_exit is not None:
|
|
172
|
+
exit_code = handle_exit(exit_code)
|
|
173
|
+
if exit_code != 0:
|
|
174
|
+
logger.error("Execution failed - " + out)
|
|
175
|
+
raise RuntimeError(f"unexpected exit code: {exit_code}")
|
|
176
|
+
cpu_cycles = re.search(r"Total Cycles: (.*)", out)
|
|
177
|
+
|
|
178
|
+
if not cpu_cycles:
|
|
179
|
+
if exit == 0:
|
|
180
|
+
logger.warning("unexpected script output (cycles)")
|
|
181
|
+
cycles = None
|
|
182
|
+
else:
|
|
183
|
+
cycles = int(float(cpu_cycles.group(1)))
|
|
184
|
+
# mips = None # TODO: parse mips?
|
|
185
|
+
return cycles
|
|
186
|
+
|
|
187
|
+
def get_metrics(self, elf, directory, *args, handle_exit=None):
|
|
188
|
+
out = ""
|
|
189
|
+
if self.print_outputs:
|
|
190
|
+
out += self.exec(elf, *args, cwd=directory, live=True, handle_exit=handle_exit)
|
|
191
|
+
else:
|
|
192
|
+
out += self.exec(
|
|
193
|
+
elf, *args, cwd=directory, live=False, print_func=lambda *args, **kwargs: None, handle_exit=handle_exit
|
|
194
|
+
)
|
|
195
|
+
cycles = self.parse_stdout(out, handle_exit=handle_exit)
|
|
196
|
+
|
|
197
|
+
metrics = Metrics()
|
|
198
|
+
metrics.add("Cycles", cycles)
|
|
199
|
+
|
|
200
|
+
return metrics, out, []
|
|
201
|
+
|
|
202
|
+
def get_platform_defs(self, platform):
|
|
203
|
+
ret = super().get_platform_defs(platform)
|
|
204
|
+
ret["CMSIS_PATH"] = self.cmsisnn_dir
|
|
205
|
+
ret["ARM_COMPILER_PREFIX"] = self.gcc_prefix
|
|
206
|
+
cpu, float_abi, fpu = resolve_cpu_features(
|
|
207
|
+
self.model, enable_fp=self.enable_fpu, enable_dsp=self.enable_dsp, enable_mve=self.enable_mvei
|
|
208
|
+
)
|
|
209
|
+
ret["ARM_CPU"] = cpu
|
|
210
|
+
ret["ARM_FLOAT_ABI"] = float_abi
|
|
211
|
+
ret["ARM_FPU"] = fpu
|
|
212
|
+
return ret
|
|
213
|
+
|
|
214
|
+
def get_arch(self):
|
|
215
|
+
return "arm" # TODO: use proper mapping (v6, v7, v8, v8.1...)
|
|
216
|
+
|
|
217
|
+
def get_backend_config(self, backend):
|
|
218
|
+
if backend in SUPPORTED_TVM_BACKENDS:
|
|
219
|
+
ret = {
|
|
220
|
+
"target_device": "arm_cpu",
|
|
221
|
+
# "target_march": self.get_arch(),
|
|
222
|
+
"target_model": "unknown",
|
|
223
|
+
"target_mtriple": "arm-none-eabi",
|
|
224
|
+
"target_mcpu": self.model,
|
|
225
|
+
# "target_mattr": "?",
|
|
226
|
+
# "target_mabi": self.abi,
|
|
227
|
+
}
|
|
228
|
+
if self.enable_dsp:
|
|
229
|
+
ret.update({"desired_layout": "NHWC:HWOI"}) # Not yet supported by upstream TVMC
|
|
230
|
+
return ret
|
|
231
|
+
return {}
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
if __name__ == "__main__":
|
|
235
|
+
cli(target=Corstone300Target)
|
|
@@ -0,0 +1,109 @@
|
|
|
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
|
+
"""MLonMCU ARM Cortex-M utilities"""
|
|
20
|
+
|
|
21
|
+
DSP_TARGETS = ["cortex-m4", "cortex-m7", "cortex-m33", "cortex-m35p", "cortex-m55"]
|
|
22
|
+
|
|
23
|
+
MVE_TARGETS = ["cortex-m55"]
|
|
24
|
+
|
|
25
|
+
FP_TARGETS = ["cortex-m4", "cortex-m7", "cortex-m33", "cortex-m35p", "cortex-m55"]
|
|
26
|
+
FP_DP_TARGETS = ["cortex-m7", "cortex-m55"]
|
|
27
|
+
|
|
28
|
+
ALLOWED_ATTRS = {
|
|
29
|
+
"cortex-m0": [],
|
|
30
|
+
"cortex-m0plus": [],
|
|
31
|
+
"cortex-m1": [],
|
|
32
|
+
"cortex-m3": [],
|
|
33
|
+
"cortex-m4": ["+nofp"],
|
|
34
|
+
"cortex-m7": ["+nofp", "+nofp.dp"],
|
|
35
|
+
"cortex-m23": [],
|
|
36
|
+
"cortex-m33": ["+nodsp", "+nofp"],
|
|
37
|
+
"cortex-m35p": ["+nodsp", "+nofp"],
|
|
38
|
+
"cortex-m55": ["+nomve", "+nomve.fp", "+nodsp", "+nofp"],
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def resolve_cpu_features(model, enable_fp=None, enable_fp_dp=None, enable_dsp=None, enable_mve=None):
|
|
43
|
+
cpu = model
|
|
44
|
+
fpu = "auto"
|
|
45
|
+
|
|
46
|
+
splitted = cpu.split("+")
|
|
47
|
+
base = splitted[0]
|
|
48
|
+
attrs = [f"+{attr}" for attr in splitted[1:]]
|
|
49
|
+
|
|
50
|
+
if enable_fp is None:
|
|
51
|
+
enable_fp = base in FP_TARGETS and ("+nofp" not in ALLOWED_ATTRS[base] or "+nofp" not in attrs)
|
|
52
|
+
if enable_fp_dp is None:
|
|
53
|
+
if enable_fp:
|
|
54
|
+
enable_fp_dp = base in FP_DP_TARGETS and ("+nofp.dp" not in ALLOWED_ATTRS[base] or "+nofp.dp" not in attrs)
|
|
55
|
+
else:
|
|
56
|
+
enable_fp_dp = False
|
|
57
|
+
if enable_dsp is None:
|
|
58
|
+
enable_dsp = base in DSP_TARGETS and ("+nodsp" not in ALLOWED_ATTRS[base] or "+nodsp" not in attrs)
|
|
59
|
+
if enable_mve is None:
|
|
60
|
+
enable_mve = base in MVE_TARGETS and ("+nomve" not in ALLOWED_ATTRS[base] or "+nomve" not in attrs)
|
|
61
|
+
|
|
62
|
+
float_abi = "hard" if enable_fp else "soft"
|
|
63
|
+
|
|
64
|
+
if enable_fp_dp:
|
|
65
|
+
assert enable_fp, "ARM double precision floating point supports requires fp extension"
|
|
66
|
+
if enable_mve:
|
|
67
|
+
assert enable_dsp, "ARM MVEI extension implies DSP extension"
|
|
68
|
+
|
|
69
|
+
if len(attrs) > 0:
|
|
70
|
+
# User defined features explicitly, check for validity
|
|
71
|
+
if enable_fp and ("+nofp" not in ALLOWED_ATTRS[base] or "+nofp" not in attrs):
|
|
72
|
+
assert base in FP_TARGETS, f"Chosen cpu '{cpu}' does not support floating point"
|
|
73
|
+
if enable_fp_dp and ("+nofp.dp" not in ALLOWED_ATTRS[base] or "+nofp.dp" not in attrs):
|
|
74
|
+
assert base in FP_DP_TARGETS, f"Chosen cpu '{cpu}' does not support double precison floating point"
|
|
75
|
+
if enable_dsp and ("+nodsp" not in ALLOWED_ATTRS[base] or "+nodsp" not in attrs):
|
|
76
|
+
assert base in DSP_TARGETS, f"Chosen cpu '{cpu}' does not support dsp instructions"
|
|
77
|
+
if enable_mve and ("+nomve" not in ALLOWED_ATTRS[base] or "+nomve" not in attrs):
|
|
78
|
+
assert base in MVE_TARGETS, f"Chosen cpu '{cpu}' does not support mve (helium) instructions"
|
|
79
|
+
else:
|
|
80
|
+
# Define features automatically
|
|
81
|
+
if enable_fp:
|
|
82
|
+
assert base in FP_TARGETS, f"Chosen cpu '{cpu}' does not support floating point"
|
|
83
|
+
else:
|
|
84
|
+
if base in FP_TARGETS:
|
|
85
|
+
assert "+nofp" in ALLOWED_ATTRS[base], f"Floating point support can not be turned off for cpu '{cpu}'"
|
|
86
|
+
attrs.append("+nofp")
|
|
87
|
+
if enable_fp_dp:
|
|
88
|
+
assert base in FP_DP_TARGETS, f"Chosen cpu '{cpu}' does not support double precision floating point"
|
|
89
|
+
else:
|
|
90
|
+
if base in FP_DP_TARGETS and enable_fp:
|
|
91
|
+
assert (
|
|
92
|
+
"+nofp.dp" in ALLOWED_ATTRS[base]
|
|
93
|
+
), f"Double precision floating point support can not be turned off for cpu '{cpu}'"
|
|
94
|
+
attrs.append("+nofp.dp")
|
|
95
|
+
if enable_dsp:
|
|
96
|
+
assert base in DSP_TARGETS, f"Chosen cpu '{cpu}' does not support dsp instructions"
|
|
97
|
+
else:
|
|
98
|
+
if base in DSP_TARGETS:
|
|
99
|
+
assert "+nodsp" in ALLOWED_ATTRS[base], f"DSP extension can not be turned off for cpu '{cpu}'"
|
|
100
|
+
attrs.append("+nodsp")
|
|
101
|
+
if enable_mve:
|
|
102
|
+
assert base in MVE_TARGETS, f"Chosen cpu '{cpu}' does not support mve (helium) instructions"
|
|
103
|
+
else:
|
|
104
|
+
if base in MVE_TARGETS:
|
|
105
|
+
assert "+nomve" in ALLOWED_ATTRS[base], f"MVE (helium) extension can not be turned of for cpu '{cpu}'"
|
|
106
|
+
attrs.append("+nomve")
|
|
107
|
+
|
|
108
|
+
cpu = "".join([base] + attrs)
|
|
109
|
+
return cpu, float_abi, fpu
|
mlonmcu/target/common.py
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
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
|
+
"""Helper functions used by MLonMCU targets"""
|
|
20
|
+
|
|
21
|
+
import subprocess
|
|
22
|
+
import argparse
|
|
23
|
+
from typing import List, Callable
|
|
24
|
+
|
|
25
|
+
from mlonmcu.cli.helper.parse import extract_feature_names, extract_config
|
|
26
|
+
from mlonmcu.feature.type import FeatureType
|
|
27
|
+
from mlonmcu.feature.features import get_available_features
|
|
28
|
+
from mlonmcu.logging import get_logger
|
|
29
|
+
|
|
30
|
+
logger = get_logger()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# TODO: merge together with mlonmcu.setup.utils.exec_getout
|
|
34
|
+
def execute(
|
|
35
|
+
*args: List[str],
|
|
36
|
+
ignore_output: bool = False,
|
|
37
|
+
live: bool = False,
|
|
38
|
+
print_func: Callable = print,
|
|
39
|
+
handle_exit=None,
|
|
40
|
+
err_func: Callable = logger.error,
|
|
41
|
+
**kwargs,
|
|
42
|
+
) -> str:
|
|
43
|
+
"""Wrapper for running a program in a subprocess.
|
|
44
|
+
|
|
45
|
+
Parameters
|
|
46
|
+
----------
|
|
47
|
+
args : list
|
|
48
|
+
The actual command.
|
|
49
|
+
ignore_output : bool
|
|
50
|
+
Do not get the stdout and stderr or the subprocess.
|
|
51
|
+
live : bool
|
|
52
|
+
Print the output line by line instead of only at the end.
|
|
53
|
+
print_func : Callable
|
|
54
|
+
Function which should be used to print sysout messages.
|
|
55
|
+
err_func : Callable
|
|
56
|
+
Function which should be used to print errors.
|
|
57
|
+
kwargs: dict
|
|
58
|
+
Arbitrary keyword arguments passed through to the subprocess.
|
|
59
|
+
|
|
60
|
+
Returns
|
|
61
|
+
-------
|
|
62
|
+
out : str
|
|
63
|
+
The command line output of the command
|
|
64
|
+
"""
|
|
65
|
+
logger.debug("- Executing: %s", str(args))
|
|
66
|
+
if ignore_output:
|
|
67
|
+
assert not live
|
|
68
|
+
subprocess.run(args, **kwargs, check=True)
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
out_str = ""
|
|
72
|
+
if live:
|
|
73
|
+
with subprocess.Popen(
|
|
74
|
+
args,
|
|
75
|
+
**kwargs,
|
|
76
|
+
stdout=subprocess.PIPE,
|
|
77
|
+
stderr=subprocess.STDOUT,
|
|
78
|
+
) as process:
|
|
79
|
+
for line in process.stdout:
|
|
80
|
+
new_line = line.decode(errors="replace")
|
|
81
|
+
out_str = out_str + new_line
|
|
82
|
+
print_func(new_line.replace("\n", ""))
|
|
83
|
+
exit_code = None
|
|
84
|
+
while exit_code is None:
|
|
85
|
+
exit_code = process.poll()
|
|
86
|
+
if handle_exit is not None:
|
|
87
|
+
exit_code = handle_exit(exit_code)
|
|
88
|
+
assert exit_code == 0, "The process returned an non-zero exit code {}! (CMD: `{}`)".format(
|
|
89
|
+
exit_code, " ".join(list(map(str, args)))
|
|
90
|
+
)
|
|
91
|
+
else:
|
|
92
|
+
p = subprocess.Popen([i for i in args], **kwargs, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
93
|
+
out_str = p.communicate()[0].decode(errors="replace")
|
|
94
|
+
exit_code = p.poll()
|
|
95
|
+
print_func(out_str)
|
|
96
|
+
if handle_exit is not None:
|
|
97
|
+
exit_code = handle_exit(exit_code)
|
|
98
|
+
if exit_code != 0:
|
|
99
|
+
err_func(out_str)
|
|
100
|
+
assert exit_code == 0, "The process returned an non-zero exit code {}! (CMD: `{}`)".format(
|
|
101
|
+
exit_code, " ".join(list(map(str, args)))
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
return out_str
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def add_common_options(parser: argparse.ArgumentParser, target):
|
|
108
|
+
"""Add a set of common options to a command line parser.
|
|
109
|
+
|
|
110
|
+
Parameters
|
|
111
|
+
----------
|
|
112
|
+
parser : argparse.ArgumentParser
|
|
113
|
+
The command line parser
|
|
114
|
+
"""
|
|
115
|
+
target_group = parser.add_argument_group("target options")
|
|
116
|
+
target_group.add_argument(
|
|
117
|
+
"-f",
|
|
118
|
+
"--feature",
|
|
119
|
+
type=str,
|
|
120
|
+
metavar="FEATURE",
|
|
121
|
+
action="append",
|
|
122
|
+
choices=target.FEATURES, # TODO: get from selected target?
|
|
123
|
+
help="Enabled features for target (Choices: %(choices)s)",
|
|
124
|
+
)
|
|
125
|
+
target_group.add_argument(
|
|
126
|
+
"-c",
|
|
127
|
+
"--config",
|
|
128
|
+
metavar="KEY=VALUE",
|
|
129
|
+
nargs="+",
|
|
130
|
+
action="append",
|
|
131
|
+
help="Custom target config as key-value pairs",
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def init_target_features(names, config):
|
|
136
|
+
features = []
|
|
137
|
+
for name in names:
|
|
138
|
+
feature_classes = get_available_features(feature_type=FeatureType.TARGET, feature_name=name)
|
|
139
|
+
for feature_class in feature_classes:
|
|
140
|
+
features.append(feature_class(config=config))
|
|
141
|
+
return features
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def cli(target, args: List[str] = None):
|
|
145
|
+
"""Utility to handle the command line api for targets.
|
|
146
|
+
|
|
147
|
+
Parameters
|
|
148
|
+
----------
|
|
149
|
+
target : Target
|
|
150
|
+
The target to be used.
|
|
151
|
+
args : list
|
|
152
|
+
Interface to pass arguments to the command line parser from test functions.
|
|
153
|
+
"""
|
|
154
|
+
parser = argparse.ArgumentParser(description="ML on MCU Target")
|
|
155
|
+
subparsers = parser.add_subparsers(dest="subcommand")
|
|
156
|
+
exec_parser = subparsers.add_parser("exec", description="Run program with target")
|
|
157
|
+
|
|
158
|
+
def _handle_execute(args):
|
|
159
|
+
config, _ = extract_config(args)
|
|
160
|
+
feature_names, _ = extract_feature_names(args)
|
|
161
|
+
features = init_target_features(feature_names, config)
|
|
162
|
+
target_inst = target(features=features, config=config)
|
|
163
|
+
target_inst.exec(args.program, *args.extra_args, live=True)
|
|
164
|
+
|
|
165
|
+
exec_parser.set_defaults(func=_handle_execute)
|
|
166
|
+
add_common_options(exec_parser, target)
|
|
167
|
+
exec_group = exec_parser.add_argument_group("Exec options")
|
|
168
|
+
exec_group.add_argument("program", metavar="EXE", type=str, help="The program which should be executed")
|
|
169
|
+
exec_group.add_argument("extra_args", metavar="ARG", nargs="*", help="Additional arguments")
|
|
170
|
+
inspect_parser = subparsers.add_parser("inspect", description="Inspect program with target")
|
|
171
|
+
|
|
172
|
+
def _handle_inspect(args):
|
|
173
|
+
config, _ = extract_config(args)
|
|
174
|
+
feature_names, _ = extract_feature_names(args)
|
|
175
|
+
features = init_target_features(feature_names, config)
|
|
176
|
+
target_inst = target(features=features, config=config)
|
|
177
|
+
target_inst.inspect(args.program)
|
|
178
|
+
|
|
179
|
+
inspect_parser.set_defaults(func=_handle_inspect)
|
|
180
|
+
add_common_options(inspect_parser, target)
|
|
181
|
+
inspect_group = inspect_parser.add_argument_group("Inspect options")
|
|
182
|
+
inspect_group.add_argument("program", metavar="EXE", type=str, help="The program which should be inspected")
|
|
183
|
+
if args:
|
|
184
|
+
args = parser.parse_args(args)
|
|
185
|
+
else:
|
|
186
|
+
args = parser.parse_args()
|
|
187
|
+
if hasattr(args, "func"):
|
|
188
|
+
args.func(args)
|
|
189
|
+
else:
|
|
190
|
+
raise RuntimeError("Invalid command. For usage details use '--help'!")
|
|
191
|
+
|
|
192
|
+
# Argparge
|
|
193
|
+
# Env Vars
|
|
194
|
+
# MLONMCU Context (can be disabled via --plain)
|