From 27418fed776c6a707fcbbeec770f46edfecbe0b3 Mon Sep 17 00:00:00 2001 From: Rob Elliott Date: Wed, 18 Mar 2026 09:17:18 +0000 Subject: [PATCH 1/6] Enable Arm backend in default builds - Enable VGF in pybind build if directed by env var. - Use VGF pybind in the wheel builds, based on package availability. This tidies up vgf with runtime installation further to the following: 1. developer flows ./examples/arm/setup.sh --enable-mlsdk-deps export EXECUTORCH_PYBIND_ENABLE_VGF=ON ./install_executorch.sh --editable --optional-dependency vgf 2. wheel builds: # will invoke .ci/scripts/wheel/pre_build_script.sh # suitable platforms have EXECUTORCH_PYBIND_ENABLE_VGF=ON set 3. end users: pip install executorch[vgf] # published wheels contain runtime delegate on supported platforms I'd still like to remove emulation_layer from the requirements as a platform setup item (vulkan and emulated vs real is a property of the platform we land on, not our problem to solve). Change-Id: I63caf3a3691022c83468a9c45f30884222779d33 Signed-off-by: Rob Elliott --- .ci/scripts/wheel/pre_build_script.sh | 12 ++++++++++++ CMakeLists.txt | 4 ++++ backends/arm/requirements-arm-vgf-runtime.txt | 8 ++++++++ backends/arm/requirements-arm-vgf.txt | 1 - .../arm/scripts/setup-mlsdk-from-source.sh | 2 +- examples/arm/setup.sh | 8 +++++++- tools/cmake/preset/pybind.cmake | 18 ++++++++++++++++++ 7 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 backends/arm/requirements-arm-vgf-runtime.txt diff --git a/.ci/scripts/wheel/pre_build_script.sh b/.ci/scripts/wheel/pre_build_script.sh index 365398d27a4..5ce42c6315f 100755 --- a/.ci/scripts/wheel/pre_build_script.sh +++ b/.ci/scripts/wheel/pre_build_script.sh @@ -57,6 +57,18 @@ fi "${GITHUB_WORKSPACE}/${REPOSITORY}/install_requirements.sh" --example +# Enable VGF in pybind wheel builds when the platform-specific build input is +# available from pip. +if [[ "$UNAME_S" == "Linux" || "$UNAME_S" == "Darwin" ]]; then + if python3 -m pip install -r \ + "${GITHUB_WORKSPACE}/${REPOSITORY}/backends/arm/requirements-arm-vgf-runtime.txt"; then + export EXECUTORCH_PYBIND_ENABLE_VGF=ON + echo "EXECUTORCH_PYBIND_ENABLE_VGF=ON" >> "${GITHUB_ENV}" + else + echo "VGF build dependency unavailable on this platform; building without VGF" + fi +fi + # Download Qualcomm QNN SDK on Linux x86_64 so the wheel build can include the # QNN backend. The SDK is large, so we download it here (outside CMake) rather # than during cmake configure. diff --git a/CMakeLists.txt b/CMakeLists.txt index ce0def6000b..a8c7edc1216 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -994,6 +994,10 @@ if(EXECUTORCH_BUILD_PYBIND) list(APPEND _dep_libs coremldelegate) endif() + if(EXECUTORCH_BUILD_VGF) + list(APPEND _dep_libs vgf_backend) + endif() + if(EXECUTORCH_BUILD_MPS) list(APPEND _dep_libs mpsdelegate) endif() diff --git a/backends/arm/requirements-arm-vgf-runtime.txt b/backends/arm/requirements-arm-vgf-runtime.txt new file mode 100644 index 00000000000..f89a0f81cce --- /dev/null +++ b/backends/arm/requirements-arm-vgf-runtime.txt @@ -0,0 +1,8 @@ +# Copyright 2026 Arm Limited and/or its affiliates. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +# These dependencies need to match pyproject.toml + +ai_ml_sdk_vgf_library == 0.9.0 diff --git a/backends/arm/requirements-arm-vgf.txt b/backends/arm/requirements-arm-vgf.txt index 5627c4f13ec..30cc48f2836 100644 --- a/backends/arm/requirements-arm-vgf.txt +++ b/backends/arm/requirements-arm-vgf.txt @@ -7,4 +7,3 @@ ai_ml_emulation_layer_for_vulkan == 0.9.0 ai_ml_sdk_model_converter == 0.9.0 -ai_ml_sdk_vgf_library == 0.9.0 diff --git a/backends/arm/scripts/setup-mlsdk-from-source.sh b/backends/arm/scripts/setup-mlsdk-from-source.sh index 0d6b6040bf9..d8ec1795a23 100755 --- a/backends/arm/scripts/setup-mlsdk-from-source.sh +++ b/backends/arm/scripts/setup-mlsdk-from-source.sh @@ -15,7 +15,7 @@ root_dir="${et_dir}/examples/arm/arm-scratch" setup_path_script="" mlsdk_manifest_dir="ml-sdk-for-vulkan-manifest" mlsdk_manifest_url="${MLSDK_MANIFEST_URL:-https://github.com/arm/ai-ml-sdk-manifest.git}" -mlsdk_manifest_tag="${MLSDK_MANIFEST_TAG:-refs/tags/v2026.03.0}" # Keep this in sync with what is mentioned in requirements-arm-vgf.txt +mlsdk_manifest_tag="${MLSDK_MANIFEST_TAG:-refs/tags/v2026.03.0}" # Keep this in sync with backends/arm/requirements-arm-vgf.txt and backends/arm/requirements-arm-vgf-runtime.txt enable_model_converter=0 enable_vgf_lib=0 diff --git a/examples/arm/setup.sh b/examples/arm/setup.sh index 323815b59a2..21acb3769d0 100755 --- a/examples/arm/setup.sh +++ b/examples/arm/setup.sh @@ -213,7 +213,13 @@ function setup_ethos_u_tools() { function setup_mlsdk_dependencies() { log_step "mlsdk" "Installing MLSDK dependencies" - pip install -r $et_dir/backends/arm/requirements-arm-vgf.txt + if [[ "${enable_model_converter}" -eq 1 || "${enable_emulation_layer}" -eq 1 ]]; then + pip install -r $et_dir/backends/arm/requirements-arm-vgf.txt + fi + + if [[ "${enable_vgf_lib}" -eq 1 ]]; then + pip install -r $et_dir/backends/arm/requirements-arm-vgf-runtime.txt + fi } function validate_mlsdk_pip_compatibility() { diff --git a/tools/cmake/preset/pybind.cmake b/tools/cmake/preset/pybind.cmake index ecce850ab3c..3ba3a680e5f 100644 --- a/tools/cmake/preset/pybind.cmake +++ b/tools/cmake/preset/pybind.cmake @@ -25,9 +25,22 @@ set_overridable_option(EXECUTORCH_BUILD_EXTENSION_MODULE ON) set_overridable_option(EXECUTORCH_BUILD_EXTENSION_NAMED_DATA_MAP ON) set_overridable_option(EXECUTORCH_BUILD_WHEEL_DO_NOT_USE ON) +# Optional VGF enable for the default pybind/install flow. This is intentionally +# scoped to this preset rather than acting as a general environment-to-CMake +# override mechanism. +set(_executorch_pybind_enable_vgf OFF) +if(DEFINED ENV{EXECUTORCH_PYBIND_ENABLE_VGF}) + set(_executorch_pybind_enable_vgf "$ENV{EXECUTORCH_PYBIND_ENABLE_VGF}") +endif() + # TODO(larryliu0820): Temporarily disable building llm_runner for Windows wheel # due to the issue of tokenizer file path length limitation. if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # VGF depends on Vulkan in the pybind flow. + set_overridable_option( + EXECUTORCH_BUILD_VULKAN ${_executorch_pybind_enable_vgf} + ) + set_overridable_option(EXECUTORCH_BUILD_VGF ${_executorch_pybind_enable_vgf}) set_overridable_option(EXECUTORCH_BUILD_COREML ON) set_overridable_option(EXECUTORCH_BUILD_EXTENSION_TRAINING ON) set_overridable_option(EXECUTORCH_BUILD_EXTENSION_LLM_RUNNER ON) @@ -51,6 +64,11 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") endif() endif() elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + # VGF depends on Vulkan in the pybind flow. + set_overridable_option( + EXECUTORCH_BUILD_VULKAN ${_executorch_pybind_enable_vgf} + ) + set_overridable_option(EXECUTORCH_BUILD_VGF ${_executorch_pybind_enable_vgf}) set_overridable_option(EXECUTORCH_BUILD_COREML ON) set_overridable_option(EXECUTORCH_BUILD_EXTENSION_TRAINING ON) set_overridable_option(EXECUTORCH_BUILD_EXTENSION_LLM_RUNNER ON) From cb9eecfbf59439ffab5d7414600f60483ae46d38 Mon Sep 17 00:00:00 2001 From: Rob Elliott Date: Tue, 5 May 2026 10:36:57 +0100 Subject: [PATCH 2/6] Normalize pybind VGF env opt-in Signed-off-by: Rob Elliott Change-Id: Idbe56c440a7c720d232d1e593674485509f687d1 --- tools/cmake/preset/pybind.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/cmake/preset/pybind.cmake b/tools/cmake/preset/pybind.cmake index 3ba3a680e5f..efd62c635b2 100644 --- a/tools/cmake/preset/pybind.cmake +++ b/tools/cmake/preset/pybind.cmake @@ -30,7 +30,11 @@ set_overridable_option(EXECUTORCH_BUILD_WHEEL_DO_NOT_USE ON) # override mechanism. set(_executorch_pybind_enable_vgf OFF) if(DEFINED ENV{EXECUTORCH_PYBIND_ENABLE_VGF}) - set(_executorch_pybind_enable_vgf "$ENV{EXECUTORCH_PYBIND_ENABLE_VGF}") + if("$ENV{EXECUTORCH_PYBIND_ENABLE_VGF}" STREQUAL "ON") + set(_executorch_pybind_enable_vgf ON) + else() + set(_executorch_pybind_enable_vgf OFF) + endif() endif() # TODO(larryliu0820): Temporarily disable building llm_runner for Windows wheel From 443dd511974d1668da72c931f4dc60b937804df0 Mon Sep 17 00:00:00 2001 From: Rob Elliott Date: Thu, 30 Apr 2026 14:56:14 +0100 Subject: [PATCH 3/6] Set up Vulkan SDK for VGF wheel builds Signed-off-by: Rob Elliott Change-Id: I5680de25e7a004ac6883bd4f855baee1bf6b4874 --- .ci/scripts/setup-vulkan-macos-deps.sh | 63 ++++++++++++++++++++++++++ .ci/scripts/wheel/pre_build_script.sh | 30 +++++++++++- tools/cmake/preset/pybind.cmake | 1 + 3 files changed, 92 insertions(+), 2 deletions(-) create mode 100755 .ci/scripts/setup-vulkan-macos-deps.sh diff --git a/.ci/scripts/setup-vulkan-macos-deps.sh b/.ci/scripts/setup-vulkan-macos-deps.sh new file mode 100755 index 00000000000..ce3798c52d5 --- /dev/null +++ b/.ci/scripts/setup-vulkan-macos-deps.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# Copyright 2026 Arm Limited and/or its affiliates. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +set -ex + +install_vulkan_sdk() { + VULKAN_SDK_VERSION=$1 + _vulkan_sdk_url="https://sdk.lunarg.com/sdk/download/${VULKAN_SDK_VERSION}/mac/vulkansdk-macos-${VULKAN_SDK_VERSION}.zip" + _vulkan_sdk_dir=/tmp/vulkansdk + _vulkan_sdk_extract_dir=/tmp/vulkansdk-installer + + mkdir -p "${_vulkan_sdk_dir}" + rm -rf "${_vulkan_sdk_extract_dir}" + mkdir -p "${_vulkan_sdk_extract_dir}" + + _tmp_archive="/tmp/vulkansdk-macos.zip" + + curl --silent --show-error --location --fail --retry 3 \ + --output "${_tmp_archive}" "${_vulkan_sdk_url}" + + unzip -q -o "${_tmp_archive}" -d "${_vulkan_sdk_extract_dir}" + + _vulkan_sdk_app_path="$( + find "${_vulkan_sdk_extract_dir}" -maxdepth 3 -type d \ + \( -name "vulkansdk-macOS-${VULKAN_SDK_VERSION}.app" \ + -o -name "vulkansdk-macos-${VULKAN_SDK_VERSION}.app" \) \ + -print -quit + )" + if [[ -z "${_vulkan_sdk_app_path}" ]]; then + echo "Failed to find Vulkan SDK installer app" + exit 1 + fi + _vulkan_sdk_installer="${_vulkan_sdk_app_path}/Contents/MacOS/$(basename "${_vulkan_sdk_app_path}" .app)" + if [[ ! -x "${_vulkan_sdk_installer}" ]]; then + echo "Failed to find Vulkan SDK installer binary at ${_vulkan_sdk_installer}" + exit 1 + fi + + "${_vulkan_sdk_installer}" \ + --root "${_vulkan_sdk_dir}/${VULKAN_SDK_VERSION}" \ + --accept-licenses \ + --default-answer \ + --confirm-command install + + export PATH="${PATH}:${_vulkan_sdk_dir}/${VULKAN_SDK_VERSION}/macOS/bin/" + export VULKAN_SDK="${_vulkan_sdk_dir}/${VULKAN_SDK_VERSION}/macOS" + export DYLD_LIBRARY_PATH="${_vulkan_sdk_dir}/${VULKAN_SDK_VERSION}/macOS/lib${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}" + + _moltenvk_icd="${VULKAN_SDK}/share/vulkan/icd.d/MoltenVK_icd.json" + if [[ -f "${_moltenvk_icd}" ]]; then + export VK_DRIVER_FILES="${_moltenvk_icd}" + fi +} + +VULKAN_SDK_VERSION="1.4.321.0" + +install_vulkan_sdk "${VULKAN_SDK_VERSION}" diff --git a/.ci/scripts/wheel/pre_build_script.sh b/.ci/scripts/wheel/pre_build_script.sh index 5ce42c6315f..2c4e4ff4dfb 100755 --- a/.ci/scripts/wheel/pre_build_script.sh +++ b/.ci/scripts/wheel/pre_build_script.sh @@ -2,6 +2,8 @@ # Copyright (c) Meta Platforms, Inc. and affiliates. # All rights reserved. # +# Copyright 2026 Arm Limited and/or its affiliates. +# # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. @@ -57,13 +59,37 @@ fi "${GITHUB_WORKSPACE}/${REPOSITORY}/install_requirements.sh" --example +setup_vulkan_for_vgf() { + if [[ "$UNAME_S" == "Linux" && "$(uname -m)" == "x86_64" ]]; then + source "${GITHUB_WORKSPACE}/${REPOSITORY}/.ci/scripts/setup-vulkan-linux-deps.sh" + elif [[ "$UNAME_S" == "Darwin" ]]; then + source "${GITHUB_WORKSPACE}/${REPOSITORY}/.ci/scripts/setup-vulkan-macos-deps.sh" + fi + + if ! command -v glslc >/dev/null 2>&1; then + return 1 + fi + + for _var in PATH VULKAN_SDK LD_LIBRARY_PATH DYLD_LIBRARY_PATH VK_ICD_FILENAMES VK_DRIVER_FILES ETVK_USING_SWIFTSHADER; do + if [[ -n "${!_var:-}" ]]; then + echo "${_var}=${!_var}" >> "${GITHUB_ENV}" + fi + done + + return 0 +} + # Enable VGF in pybind wheel builds when the platform-specific build input is # available from pip. if [[ "$UNAME_S" == "Linux" || "$UNAME_S" == "Darwin" ]]; then if python3 -m pip install -r \ "${GITHUB_WORKSPACE}/${REPOSITORY}/backends/arm/requirements-arm-vgf-runtime.txt"; then - export EXECUTORCH_PYBIND_ENABLE_VGF=ON - echo "EXECUTORCH_PYBIND_ENABLE_VGF=ON" >> "${GITHUB_ENV}" + if setup_vulkan_for_vgf; then + export EXECUTORCH_PYBIND_ENABLE_VGF=ON + echo "EXECUTORCH_PYBIND_ENABLE_VGF=ON" >> "${GITHUB_ENV}" + else + echo "glslc unavailable after VGF build dependency install; building without VGF" + fi else echo "VGF build dependency unavailable on this platform; building without VGF" fi diff --git a/tools/cmake/preset/pybind.cmake b/tools/cmake/preset/pybind.cmake index efd62c635b2..d56c81c4042 100644 --- a/tools/cmake/preset/pybind.cmake +++ b/tools/cmake/preset/pybind.cmake @@ -1,5 +1,6 @@ # Copyright (c) Meta Platforms, Inc. and affiliates. # All rights reserved. +# Copyright 2026 Arm Limited and/or its affiliates. # # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. From a61aa959fd0d832b63e68041a94939634d6fa232 Mon Sep 17 00:00:00 2001 From: Rob Elliott Date: Wed, 6 May 2026 09:11:47 +0100 Subject: [PATCH 4/6] Build VGF pybind without Vulkan backend Signed-off-by: Rob Elliott Change-Id: Id1514f7154e3e449d7d85c3b0e841cdb1cb1ebb7 --- .ci/scripts/setup-vulkan-macos-deps.sh | 63 -------------------------- .ci/scripts/wheel/pre_build_script.sh | 28 +----------- tools/cmake/preset/pybind.cmake | 8 ---- 3 files changed, 2 insertions(+), 97 deletions(-) delete mode 100755 .ci/scripts/setup-vulkan-macos-deps.sh diff --git a/.ci/scripts/setup-vulkan-macos-deps.sh b/.ci/scripts/setup-vulkan-macos-deps.sh deleted file mode 100755 index ce3798c52d5..00000000000 --- a/.ci/scripts/setup-vulkan-macos-deps.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -# Copyright (c) Meta Platforms, Inc. and affiliates. -# All rights reserved. -# -# Copyright 2026 Arm Limited and/or its affiliates. -# -# This source code is licensed under the BSD-style license found in the -# LICENSE file in the root directory of this source tree. - -set -ex - -install_vulkan_sdk() { - VULKAN_SDK_VERSION=$1 - _vulkan_sdk_url="https://sdk.lunarg.com/sdk/download/${VULKAN_SDK_VERSION}/mac/vulkansdk-macos-${VULKAN_SDK_VERSION}.zip" - _vulkan_sdk_dir=/tmp/vulkansdk - _vulkan_sdk_extract_dir=/tmp/vulkansdk-installer - - mkdir -p "${_vulkan_sdk_dir}" - rm -rf "${_vulkan_sdk_extract_dir}" - mkdir -p "${_vulkan_sdk_extract_dir}" - - _tmp_archive="/tmp/vulkansdk-macos.zip" - - curl --silent --show-error --location --fail --retry 3 \ - --output "${_tmp_archive}" "${_vulkan_sdk_url}" - - unzip -q -o "${_tmp_archive}" -d "${_vulkan_sdk_extract_dir}" - - _vulkan_sdk_app_path="$( - find "${_vulkan_sdk_extract_dir}" -maxdepth 3 -type d \ - \( -name "vulkansdk-macOS-${VULKAN_SDK_VERSION}.app" \ - -o -name "vulkansdk-macos-${VULKAN_SDK_VERSION}.app" \) \ - -print -quit - )" - if [[ -z "${_vulkan_sdk_app_path}" ]]; then - echo "Failed to find Vulkan SDK installer app" - exit 1 - fi - _vulkan_sdk_installer="${_vulkan_sdk_app_path}/Contents/MacOS/$(basename "${_vulkan_sdk_app_path}" .app)" - if [[ ! -x "${_vulkan_sdk_installer}" ]]; then - echo "Failed to find Vulkan SDK installer binary at ${_vulkan_sdk_installer}" - exit 1 - fi - - "${_vulkan_sdk_installer}" \ - --root "${_vulkan_sdk_dir}/${VULKAN_SDK_VERSION}" \ - --accept-licenses \ - --default-answer \ - --confirm-command install - - export PATH="${PATH}:${_vulkan_sdk_dir}/${VULKAN_SDK_VERSION}/macOS/bin/" - export VULKAN_SDK="${_vulkan_sdk_dir}/${VULKAN_SDK_VERSION}/macOS" - export DYLD_LIBRARY_PATH="${_vulkan_sdk_dir}/${VULKAN_SDK_VERSION}/macOS/lib${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}" - - _moltenvk_icd="${VULKAN_SDK}/share/vulkan/icd.d/MoltenVK_icd.json" - if [[ -f "${_moltenvk_icd}" ]]; then - export VK_DRIVER_FILES="${_moltenvk_icd}" - fi -} - -VULKAN_SDK_VERSION="1.4.321.0" - -install_vulkan_sdk "${VULKAN_SDK_VERSION}" diff --git a/.ci/scripts/wheel/pre_build_script.sh b/.ci/scripts/wheel/pre_build_script.sh index 2c4e4ff4dfb..5ad57f3c710 100755 --- a/.ci/scripts/wheel/pre_build_script.sh +++ b/.ci/scripts/wheel/pre_build_script.sh @@ -59,37 +59,13 @@ fi "${GITHUB_WORKSPACE}/${REPOSITORY}/install_requirements.sh" --example -setup_vulkan_for_vgf() { - if [[ "$UNAME_S" == "Linux" && "$(uname -m)" == "x86_64" ]]; then - source "${GITHUB_WORKSPACE}/${REPOSITORY}/.ci/scripts/setup-vulkan-linux-deps.sh" - elif [[ "$UNAME_S" == "Darwin" ]]; then - source "${GITHUB_WORKSPACE}/${REPOSITORY}/.ci/scripts/setup-vulkan-macos-deps.sh" - fi - - if ! command -v glslc >/dev/null 2>&1; then - return 1 - fi - - for _var in PATH VULKAN_SDK LD_LIBRARY_PATH DYLD_LIBRARY_PATH VK_ICD_FILENAMES VK_DRIVER_FILES ETVK_USING_SWIFTSHADER; do - if [[ -n "${!_var:-}" ]]; then - echo "${_var}=${!_var}" >> "${GITHUB_ENV}" - fi - done - - return 0 -} - # Enable VGF in pybind wheel builds when the platform-specific build input is # available from pip. if [[ "$UNAME_S" == "Linux" || "$UNAME_S" == "Darwin" ]]; then if python3 -m pip install -r \ "${GITHUB_WORKSPACE}/${REPOSITORY}/backends/arm/requirements-arm-vgf-runtime.txt"; then - if setup_vulkan_for_vgf; then - export EXECUTORCH_PYBIND_ENABLE_VGF=ON - echo "EXECUTORCH_PYBIND_ENABLE_VGF=ON" >> "${GITHUB_ENV}" - else - echo "glslc unavailable after VGF build dependency install; building without VGF" - fi + export EXECUTORCH_PYBIND_ENABLE_VGF=ON + echo "EXECUTORCH_PYBIND_ENABLE_VGF=ON" >> "${GITHUB_ENV}" else echo "VGF build dependency unavailable on this platform; building without VGF" fi diff --git a/tools/cmake/preset/pybind.cmake b/tools/cmake/preset/pybind.cmake index d56c81c4042..0b84fb93d79 100644 --- a/tools/cmake/preset/pybind.cmake +++ b/tools/cmake/preset/pybind.cmake @@ -41,10 +41,6 @@ endif() # TODO(larryliu0820): Temporarily disable building llm_runner for Windows wheel # due to the issue of tokenizer file path length limitation. if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - # VGF depends on Vulkan in the pybind flow. - set_overridable_option( - EXECUTORCH_BUILD_VULKAN ${_executorch_pybind_enable_vgf} - ) set_overridable_option(EXECUTORCH_BUILD_VGF ${_executorch_pybind_enable_vgf}) set_overridable_option(EXECUTORCH_BUILD_COREML ON) set_overridable_option(EXECUTORCH_BUILD_EXTENSION_TRAINING ON) @@ -69,10 +65,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") endif() endif() elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - # VGF depends on Vulkan in the pybind flow. - set_overridable_option( - EXECUTORCH_BUILD_VULKAN ${_executorch_pybind_enable_vgf} - ) set_overridable_option(EXECUTORCH_BUILD_VGF ${_executorch_pybind_enable_vgf}) set_overridable_option(EXECUTORCH_BUILD_COREML ON) set_overridable_option(EXECUTORCH_BUILD_EXTENSION_TRAINING ON) From 248351364f7640d01dc1956a7b9c15bec2f1fb5a Mon Sep 17 00:00:00 2001 From: Rob Elliott Date: Wed, 6 May 2026 09:28:36 +0100 Subject: [PATCH 5/6] Quote Arm setup paths and clarify VGF runtime deps --- backends/arm/requirements-arm-vgf-runtime.txt | 2 +- examples/arm/setup.sh | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backends/arm/requirements-arm-vgf-runtime.txt b/backends/arm/requirements-arm-vgf-runtime.txt index f89a0f81cce..e395862d0dd 100644 --- a/backends/arm/requirements-arm-vgf-runtime.txt +++ b/backends/arm/requirements-arm-vgf-runtime.txt @@ -3,6 +3,6 @@ # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. -# These dependencies need to match pyproject.toml +# Runtime build dependencies for the Arm VGF backend. ai_ml_sdk_vgf_library == 0.9.0 diff --git a/examples/arm/setup.sh b/examples/arm/setup.sh index 21acb3769d0..7d452293766 100755 --- a/examples/arm/setup.sh +++ b/examples/arm/setup.sh @@ -184,7 +184,7 @@ function check_options() { ;; --setup-test-dependency) log_step "deps" "Installing test dependency..." - source $et_dir/backends/arm/scripts/install_models_for_test.sh + source "$et_dir/backends/arm/scripts/install_models_for_test.sh" exit 0 ;; --help) @@ -208,17 +208,17 @@ function setup_root_dir() { function setup_ethos_u_tools() { log_step "ethos-u-tools" "Installing Ethos-U Python tooling" - CMAKE_POLICY_VERSION_MINIMUM=3.5 BUILD_PYBIND=1 pip install --no-dependencies -r $et_dir/backends/arm/requirements-arm-ethos-u.txt + CMAKE_POLICY_VERSION_MINIMUM=3.5 BUILD_PYBIND=1 pip install --no-dependencies -r "$et_dir/backends/arm/requirements-arm-ethos-u.txt" } function setup_mlsdk_dependencies() { log_step "mlsdk" "Installing MLSDK dependencies" if [[ "${enable_model_converter}" -eq 1 || "${enable_emulation_layer}" -eq 1 ]]; then - pip install -r $et_dir/backends/arm/requirements-arm-vgf.txt + pip install -r "$et_dir/backends/arm/requirements-arm-vgf.txt" fi if [[ "${enable_vgf_lib}" -eq 1 ]]; then - pip install -r $et_dir/backends/arm/requirements-arm-vgf-runtime.txt + pip install -r "$et_dir/backends/arm/requirements-arm-vgf-runtime.txt" fi } From cd83df0338abbc391a928e47b6107ef5ea6fad5a Mon Sep 17 00:00:00 2001 From: Rob Elliott Date: Wed, 6 May 2026 09:50:17 +0100 Subject: [PATCH 6/6] Arm backend: Build Arm VGF backend with volk when Vulkan is disabled Signed-off-by: Rob Elliott Change-Id: I54aed1895840a6225b04a260aa6c2196f26abe75 Signed-off-by: Rob Elliott --- backends/arm/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backends/arm/CMakeLists.txt b/backends/arm/CMakeLists.txt index 12c46107104..81a5d488c1a 100644 --- a/backends/arm/CMakeLists.txt +++ b/backends/arm/CMakeLists.txt @@ -160,6 +160,9 @@ if(EXECUTORCH_BUILD_VGF) set(_vgf_backend_sources backends/arm/runtime/VGFBackend.cpp backends/arm/runtime/VGFSetup.cpp ) + if(NOT EXECUTORCH_BUILD_VULKAN) + list(APPEND _vgf_backend_sources backends/vulkan/third-party/volk/volk.c) + endif() # vgf backend list(TRANSFORM _vgf_backend_sources PREPEND "${EXECUTORCH_ROOT}/")