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,385 @@
|
|
|
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
|
+
import sys
|
|
20
|
+
|
|
21
|
+
from .backend import TFLMBackend
|
|
22
|
+
from mlonmcu.config import str2bool
|
|
23
|
+
from mlonmcu.flow.backend import main
|
|
24
|
+
from mlonmcu.artifact import Artifact, ArtifactFormat
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# TODO: move to another place
|
|
28
|
+
def make_hex_array(data):
|
|
29
|
+
out = ""
|
|
30
|
+
for x in data:
|
|
31
|
+
out += "0x{:02x}, ".format(x)
|
|
32
|
+
return out
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class TFLMICodegen:
|
|
36
|
+
def __init__(self):
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
def makeCustomOpPrototypes(self, custom_ops):
|
|
40
|
+
out = "namespace tflite {\n"
|
|
41
|
+
for op in custom_ops:
|
|
42
|
+
op_name = op
|
|
43
|
+
op_reg = op
|
|
44
|
+
if "|" in op:
|
|
45
|
+
op_name, op_reg = op.split("|")[:2]
|
|
46
|
+
out += "extern TfLiteRegistration *" + op_reg + "(void);\n"
|
|
47
|
+
out += "} //namespace tflite\n"
|
|
48
|
+
return out
|
|
49
|
+
|
|
50
|
+
def make_op_registrations(self, ops, custom_ops):
|
|
51
|
+
out = (
|
|
52
|
+
"static tflite::MicroMutableOpResolver<" + str(len(ops) + len(custom_ops)) + "> resolver(error_reporter);\n"
|
|
53
|
+
)
|
|
54
|
+
for op in ops:
|
|
55
|
+
out += (
|
|
56
|
+
" if (resolver.Add"
|
|
57
|
+
+ op
|
|
58
|
+
+ '() != kTfLiteOk) {\n error_reporter->Report("Add'
|
|
59
|
+
+ op
|
|
60
|
+
+ '() failed");\n exit(1);\n }\n'
|
|
61
|
+
)
|
|
62
|
+
for op in custom_ops:
|
|
63
|
+
op_name = op
|
|
64
|
+
op_reg = op
|
|
65
|
+
if "|" in op:
|
|
66
|
+
op_name, op_reg = op.split("|")[:2]
|
|
67
|
+
out += (
|
|
68
|
+
' if (resolver.AddCustom("'
|
|
69
|
+
+ op_name
|
|
70
|
+
+ '", tflite::'
|
|
71
|
+
+ op_reg
|
|
72
|
+
+ '()) != kTfLiteOk) {\n error_reporter->Report("AddCustom'
|
|
73
|
+
+ op_name
|
|
74
|
+
+ '() failed");\n exit(1);\n }\n'
|
|
75
|
+
)
|
|
76
|
+
return out
|
|
77
|
+
|
|
78
|
+
def generate_header(self, prefix="model"):
|
|
79
|
+
upper_prefix = prefix.upper()
|
|
80
|
+
code = f"""
|
|
81
|
+
// This file is generated. Do not edit.
|
|
82
|
+
#ifndef {upper_prefix}_GEN_H
|
|
83
|
+
#define {upper_prefix}_GEN_H
|
|
84
|
+
|
|
85
|
+
#include <stddef.h>
|
|
86
|
+
|
|
87
|
+
void {prefix}_init();
|
|
88
|
+
void *{prefix}_input_ptr(int index);
|
|
89
|
+
size_t {prefix}_input_size(int index);
|
|
90
|
+
size_t {prefix}_inputs();
|
|
91
|
+
void {prefix}_invoke();
|
|
92
|
+
void *{prefix}_output_ptr(int index);
|
|
93
|
+
size_t {prefix}_output_size(int index);
|
|
94
|
+
size_t {prefix}_outputs();
|
|
95
|
+
|
|
96
|
+
#endif // {upper_prefix}_GEN_H
|
|
97
|
+
"""
|
|
98
|
+
return code
|
|
99
|
+
|
|
100
|
+
def generate_wrapper(
|
|
101
|
+
self,
|
|
102
|
+
model,
|
|
103
|
+
prefix="model",
|
|
104
|
+
header=True,
|
|
105
|
+
legacy=False,
|
|
106
|
+
debug_arena=False,
|
|
107
|
+
arena_size=None,
|
|
108
|
+
ops=None,
|
|
109
|
+
custom_ops=None, # TODO: implement
|
|
110
|
+
registrations=None, # TODO: implement
|
|
111
|
+
ops_resolver=None, # TODO: implement
|
|
112
|
+
):
|
|
113
|
+
arena_size = arena_size if arena_size is not None else TFLMIBackend.DEFAULTS["arena_size"]
|
|
114
|
+
ops = ops if ops else TFLMIBackend.DEFAULTS["ops"]
|
|
115
|
+
if not isinstance(ops, list):
|
|
116
|
+
assert isinstance(ops, str)
|
|
117
|
+
if "," in ops:
|
|
118
|
+
ops = ops.split(",")
|
|
119
|
+
else:
|
|
120
|
+
ops = [ops]
|
|
121
|
+
if len(ops) > 0:
|
|
122
|
+
|
|
123
|
+
def convert_op_name(op):
|
|
124
|
+
new_name = ""
|
|
125
|
+
prev = None
|
|
126
|
+
for i, c in enumerate(op):
|
|
127
|
+
if c == "_":
|
|
128
|
+
prev = c
|
|
129
|
+
continue
|
|
130
|
+
elif prev is None:
|
|
131
|
+
new_name += c
|
|
132
|
+
elif (prev == "_") or prev.isdigit():
|
|
133
|
+
new_name += c
|
|
134
|
+
elif prev.isupper():
|
|
135
|
+
new_name += c.lower()
|
|
136
|
+
elif c.islower():
|
|
137
|
+
new_name += c
|
|
138
|
+
prev = c
|
|
139
|
+
return new_name
|
|
140
|
+
|
|
141
|
+
op_names = list(map(convert_op_name, ops))
|
|
142
|
+
ops = op_names
|
|
143
|
+
custom_ops = custom_ops if custom_ops else TFLMIBackend.DEFAULTS["custom_ops"]
|
|
144
|
+
if len(custom_ops) > 0:
|
|
145
|
+
raise NotImplementedError
|
|
146
|
+
registrations = (
|
|
147
|
+
registrations if registrations else TFLMIBackend.DEFAULTS["registrations"]
|
|
148
|
+
) # TODO: Dict or list?
|
|
149
|
+
if len(registrations) > 0:
|
|
150
|
+
raise NotImplementedError
|
|
151
|
+
ops_resolver = ops_resolver if ops_resolver else TFLMIBackend.DEFAULTS["ops_resolver"]
|
|
152
|
+
if ops_resolver != "mutable":
|
|
153
|
+
raise NotImplementedError
|
|
154
|
+
|
|
155
|
+
model_data = None
|
|
156
|
+
with open(model, "rb") as model_buf:
|
|
157
|
+
model_data = model_buf.read()
|
|
158
|
+
|
|
159
|
+
if header:
|
|
160
|
+
header_content = self.generate_header()
|
|
161
|
+
|
|
162
|
+
wrapper_content = """
|
|
163
|
+
// This file is generated. Do not edit.
|
|
164
|
+
#include "tensorflow/lite/micro/kernels/micro_ops.h"
|
|
165
|
+
#include "tensorflow/lite/micro/micro_error_reporter.h"
|
|
166
|
+
#include "tensorflow/lite/micro/micro_interpreter.h"
|
|
167
|
+
#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
|
|
168
|
+
#include "tensorflow/lite/schema/schema_generated.h"
|
|
169
|
+
"""
|
|
170
|
+
if legacy:
|
|
171
|
+
wrapper_content += """#include "tensorflow/lite/version.h"
|
|
172
|
+
"""
|
|
173
|
+
wrapper_content += """
|
|
174
|
+
#if defined __GNUC__
|
|
175
|
+
#define ALIGN(X) __attribute__((aligned(X)))
|
|
176
|
+
#elif defined _MSC_VER
|
|
177
|
+
#define ALIGN(X) __declspec(align(X))
|
|
178
|
+
#elif defined __TASKING__
|
|
179
|
+
#define ALIGN(X) __align(X)
|
|
180
|
+
#endif
|
|
181
|
+
"""
|
|
182
|
+
if debug_arena: # This will enable the feature only if it is not overwritten by the user/compiler
|
|
183
|
+
wrapper_content += """
|
|
184
|
+
#ifndef DEBUG_ARENA_USAGE
|
|
185
|
+
#define DEBUG_ARENA_USAGE 1
|
|
186
|
+
#endif
|
|
187
|
+
|
|
188
|
+
"""
|
|
189
|
+
wrapper_content += """const unsigned char g_model_data[] ALIGN(16) = { """
|
|
190
|
+
wrapper_content += make_hex_array(model_data)
|
|
191
|
+
wrapper_content += """ };
|
|
192
|
+
|
|
193
|
+
"""
|
|
194
|
+
wrapper_content += self.makeCustomOpPrototypes(custom_ops)
|
|
195
|
+
wrapper_content += """
|
|
196
|
+
|
|
197
|
+
namespace {
|
|
198
|
+
tflite::ErrorReporter *error_reporter = nullptr;
|
|
199
|
+
const tflite::Model *model = nullptr;
|
|
200
|
+
tflite::MicroInterpreter *interpreter = nullptr;
|
|
201
|
+
|
|
202
|
+
// Create an area of memory to use for input, output, and intermediate arrays.
|
|
203
|
+
// Finding the minimum value for your model may require some trial and error.
|
|
204
|
+
constexpr int kTensorArenaSize = """
|
|
205
|
+
wrapper_content += (
|
|
206
|
+
str(arena_size)
|
|
207
|
+
+ """;
|
|
208
|
+
uint8_t tensor_arena[kTensorArenaSize] ALIGN(16);
|
|
209
|
+
|
|
210
|
+
class DummyReporter : public tflite::ErrorReporter {
|
|
211
|
+
public:
|
|
212
|
+
~DummyReporter() {}
|
|
213
|
+
int Report(const char *, va_list) override { return 0; }
|
|
214
|
+
|
|
215
|
+
private:
|
|
216
|
+
TF_LITE_REMOVE_VIRTUAL_DELETE
|
|
217
|
+
};
|
|
218
|
+
} // namespace
|
|
219
|
+
|
|
220
|
+
// The name of this function is important for Arduino compatibility.
|
|
221
|
+
"""
|
|
222
|
+
+ f"void {prefix}_init() {{"
|
|
223
|
+
+ """
|
|
224
|
+
// Set up logging. Google style is to avoid globals or statics because of
|
|
225
|
+
// lifetime uncertainty, but since this has a trivial destructor it's okay.
|
|
226
|
+
// NOLINTNEXTLINE(runtime-global-variables)
|
|
227
|
+
#ifdef _DEBUG
|
|
228
|
+
static tflite::MicroErrorReporter micro_error_reporter;
|
|
229
|
+
#else
|
|
230
|
+
static DummyReporter micro_error_reporter;
|
|
231
|
+
#endif
|
|
232
|
+
error_reporter = µ_error_reporter;
|
|
233
|
+
|
|
234
|
+
// Map the model into a usable data structure. This doesn't involve any
|
|
235
|
+
// copying or parsing, it's a very lightweight operation.
|
|
236
|
+
model = tflite::GetModel(g_model_data);
|
|
237
|
+
if (model->version() != TFLITE_SCHEMA_VERSION) {
|
|
238
|
+
error_reporter->Report("Model provided is schema version %d not equal "
|
|
239
|
+
"to supported version %d.",
|
|
240
|
+
model->version(), TFLITE_SCHEMA_VERSION);
|
|
241
|
+
exit(1);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// This pulls in all the operation implementations we need.
|
|
245
|
+
// NOLINTNEXTLINE(runtime-global-variables)
|
|
246
|
+
// static tflite::ops::micro::AllOpsResolver resolver;
|
|
247
|
+
|
|
248
|
+
"""
|
|
249
|
+
)
|
|
250
|
+
wrapper_content += self.make_op_registrations(ops, custom_ops)
|
|
251
|
+
wrapper_content += """
|
|
252
|
+
|
|
253
|
+
// Build an interpreter to run the model with.
|
|
254
|
+
static tflite::MicroInterpreter static_interpreter(
|
|
255
|
+
model, resolver, tensor_arena, kTensorArenaSize, error_reporter);
|
|
256
|
+
interpreter = &static_interpreter;
|
|
257
|
+
|
|
258
|
+
// Allocate memory from the tensor_arena for the model's tensors.
|
|
259
|
+
TfLiteStatus allocate_status = interpreter->AllocateTensors();
|
|
260
|
+
if (allocate_status != kTfLiteOk) {
|
|
261
|
+
error_reporter->Report("AllocateTensors() failed");
|
|
262
|
+
exit(1);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
"""
|
|
266
|
+
|
|
267
|
+
wrapper_content += f"""
|
|
268
|
+
void *{prefix}_input_ptr(int id) {{
|
|
269
|
+
return interpreter->input(id)->data.data;
|
|
270
|
+
}}
|
|
271
|
+
|
|
272
|
+
size_t {prefix}_input_size(int id) {{
|
|
273
|
+
return interpreter->input(id)->bytes;
|
|
274
|
+
}}
|
|
275
|
+
|
|
276
|
+
size_t {prefix}_inputs() {{
|
|
277
|
+
return interpreter->inputs_size();
|
|
278
|
+
}}
|
|
279
|
+
|
|
280
|
+
void *{prefix}_output_ptr(int id) {{
|
|
281
|
+
return interpreter->output(id)->data.data;
|
|
282
|
+
}}
|
|
283
|
+
|
|
284
|
+
size_t {prefix}_output_size(int id) {{
|
|
285
|
+
return interpreter->output(id)->bytes;
|
|
286
|
+
}}
|
|
287
|
+
|
|
288
|
+
size_t {prefix}_outputs() {{
|
|
289
|
+
return interpreter->outputs_size();
|
|
290
|
+
}}
|
|
291
|
+
|
|
292
|
+
void {prefix}_invoke() {{
|
|
293
|
+
// Run inference, and report any error
|
|
294
|
+
TfLiteStatus invoke_status = interpreter->Invoke();
|
|
295
|
+
if (invoke_status != kTfLiteOk) {{
|
|
296
|
+
error_reporter->Report("Invoke failed\\n");
|
|
297
|
+
exit(1);
|
|
298
|
+
}}
|
|
299
|
+
#if DEBUG_ARENA_USAGE
|
|
300
|
+
size_t used = interpreter->arena_used_bytes();
|
|
301
|
+
error_reporter->Report("Arena Usage after model invocation: %d bytes\\n", used);
|
|
302
|
+
#endif // DEBUG_ARENA_USAGE
|
|
303
|
+
}}
|
|
304
|
+
"""
|
|
305
|
+
if header:
|
|
306
|
+
return wrapper_content, header_content
|
|
307
|
+
else:
|
|
308
|
+
return wrapper_content
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
class TFLMIBackend(TFLMBackend):
|
|
312
|
+
name = "tflmi"
|
|
313
|
+
|
|
314
|
+
DEFAULTS = {
|
|
315
|
+
**TFLMBackend.DEFAULTS,
|
|
316
|
+
"arena_size": 2**20, # 1 MB
|
|
317
|
+
"debug_arena": False,
|
|
318
|
+
"ops": [],
|
|
319
|
+
"custom_ops": [],
|
|
320
|
+
"registrations": {},
|
|
321
|
+
"ops_resolver": "mutable",
|
|
322
|
+
"legacy": False,
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
REQUIRED = TFLMBackend.REQUIRED + []
|
|
326
|
+
|
|
327
|
+
def __init__(self, features=None, config=None):
|
|
328
|
+
super().__init__(features=features, config=config)
|
|
329
|
+
self.codegen = TFLMICodegen()
|
|
330
|
+
self.model_data = None
|
|
331
|
+
self.prefix = "model" # Without the _
|
|
332
|
+
self.artifacts = (
|
|
333
|
+
[]
|
|
334
|
+
) # TODO: either make sure that ony one model is processed at a time or move the artifacts to the methods
|
|
335
|
+
# TODO: decide if artifacts should be handled by code (str) or file path or binary data
|
|
336
|
+
|
|
337
|
+
@property
|
|
338
|
+
def legacy(self):
|
|
339
|
+
value = self.config["legacy"]
|
|
340
|
+
return str2bool(value) if not isinstance(value, (bool, int)) else value
|
|
341
|
+
|
|
342
|
+
@property
|
|
343
|
+
def debug_arena(self):
|
|
344
|
+
value = self.config["debug_arena"]
|
|
345
|
+
return str2bool(value) if not isinstance(value, (bool, int)) else value
|
|
346
|
+
|
|
347
|
+
@property
|
|
348
|
+
def arena_size(self):
|
|
349
|
+
return int(self.config["arena_size"])
|
|
350
|
+
|
|
351
|
+
def generate_code(self):
|
|
352
|
+
artifacts = []
|
|
353
|
+
assert self.model is not None
|
|
354
|
+
config_map = {key.split(".")[-1]: value for key, value in self.config.items()}
|
|
355
|
+
wrapper_code, header_code = self.codegen.generate_wrapper(
|
|
356
|
+
self.model,
|
|
357
|
+
prefix=self.prefix,
|
|
358
|
+
header=True,
|
|
359
|
+
**config_map,
|
|
360
|
+
)
|
|
361
|
+
artifacts.append(Artifact(f"{self.prefix}.cc", content=wrapper_code, fmt=ArtifactFormat.SOURCE))
|
|
362
|
+
artifacts.append(
|
|
363
|
+
Artifact(
|
|
364
|
+
f"{self.prefix}.cc.h",
|
|
365
|
+
content=header_code,
|
|
366
|
+
fmt=ArtifactFormat.SOURCE,
|
|
367
|
+
optional=False,
|
|
368
|
+
)
|
|
369
|
+
)
|
|
370
|
+
workspace_size_artifact = Artifact(
|
|
371
|
+
"tflmi_arena_size.txt", content=f"{self.arena_size}", fmt=ArtifactFormat.TEXT
|
|
372
|
+
)
|
|
373
|
+
artifacts.append(workspace_size_artifact)
|
|
374
|
+
# TODO: stdout_artifact (Would need to invoke TFLMI in subprocess to get stdout)
|
|
375
|
+
self.artifacts = artifacts
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
if __name__ == "__main__":
|
|
379
|
+
sys.exit(
|
|
380
|
+
main(
|
|
381
|
+
TFLMIBackend,
|
|
382
|
+
args=sys.argv[1:],
|
|
383
|
+
)
|
|
384
|
+
) # pragma: no cover
|
|
385
|
+
# TODO: pin defaults to backend class? -> how to defien features and config?
|
|
@@ -0,0 +1,81 @@
|
|
|
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
|
+
"""Definitions for TFLMFramework."""
|
|
20
|
+
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
|
|
23
|
+
from mlonmcu.flow.framework import Framework
|
|
24
|
+
from mlonmcu.flow.tflm import TFLMBackend
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class TFLMFramework(Framework):
|
|
28
|
+
"""TFLM Framework specialization."""
|
|
29
|
+
|
|
30
|
+
name = "tflm"
|
|
31
|
+
|
|
32
|
+
FEATURES = ["muriscvnn", "cmsisnn"]
|
|
33
|
+
|
|
34
|
+
DEFAULTS = {
|
|
35
|
+
"optimized_kernel": None,
|
|
36
|
+
"optimized_kernel_inc_dirs": [],
|
|
37
|
+
"optimized_kernel_libs": [],
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
REQUIRED = ["tf.src_dir"]
|
|
41
|
+
|
|
42
|
+
backends = TFLMBackend.registry
|
|
43
|
+
|
|
44
|
+
def __init__(self, features=None, config=None):
|
|
45
|
+
super().__init__(features=features, config=config)
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def tf_src(self):
|
|
49
|
+
return Path(self.config["tf.src_dir"])
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def optimized_kernel(self):
|
|
53
|
+
return self.config["optimized_kernel"]
|
|
54
|
+
|
|
55
|
+
@property
|
|
56
|
+
def optimized_kernel_libs(self):
|
|
57
|
+
return self.config["optimized_kernel_libs"]
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def optimized_kernel_inc_dirs(self):
|
|
61
|
+
return self.config["optimized_kernel_inc_dirs"]
|
|
62
|
+
|
|
63
|
+
def get_platform_defs(self, platform):
|
|
64
|
+
ret = super().get_platform_defs(platform)
|
|
65
|
+
if self.optimized_kernel or self.optimized_kernel_inc_dirs or self.optimized_kernel_libs:
|
|
66
|
+
if self.optimized_kernel:
|
|
67
|
+
ret["TFLM_OPTIMIZED_KERNEL"] = self.optimized_kernel
|
|
68
|
+
if self.optimized_kernel_inc_dirs:
|
|
69
|
+
if isinstance(self.optimized_kernel_inc_dirs, list):
|
|
70
|
+
temp = r"\;".join(self.optimized_kernel_inc_dirs)
|
|
71
|
+
else:
|
|
72
|
+
temp = self.optimized_kernel_inc_dirs
|
|
73
|
+
ret["TFLM_OPTIMIZED_KERNEL_INCLUDE_DIR"] = temp
|
|
74
|
+
if self.optimized_kernel_libs:
|
|
75
|
+
if isinstance(self.optimized_kernel_libs, list):
|
|
76
|
+
temp = r"\;".join(self.optimized_kernel_libs)
|
|
77
|
+
else:
|
|
78
|
+
temp = self.optimized_kernel_libs
|
|
79
|
+
ret["TFLM_OPTIMIZED_KERNEL_LIB"] = temp
|
|
80
|
+
ret["TF_DIR"] = str(self.tf_src)
|
|
81
|
+
return ret
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
"""TVM framework module."""
|
|
20
|
+
|
|
21
|
+
from .backend import TVMAOTBackend, TVMAOTPlusBackend, TVMRTBackend, TVMCGBackend
|
|
22
|
+
|
|
23
|
+
__all__ = ["TVMAOTBackend", "TVMAOTPlusBackend", "TVMRTBackend", "TVMCGBackend"]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
|
|
3
|
+
#
|
|
4
|
+
# This file is part of MLonMCU.
|
|
5
|
+
# See https://github.com/tum-ei-eda/mlonmcu.git for further info.
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
#
|
|
19
|
+
from .backend import TVMBackend
|
|
20
|
+
from .tvmaot import TVMAOTBackend
|
|
21
|
+
from .tvmaotplus import TVMAOTPlusBackend
|
|
22
|
+
from .tvmcg import TVMCGBackend
|
|
23
|
+
from .tvmrt import TVMRTBackend
|
|
24
|
+
from .tvmllvm import TVMLLVMBackend
|
|
25
|
+
|
|
26
|
+
__all__ = ["TVMBackend", "TVMAOTBackend", "TVMAOTPlusBackend", "TVMCGBackend", "TVMRTBackend", "TVMLLVMBackend"]
|