diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index c02c164d47e..87752f838a6 100644 --- a/.github/workflows/android-release-artifacts.yml +++ b/.github/workflows/android-release-artifacts.yml @@ -15,6 +15,7 @@ on: type: choice options: - "xnnpack" + - "xnnpack-no-sme2" - "vulkan" - "qnn" - "all" @@ -102,6 +103,10 @@ jobs: export EXECUTORCH_BUILD_VULKAN=ON fi + if [[ "$FLAVOR" == "xnnpack-no-sme2" ]]; then + export XNNPACK_ENABLE_ARM_SME2=OFF + fi + if [[ "$FLAVOR" == "qnn" || "$FLAVOR" == "all" ]]; then PYTHON_EXECUTABLE=python bash .ci/scripts/setup-qnn-deps.sh PYTHON_EXECUTABLE=python bash .ci/scripts/build-qnn-sdk.sh diff --git a/backends/xnnpack/cmake/Dependencies.cmake b/backends/xnnpack/cmake/Dependencies.cmake index 62c8e7e0288..4fb80d5c18c 100644 --- a/backends/xnnpack/cmake/Dependencies.cmake +++ b/backends/xnnpack/cmake/Dependencies.cmake @@ -42,6 +42,8 @@ set(XNNPACK_ENABLE_AVX512VNNIGFNI OFF CACHE BOOL "" ) +# Enable ARM SME2 by default. Can be disabled with -DXNNPACK_ENABLE_ARM_SME2=OFF +# for Android emulator compatibility, which may crash with SME2 kernels. set(XNNPACK_ENABLE_ARM_SME2 ON CACHE BOOL "" diff --git a/scripts/build_android_library.sh b/scripts/build_android_library.sh index a9934bbc508..05f06da4fcd 100755 --- a/scripts/build_android_library.sh +++ b/scripts/build_android_library.sh @@ -33,6 +33,7 @@ build_android_native_library() { fi EXECUTORCH_BUILD_VULKAN="${EXECUTORCH_BUILD_VULKAN:-OFF}" + XNNPACK_ENABLE_ARM_SME2="${XNNPACK_ENABLE_ARM_SME2:-ON}" cmake . -DCMAKE_INSTALL_PREFIX="${CMAKE_OUT}" \ -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" \ @@ -48,6 +49,7 @@ build_android_native_library() { -DEXECUTORCH_BUILD_QNN="${EXECUTORCH_BUILD_QNN}" \ -DQNN_SDK_ROOT="${QNN_SDK_ROOT}" \ -DEXECUTORCH_BUILD_VULKAN="${EXECUTORCH_BUILD_VULKAN}" \ + -DXNNPACK_ENABLE_ARM_SME2="${XNNPACK_ENABLE_ARM_SME2}" \ -DSUPPORT_REGEX_LOOKAHEAD=ON \ -DCMAKE_BUILD_TYPE="${EXECUTORCH_CMAKE_BUILD_TYPE}" \ -B"${CMAKE_OUT}"