diff --git a/backends/arm/scripts/build_executorch_runner.sh b/backends/arm/scripts/build_executorch_runner.sh index 3e658928274..205f5d4b5f1 100755 --- a/backends/arm/scripts/build_executorch_runner.sh +++ b/backends/arm/scripts/build_executorch_runner.sh @@ -14,8 +14,9 @@ toolchain_cmake=${et_root_dir}/examples/arm/ethos-u-setup/arm-none-eabi-gcc.cmak pte_file="" target="ethos-u55-128" build_type="Release" -system_config="" bundleio=false +system_config="" +memory_mode="" build_with_etdump=false extra_build_flags="" output_folder_set=false @@ -32,9 +33,12 @@ help() { echo " --pte= pte file (genrated by the aot_arm_compier from the model to include in the elf" echo " --target= Target to build and run for Default: ${target}" echo " --build_type= Build with Release, Debug or RelWithDebInfo, default is ${build_type}" - echo " --system_config= System configuration to select from the Vela configuration file (see vela.ini). Default: Ethos_U55_High_End_Embedded for EthosU55 targets, Ethos_U85_SYS_DRAM_Mid for EthosU85 targets." - echo " NOTE: If given, this option must match the given target. This option also sets timing adapter values customized for specific hardware, see ./executor_runner/CMakeLists.txt." echo " --bundleio Support both pte and Bundle IO bpte using Devtools BundelIO with Input/RefOutput included" + echo " --system_config= System configuration to select from the Vela configuration file (see vela.ini). Default: Ethos_U55_High_End_Embedded for EthosU55 targets, Ethos_U85_SYS_DRAM_Mid for EthosU85 targets." + echo " NOTE: If given, this option must match the given target. This option along with the memory_mode sets timing adapter values customized for specific hardware, see ./executor_runner/CMakeLists.txt." + echo " --memory_mode= Vela memory mode, used for setting the Timing Adapter parameters of the Corstone platforms." + echo " Valid values are Shared_Sram(for Ethos-U55, Ethos-U65, Ethos-85), Sram_Only(for Ethos-U55, Ethos-U65, Ethos-U85) or Dedicated_Sram(for Ethos-U65, Ethos-U85)." + echo " Default: Shared_Sram for the Ethos-U55 and Sram_Only for the Ethos-U85" echo " --etdump Adds Devtools etdump support to track timing, etdump area will be base64 encoded in the log" echo " --extra_build_flags= Extra flags to pass to cmake like -DET_ARM_BAREMETAL_METHOD_ALLOCATOR_POOL_SIZE=60000 Default: none " echo " --output= Output folder Default: /_.pte" @@ -49,8 +53,9 @@ for arg in "$@"; do --pte=*) pte_file="${arg#*=}";; --target=*) target="${arg#*=}";; --build_type=*) build_type="${arg#*=}";; - --system_config=*) system_config="${arg#*=}";; --bundleio) bundleio=true ;; + --system_config=*) system_config="${arg#*=}";; + --memory_mode=*) memory_mode="${arg#*=}";; --etdump) build_with_etdump=true ;; --extra_build_flags=*) extra_build_flags="${arg#*=}";; --output=*) output_folder="${arg#*=}" ; output_folder_set=true ;; @@ -83,6 +88,15 @@ then fi fi +if [[ ${memory_mode} == "" ]] +then + memory_mode="Shared_Sram" + if [[ ${target} =~ "ethos-u85" ]] + then + memory_mode="Sram_Only" + fi +fi + output_folder=$(realpath ${output_folder}) if [[ ${target} == *"ethos-u55"* ]]; then @@ -91,7 +105,7 @@ else target_cpu=cortex-m85 fi echo "--------------------------------------------------------------------------------" -echo "Build Arm Baremetal executor_runner for ${target} with ${pte_file} using ${system_config} ${extra_build_flags} to '${output_folder}/cmake-out'" +echo "Build Arm Baremetal executor_runner for ${target} with ${pte_file} using ${system_config} ${memory_mode} ${extra_build_flags} to '${output_folder}/cmake-out'" echo "--------------------------------------------------------------------------------" cd ${et_root_dir}/examples/arm/executor_runner @@ -120,6 +134,7 @@ cmake \ ${build_with_etdump_flags} \ -DPYTHON_EXECUTABLE=$(which python3) \ -DSYSTEM_CONFIG=${system_config} \ + -DMEMORY_MODE=${memory_mode} \ ${extra_build_flags} \ -B ${output_folder}/cmake-out diff --git a/examples/arm/executor_runner/CMakeLists.txt b/examples/arm/executor_runner/CMakeLists.txt index 11891e2fb93..25aef08f375 100644 --- a/examples/arm/executor_runner/CMakeLists.txt +++ b/examples/arm/executor_runner/CMakeLists.txt @@ -83,6 +83,10 @@ execute_process(COMMAND bash -c "pwd && source backends/arm/scripts/utils.sh && # Selects timing adapter values matching system_config. # Default is Ethos_U55_High_End_Embedded, simulating optimal hardware for the Corestone-300. set(SYSTEM_CONFIG "Ethos_U55_High_End_Embedded" CACHE STRING "System config") +set(MEMORY_MODE "Shared_Sram" CACHE STRING "Vela memory mode") + +message(STATUS "SYSTEM_CONFIG is ${SYSTEM_CONFIG}") +message(STATUS "MEMORY_MODE is ${MEMORY_MODE}") get_filename_component(ET_BUILD_DIR_PATH ${ET_BUILD_DIR_PATH} REALPATH) get_filename_component(ET_DIR_PATH ${ET_DIR_PATH} REALPATH) @@ -92,6 +96,8 @@ if(NOT ${SEMIHOSTING}) get_filename_component(ET_PTE_FILE_PATH ${ET_PTE_FILE_PATH} REALPATH) endif() + + # Dependencies from the Ethos-U Core This is the platform target of # Corstone-300, that includes ethosu_core_driver and bare-metal bringup # libraries. We link against ethosu_target_init which includes all of these @@ -99,11 +105,44 @@ endif() if(SYSTEM_CONFIG STREQUAL "Ethos_U55_High_End_Embedded") add_subdirectory(${ETHOS_SDK_PATH}/core_platform/targets/corstone-300 target) set(TARGET_BOARD "corstone-300") - target_compile_definitions(ethosu_target_common INTERFACE - # ETHOSU_MODEL=0 place pte file/data in SRAM area - # ETHOSU_MODEL=1 place pte file/data in DDR area - ETHOSU_MODEL=1 - # Configure NPU architecture timing adapters + if(MEMORY_MODE STREQUAL "Shared_Sram") + target_compile_definitions(ethosu_target_common INTERFACE + # ETHOSU_MODEL=0 place pte file/data in SRAM area + # ETHOSU_MODEL=1 place pte file/data in DDR area + ETHOSU_MODEL=1 + # Configure NPU architecture timing adapters + # This is just example numbers and you should make this match your hardware + # SRAM + ETHOSU_TA_MAXR_0=8 + ETHOSU_TA_MAXW_0=8 + ETHOSU_TA_MAXRW_0=0 + ETHOSU_TA_RLATENCY_0=32 + ETHOSU_TA_WLATENCY_0=32 + ETHOSU_TA_PULSE_ON_0=3999 + ETHOSU_TA_PULSE_OFF_0=1 + ETHOSU_TA_BWCAP_0=4000 + ETHOSU_TA_PERFCTRL_0=0 + ETHOSU_TA_PERFCNT_0=0 + ETHOSU_TA_MODE_0=1 + ETHOSU_TA_HISTBIN_0=0 + ETHOSU_TA_HISTCNT_0=0 + # Flash + ETHOSU_TA_MAXR_1=2 + ETHOSU_TA_MAXW_1=0 + ETHOSU_TA_MAXRW_1=0 + ETHOSU_TA_RLATENCY_1=64 + ETHOSU_TA_WLATENCY_1=0 + ETHOSU_TA_PULSE_ON_1=320 + ETHOSU_TA_PULSE_OFF_1=80 + ETHOSU_TA_BWCAP_1=50 + ETHOSU_TA_PERFCTRL_1=0 + ETHOSU_TA_PERFCNT_1=0 + ETHOSU_TA_MODE_1=1 + ETHOSU_TA_HISTBIN_1=0 + ETHOSU_TA_HISTCNT_1=0 + ) + elseif(MEMORY_MODE STREQUAL "Sram_Only") + target_compile_definitions(ethosu_target_common INTERFACE # This is just example numbers and you should make this match your hardware # SRAM ETHOSU_TA_MAXR_0=8 @@ -119,28 +158,66 @@ if(SYSTEM_CONFIG STREQUAL "Ethos_U55_High_End_Embedded") ETHOSU_TA_MODE_0=1 ETHOSU_TA_HISTBIN_0=0 ETHOSU_TA_HISTCNT_0=0 - # Flash - ETHOSU_TA_MAXR_1=2 - ETHOSU_TA_MAXW_1=0 + # Set the second Timing Adapter to SRAM latency & bandwidth + ETHOSU_TA_MAXR_1=8 + ETHOSU_TA_MAXW_1=8 ETHOSU_TA_MAXRW_1=0 - ETHOSU_TA_RLATENCY_1=64 - ETHOSU_TA_WLATENCY_1=0 - ETHOSU_TA_PULSE_ON_1=320 - ETHOSU_TA_PULSE_OFF_1=80 - ETHOSU_TA_BWCAP_1=50 + ETHOSU_TA_RLATENCY_1=32 + ETHOSU_TA_WLATENCY_1=32 + ETHOSU_TA_PULSE_ON_1=3999 + ETHOSU_TA_PULSE_OFF_1=1 + ETHOSU_TA_BWCAP_1=4000 ETHOSU_TA_PERFCTRL_1=0 ETHOSU_TA_PERFCNT_1=0 ETHOSU_TA_MODE_1=1 ETHOSU_TA_HISTBIN_1=0 ETHOSU_TA_HISTCNT_1=0 ) + + else() + message(FATAL_ERROR "Unsupported memory_mode ${MEMORY_MODE} for the Ethos-U55. The Ethos-U55 supports only Shared_Sram and Sram_Only.") + endif() elseif(SYSTEM_CONFIG STREQUAL "Ethos_U55_Deep_Embedded") add_subdirectory(${ETHOS_SDK_PATH}/core_platform/targets/corstone-300 target) set(TARGET_BOARD "corstone-300") - target_compile_definitions(ethosu_target_common INTERFACE - # ETHOSU_MODEL=0 place pte file/data in SRAM area - # ETHOSU_MODEL=1 place pte file/data in DDR area - ETHOSU_MODEL=1 + if(MEMORY_MODE STREQUAL "Shared_Sram") + target_compile_definitions(ethosu_target_common INTERFACE + # ETHOSU_MODEL=0 place pte file/data in SRAM area + # ETHOSU_MODEL=1 place pte file/data in DDR area + ETHOSU_MODEL=1 + # Configure NPU architecture timing adapters + # This is just example numbers and you should make this match your hardware + # SRAM + ETHOSU_TA_MAXR_0=4 + ETHOSU_TA_MAXW_0=4 + ETHOSU_TA_MAXRW_0=0 + ETHOSU_TA_RLATENCY_0=8 + ETHOSU_TA_WLATENCY_0=8 + ETHOSU_TA_PULSE_ON_0=3999 + ETHOSU_TA_PULSE_OFF_0=1 + ETHOSU_TA_BWCAP_0=4000 + ETHOSU_TA_PERFCTRL_0=0 + ETHOSU_TA_PERFCNT_0=0 + ETHOSU_TA_MODE_0=1 + ETHOSU_TA_HISTBIN_0=0 + ETHOSU_TA_HISTCNT_0=0 + # Flash + ETHOSU_TA_MAXR_1=2 + ETHOSU_TA_MAXW_1=0 + ETHOSU_TA_MAXRW_1=0 + ETHOSU_TA_RLATENCY_1=32 + ETHOSU_TA_WLATENCY_1=0 + ETHOSU_TA_PULSE_ON_1=360 + ETHOSU_TA_PULSE_OFF_1=40 + ETHOSU_TA_BWCAP_1=25 + ETHOSU_TA_PERFCTRL_1=0 + ETHOSU_TA_PERFCNT_1=0 + ETHOSU_TA_MODE_1=1 + ETHOSU_TA_HISTBIN_1=0 + ETHOSU_TA_HISTCNT_1=0 + ) + elseif(MEMORY_MODE STREQUAL "Sram_Only") + target_compile_definitions(ethosu_target_common INTERFACE # Configure NPU architecture timing adapters # This is just example numbers and you should make this match your hardware # SRAM @@ -157,25 +234,65 @@ elseif(SYSTEM_CONFIG STREQUAL "Ethos_U55_Deep_Embedded") ETHOSU_TA_MODE_0=1 ETHOSU_TA_HISTBIN_0=0 ETHOSU_TA_HISTCNT_0=0 - # Flash - ETHOSU_TA_MAXR_1=2 - ETHOSU_TA_MAXW_1=0 + # Set the second Timing Adapter to SRAM latency & bandwidth + ETHOSU_TA_MAXR_1=4 + ETHOSU_TA_MAXW_1=4 ETHOSU_TA_MAXRW_1=0 - ETHOSU_TA_RLATENCY_1=32 - ETHOSU_TA_WLATENCY_1=0 - ETHOSU_TA_PULSE_ON_1=360 - ETHOSU_TA_PULSE_OFF_1=40 - ETHOSU_TA_BWCAP_1=25 + ETHOSU_TA_RLATENCY_1=8 + ETHOSU_TA_WLATENCY_1=8 + ETHOSU_TA_PULSE_ON_1=3999 + ETHOSU_TA_PULSE_OFF_1=1 + ETHOSU_TA_BWCAP_1=4000 ETHOSU_TA_PERFCTRL_1=0 ETHOSU_TA_PERFCNT_1=0 ETHOSU_TA_MODE_1=1 ETHOSU_TA_HISTBIN_1=0 ETHOSU_TA_HISTCNT_1=0 ) + else() + message(FATAL_ERROR "Unsupported memory_mode ${MEMORY_MODE} for the Ethos-U55. The Ethos-U55 supports only Shared_Sram and Sram_Only.") + endif() elseif(SYSTEM_CONFIG STREQUAL "Ethos_U85_SYS_DRAM_Low") add_subdirectory(${ETHOS_SDK_PATH}/core_platform/targets/corstone-320 target) set(TARGET_BOARD "corstone-320") - target_compile_definitions(ethosu_target_common INTERFACE + if(MEMORY_MODE STREQUAL "Dedicated_Sram") + target_compile_definitions(ethosu_target_common INTERFACE + # ETHOSU_MODEL=0 place pte file/data in SRAM area + # ETHOSU_MODEL=1 place pte file/data in DDR area + ETHOSU_MODEL=1 + # Configure NPU architecture timing adapters + # This is just example numbers and you should make this match your hardware + # SRAM + ETHOSU_TA_MAXR_0=8 + ETHOSU_TA_MAXW_0=8 + ETHOSU_TA_MAXRW_0=0 + ETHOSU_TA_RLATENCY_0=16 + ETHOSU_TA_WLATENCY_0=16 + ETHOSU_TA_PULSE_ON_0=3999 + ETHOSU_TA_PULSE_OFF_0=1 + ETHOSU_TA_BWCAP_0=4000 + ETHOSU_TA_PERFCTRL_0=0 + ETHOSU_TA_PERFCNT_0=0 + ETHOSU_TA_MODE_0=1 + ETHOSU_TA_HISTBIN_0=0 + ETHOSU_TA_HISTCNT_0=0 + # DRAM + ETHOSU_TA_MAXR_1=24 + ETHOSU_TA_MAXW_1=12 + ETHOSU_TA_MAXRW_1=0 + ETHOSU_TA_RLATENCY_1=250 + ETHOSU_TA_WLATENCY_1=125 + ETHOSU_TA_PULSE_ON_1=4000 + ETHOSU_TA_PULSE_OFF_1=1000 + ETHOSU_TA_BWCAP_1=2344 + ETHOSU_TA_PERFCTRL_1=0 + ETHOSU_TA_PERFCNT_1=0 + ETHOSU_TA_MODE_1=1 + ETHOSU_TA_HISTBIN_1=0 + ETHOSU_TA_HISTCNT_1=0 + ) + elseif(MEMORY_MODE STREQUAL "Sram_Only") + target_compile_definitions(ethosu_target_common INTERFACE # ETHOSU_MODEL=0 place pte file/data in SRAM area # ETHOSU_MODEL=1 place pte file/data in DDR area ETHOSU_MODEL=1 @@ -195,59 +312,98 @@ elseif(SYSTEM_CONFIG STREQUAL "Ethos_U85_SYS_DRAM_Low") ETHOSU_TA_MODE_0=1 ETHOSU_TA_HISTBIN_0=0 ETHOSU_TA_HISTCNT_0=0 - # DRAM - ETHOSU_TA_MAXR_1=24 - ETHOSU_TA_MAXW_1=12 + # Set the second Timing Adapter to SRAM latency & bandwidth + ETHOSU_TA_MAXR_1=8 + ETHOSU_TA_MAXW_1=8 ETHOSU_TA_MAXRW_1=0 - ETHOSU_TA_RLATENCY_1=250 - ETHOSU_TA_WLATENCY_1=125 - ETHOSU_TA_PULSE_ON_1=4000 - ETHOSU_TA_PULSE_OFF_1=1000 - ETHOSU_TA_BWCAP_1=2344 + ETHOSU_TA_RLATENCY_1=16 + ETHOSU_TA_WLATENCY_1=16 + ETHOSU_TA_PULSE_ON_1=3999 + ETHOSU_TA_PULSE_OFF_1=1 + ETHOSU_TA_BWCAP_1=4000 ETHOSU_TA_PERFCTRL_1=0 ETHOSU_TA_PERFCNT_1=0 ETHOSU_TA_MODE_1=1 ETHOSU_TA_HISTBIN_1=0 ETHOSU_TA_HISTCNT_1=0 ) + endif() elseif(SYSTEM_CONFIG STREQUAL "Ethos_U85_SYS_DRAM_Mid" OR SYSTEM_CONFIG STREQUAL "Ethos_U85_SYS_DRAM_High") add_subdirectory(${ETHOS_SDK_PATH}/core_platform/targets/corstone-320 target) set(TARGET_BOARD "corstone-320") - target_compile_definitions(ethosu_target_common INTERFACE - # ETHOSU_MODEL=0 place pte file/data in SRAM area - # ETHOSU_MODEL=1 place pte file/data in DDR area - ETHOSU_MODEL=1 - # Configure NPU architecture timing adapters - # This is just example numbers and you should make this match your hardware - # SRAM - ETHOSU_TA_MAXR_0=8 - ETHOSU_TA_MAXW_0=8 - ETHOSU_TA_MAXRW_0=0 - ETHOSU_TA_RLATENCY_0=32 - ETHOSU_TA_WLATENCY_0=32 - ETHOSU_TA_PULSE_ON_0=3999 - ETHOSU_TA_PULSE_OFF_0=1 - ETHOSU_TA_BWCAP_0=4000 - ETHOSU_TA_PERFCTRL_0=0 - ETHOSU_TA_PERFCNT_0=0 - ETHOSU_TA_MODE_0=1 - ETHOSU_TA_HISTBIN_0=0 - ETHOSU_TA_HISTCNT_0=0 - # DRAM - ETHOSU_TA_MAXR_1=64 - ETHOSU_TA_MAXW_1=32 - ETHOSU_TA_MAXRW_1=0 - ETHOSU_TA_RLATENCY_1=500 - ETHOSU_TA_WLATENCY_1=250 - ETHOSU_TA_PULSE_ON_1=4000 - ETHOSU_TA_PULSE_OFF_1=1000 - ETHOSU_TA_BWCAP_1=3750 - ETHOSU_TA_PERFCTRL_1=0 - ETHOSU_TA_PERFCNT_1=0 - ETHOSU_TA_MODE_1=1 - ETHOSU_TA_HISTBIN_1=0 - ETHOSU_TA_HISTCNT_1=0 - ) + if(MEMORY_MODE STREQUAL "Dedicated_Sram") + target_compile_definitions(ethosu_target_common INTERFACE + # ETHOSU_MODEL=0 place pte file/data in SRAM area + # ETHOSU_MODEL=1 place pte file/data in DDR area + ETHOSU_MODEL=1 + # Configure NPU architecture timing adapters + # This is just example numbers and you should make this match your hardware + # SRAM + ETHOSU_TA_MAXR_0=8 + ETHOSU_TA_MAXW_0=8 + ETHOSU_TA_MAXRW_0=0 + ETHOSU_TA_RLATENCY_0=32 + ETHOSU_TA_WLATENCY_0=32 + ETHOSU_TA_PULSE_ON_0=3999 + ETHOSU_TA_PULSE_OFF_0=1 + ETHOSU_TA_BWCAP_0=4000 + ETHOSU_TA_PERFCTRL_0=0 + ETHOSU_TA_PERFCNT_0=0 + ETHOSU_TA_MODE_0=1 + ETHOSU_TA_HISTBIN_0=0 + ETHOSU_TA_HISTCNT_0=0 + # DRAM + ETHOSU_TA_MAXR_1=64 + ETHOSU_TA_MAXW_1=32 + ETHOSU_TA_MAXRW_1=0 + ETHOSU_TA_RLATENCY_1=500 + ETHOSU_TA_WLATENCY_1=250 + ETHOSU_TA_PULSE_ON_1=4000 + ETHOSU_TA_PULSE_OFF_1=1000 + ETHOSU_TA_BWCAP_1=3750 + ETHOSU_TA_PERFCTRL_1=0 + ETHOSU_TA_PERFCNT_1=0 + ETHOSU_TA_MODE_1=1 + ETHOSU_TA_HISTBIN_1=0 + ETHOSU_TA_HISTCNT_1=0 + ) + elseif(MEMORY_MODE STREQUAL "Sram_Only") + target_compile_definitions(ethosu_target_common INTERFACE + # ETHOSU_MODEL=0 place pte file/data in SRAM area + # ETHOSU_MODEL=1 place pte file/data in DDR area + ETHOSU_MODEL=1 + # Configure NPU architecture timing adapters + # This is just example numbers and you should make this match your hardware + # SRAM + ETHOSU_TA_MAXR_0=8 + ETHOSU_TA_MAXW_0=8 + ETHOSU_TA_MAXRW_0=0 + ETHOSU_TA_RLATENCY_0=32 + ETHOSU_TA_WLATENCY_0=32 + ETHOSU_TA_PULSE_ON_0=3999 + ETHOSU_TA_PULSE_OFF_0=1 + ETHOSU_TA_BWCAP_0=4000 + ETHOSU_TA_PERFCTRL_0=0 + ETHOSU_TA_PERFCNT_0=0 + ETHOSU_TA_MODE_0=1 + ETHOSU_TA_HISTBIN_0=0 + ETHOSU_TA_HISTCNT_0=0 + # Set the second Timing Adapter to SRAM latency & bandwidth + ETHOSU_TA_MAXR_1=8 + ETHOSU_TA_MAXW_1=8 + ETHOSU_TA_MAXRW_1=0 + ETHOSU_TA_RLATENCY_1=32 + ETHOSU_TA_WLATENCY_1=32 + ETHOSU_TA_PULSE_ON_1=3999 + ETHOSU_TA_PULSE_OFF_1=1 + ETHOSU_TA_BWCAP_1=4000 + ETHOSU_TA_PERFCTRL_1=0 + ETHOSU_TA_PERFCNT_1=0 + ETHOSU_TA_MODE_1=1 + ETHOSU_TA_HISTBIN_1=0 + ETHOSU_TA_HISTCNT_1=0 + ) + endif() else() message(FATAL_ERROR "Unsupported SYSTEM_CONFIG: ${SYSTEM_CONFIG}") endif() diff --git a/examples/arm/run.sh b/examples/arm/run.sh index 5f1e3764de2..137aa171e95 100755 --- a/examples/arm/run.sh +++ b/examples/arm/run.sh @@ -216,7 +216,7 @@ for i in "${!test_model[@]}"; do else set -x # Rebuild the application as the pte is imported as a header/c array - backends/arm/scripts/build_executorch_runner.sh --et_build_root="${et_build_root}" --pte="${pte_file}" --build_type=${build_type} --target=${target} --system_config=${system_config} ${bundleio_flag} ${et_dump_flag} --extra_build_flags="${extra_build_flags}" --ethosu_tools_dir="${ethos_u_scratch_dir}" + backends/arm/scripts/build_executorch_runner.sh --et_build_root="${et_build_root}" --pte="${pte_file}" --build_type=${build_type} --target=${target} --system_config=${system_config} --memory_mode=${memory_mode} ${bundleio_flag} ${et_dump_flag} --extra_build_flags="${extra_build_flags}" --ethosu_tools_dir="${ethos_u_scratch_dir}" if [ "$build_only" = false ] ; then # Execute the executor_runner on FVP Simulator elf_file="${output_folder}/${elf_folder}/cmake-out/arm_executor_runner"