From ce631376ef7d606d2e8b1dd1c50b61fa98f9c13a Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Tue, 26 Aug 2025 10:20:25 -0700 Subject: [PATCH 1/7] qnn? --- .github/workflows/android-release-artifacts.yml | 14 +++++++++++++- extension/android/executorch_android/build.gradle | 7 ++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index 278e5abcc5f..447dec79f9e 100644 --- a/.github/workflows/android-release-artifacts.yml +++ b/.github/workflows/android-release-artifacts.yml @@ -16,6 +16,7 @@ on: options: - "xnnpack" - "vulkan+xnnpack" + - "qnn" schedule: - cron: 0 10 * * * @@ -89,11 +90,22 @@ jobs: sed -i "s/\(coordinates(\"org.pytorch\", \"executorch-android\", \"\)\([0-9]\+.[0-9]\+.[0-9]\+\)\(\")\)/\1$VERSION\3/" extension/android/executorch_android/build.gradle fi + GRADLE_ARGS="" + FLAVOR="${{ inputs.flavor }}" if [[ "$FLAVOR" == "vulkan+xnnpack" || -z "$FLAVOR" ]]; then export EXECUTORCH_BUILD_VULKAN=ON fi + if [[ "$FLAVOR" == "qnn" ]]; then + PYTHON_EXECUTABLE=python bash .ci/scripts/setup-qnn-deps.sh + PYTHON_EXECUTABLE=python bash .ci/scripts/build-qnn-sdk.sh + export EXECUTORCH_BUILD_QNN=ON + export QNN_SDK_ROOT=/tmp/qnn/2.28.0.241029 + export ANDROID_ABIS=arm64-v8a + GRADLE_ARGS+="-DqnnVersion=2.33.0" + fi + # Build AAR Package mkdir aar-out export BUILD_AAR_DIR=aar-out @@ -106,7 +118,7 @@ jobs: # Publish to maven staging UPLOAD_TO_MAVEN="${{ inputs.upload_to_maven }}" if [[ "$UPLOAD_TO_MAVEN" == "true" ]]; then - (cd extension/android; ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew :executorch_android:publishToMavenCentral) + (cd extension/android; ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew ${GRADLE_ARGS} :executorch_android:publishToMavenCentral) fi upload-release-aar: diff --git a/extension/android/executorch_android/build.gradle b/extension/android/executorch_android/build.gradle index 330dfc83479..ea6803de48f 100644 --- a/extension/android/executorch_android/build.gradle +++ b/extension/android/executorch_android/build.gradle @@ -6,6 +6,8 @@ * LICENSE file in the root directory of this source tree. */ +def qnnVersion = System.properties['qnnVersion'] + plugins { id "com.android.library" version "8.9.0" id "com.vanniktech.maven.publish" version "0.31.0" @@ -56,13 +58,16 @@ dependencies { androidTestImplementation 'commons-io:commons-io:2.4' androidTestImplementation 'org.json:json:20250107' androidTestImplementation 'org.jetbrains.kotlin:kotlin-test:1.9.23' + if (qnnVersion) { + implementation "com.qualcomm.qti:qnn-runtime:$qnnVersion" + } } mavenPublishing { publishToMavenCentral() signAllPublications() - coordinates("org.pytorch", "executorch-android", "0.7.0-SNAPSHOT") + coordinates("org.pytorch", "executorch-android" + (qnnVersion ? "-qnn" : ""), "0.7.0-SNAPSHOT") pom { name = "ExecuTorch Android" From 86fd33221b57a89a1b78468964848cc1a4b7c9ce Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Tue, 26 Aug 2025 11:04:55 -0700 Subject: [PATCH 2/7] fix --- extension/android/executorch_android/build.gradle | 3 ++- scripts/build_android_library.sh | 13 ------------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/extension/android/executorch_android/build.gradle b/extension/android/executorch_android/build.gradle index ea6803de48f..0cdb5392b43 100644 --- a/extension/android/executorch_android/build.gradle +++ b/extension/android/executorch_android/build.gradle @@ -6,7 +6,6 @@ * LICENSE file in the root directory of this source tree. */ -def qnnVersion = System.properties['qnnVersion'] plugins { id "com.android.library" version "8.9.0" @@ -14,6 +13,8 @@ plugins { alias(libs.plugins.jetbrains.kotlin.android) } +def qnnVersion = System.properties['qnnVersion'] + android { namespace = "org.pytorch.executorch" compileSdk = 34 diff --git a/scripts/build_android_library.sh b/scripts/build_android_library.sh index 7bc52f01863..5953c2de47a 100755 --- a/scripts/build_android_library.sh +++ b/scripts/build_android_library.sh @@ -64,19 +64,6 @@ build_android_native_library() { mkdir -p ${SO_STAGE_DIR} cp "${CMAKE_OUT}"/extension/android/*.so "${SO_STAGE_DIR}/libexecutorch.so" - # Copy QNN related so library - if [ -n "$QNN_SDK_ROOT" ] && [ "$ANDROID_ABI" == "arm64-v8a" ]; then - cp "${CMAKE_OUT}"/lib/libqnn_executorch_backend.so ${SO_STAGE_DIR} - cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtp.so ${SO_STAGE_DIR} - cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnSystem.so ${SO_STAGE_DIR} - cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtpV69Stub.so ${SO_STAGE_DIR} - cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtpV73Stub.so ${SO_STAGE_DIR} - cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtpV75Stub.so ${SO_STAGE_DIR} - cp "${QNN_SDK_ROOT}"/lib/hexagon-v69/unsigned/libQnnHtpV69Skel.so ${SO_STAGE_DIR} - cp "${QNN_SDK_ROOT}"/lib/hexagon-v73/unsigned/libQnnHtpV73Skel.so ${SO_STAGE_DIR} - cp "${QNN_SDK_ROOT}"/lib/hexagon-v75/unsigned/libQnnHtpV75Skel.so ${SO_STAGE_DIR} - fi - # Copy MTK related so library if [ -n "$NEURON_BUFFER_ALLOCATOR_LIB" ] && [ -n "$NEURON_USDK_ADAPTER_LIB" ] && [ "$ANDROID_ABI" == "arm64-v8a" ]; then cp "${CMAKE_OUT}"/backends/mediatek/libneuron_backend.so ${SO_STAGE_DIR} From e325dc83f6626c017dec87d8f611a98c3dd90535 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Tue, 26 Aug 2025 12:13:38 -0700 Subject: [PATCH 3/7] update --- .github/workflows/android-release-artifacts.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index 447dec79f9e..58661923a6c 100644 --- a/.github/workflows/android-release-artifacts.yml +++ b/.github/workflows/android-release-artifacts.yml @@ -101,7 +101,8 @@ jobs: PYTHON_EXECUTABLE=python bash .ci/scripts/setup-qnn-deps.sh PYTHON_EXECUTABLE=python bash .ci/scripts/build-qnn-sdk.sh export EXECUTORCH_BUILD_QNN=ON - export QNN_SDK_ROOT=/tmp/qnn/2.28.0.241029 + source backends/qualcomm/scripts/qnn_config.sh + export QNN_SDK_ROOT="/tmp/qnn/${QNN_VERSION}" export ANDROID_ABIS=arm64-v8a GRADLE_ARGS+="-DqnnVersion=2.33.0" fi From 15b94608d3fb4252524551c0fd372670127ba6c9 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Tue, 26 Aug 2025 12:14:08 -0700 Subject: [PATCH 4/7] use 2.28.0? --- .github/workflows/android-release-artifacts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index 58661923a6c..d219a3ae561 100644 --- a/.github/workflows/android-release-artifacts.yml +++ b/.github/workflows/android-release-artifacts.yml @@ -104,7 +104,7 @@ jobs: source backends/qualcomm/scripts/qnn_config.sh export QNN_SDK_ROOT="/tmp/qnn/${QNN_VERSION}" export ANDROID_ABIS=arm64-v8a - GRADLE_ARGS+="-DqnnVersion=2.33.0" + GRADLE_ARGS+="-DqnnVersion=2.28.0" fi # Build AAR Package From 830f809c84ce05e952d0399d8b4caf156aacd1fc Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Tue, 26 Aug 2025 13:42:52 -0700 Subject: [PATCH 5/7] Fix --- scripts/build_android_library.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/build_android_library.sh b/scripts/build_android_library.sh index 5953c2de47a..a50d15709bd 100755 --- a/scripts/build_android_library.sh +++ b/scripts/build_android_library.sh @@ -64,6 +64,11 @@ build_android_native_library() { mkdir -p ${SO_STAGE_DIR} cp "${CMAKE_OUT}"/extension/android/*.so "${SO_STAGE_DIR}/libexecutorch.so" + # Copy QNN related so library + if [ -n "$QNN_SDK_ROOT" ] && [ "$ANDROID_ABI" == "arm64-v8a" ]; then + cp "${CMAKE_OUT}"/lib/libqnn_executorch_backend.so ${SO_STAGE_DIR} + fi + # Copy MTK related so library if [ -n "$NEURON_BUFFER_ALLOCATOR_LIB" ] && [ -n "$NEURON_USDK_ADAPTER_LIB" ] && [ "$ANDROID_ABI" == "arm64-v8a" ]; then cp "${CMAKE_OUT}"/backends/mediatek/libneuron_backend.so ${SO_STAGE_DIR} From 7ec5f3274522e94731e78a8aaf95bd28b74f5878 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Wed, 27 Aug 2025 12:54:45 -0700 Subject: [PATCH 6/7] update version --- .github/workflows/android-release-artifacts.yml | 6 +++--- extension/android/executorch_android/build.gradle | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index d219a3ae561..e8ee17d89c6 100644 --- a/.github/workflows/android-release-artifacts.yml +++ b/.github/workflows/android-release-artifacts.yml @@ -84,14 +84,14 @@ jobs: echo -n "$SECRET_EXECUTORCH_MAVEN_SIGNING_GPG_KEY_CONTENTS" | base64 -d > /tmp/secring.gpg + GRADLE_ARGS="" + # Update the version name in build.gradle in case of maven publish VERSION="${{ inputs.version }}" if [ ! -z "$VERSION" ]; then - sed -i "s/\(coordinates(\"org.pytorch\", \"executorch-android\", \"\)\([0-9]\+.[0-9]\+.[0-9]\+\)\(\")\)/\1$VERSION\3/" extension/android/executorch_android/build.gradle + GRADLE_ARGS+="-DexecuTorchVersion=${VERSION}" fi - GRADLE_ARGS="" - FLAVOR="${{ inputs.flavor }}" if [[ "$FLAVOR" == "vulkan+xnnpack" || -z "$FLAVOR" ]]; then export EXECUTORCH_BUILD_VULKAN=ON diff --git a/extension/android/executorch_android/build.gradle b/extension/android/executorch_android/build.gradle index 0cdb5392b43..7d91cfd1194 100644 --- a/extension/android/executorch_android/build.gradle +++ b/extension/android/executorch_android/build.gradle @@ -14,6 +14,7 @@ plugins { } def qnnVersion = System.properties['qnnVersion'] +def execuTorchVersion = System.properties['execuTorchVersion'] android { namespace = "org.pytorch.executorch" @@ -68,7 +69,7 @@ mavenPublishing { publishToMavenCentral() signAllPublications() - coordinates("org.pytorch", "executorch-android" + (qnnVersion ? "-qnn" : ""), "0.7.0-SNAPSHOT") + coordinates("org.pytorch", "executorch-android" + (qnnVersion ? "-qnn" : ""), execuTorchVersion ? execuTorchVersion : "0.7.0-SNAPSHOT") pom { name = "ExecuTorch Android" From 9e3e44583e5122dd7c8f703402ce1bc6f425222b Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Wed, 27 Aug 2025 14:01:11 -0700 Subject: [PATCH 7/7] update version --- .github/workflows/android-release-artifacts.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index e8ee17d89c6..1e6057ac3ef 100644 --- a/.github/workflows/android-release-artifacts.yml +++ b/.github/workflows/android-release-artifacts.yml @@ -89,7 +89,7 @@ jobs: # Update the version name in build.gradle in case of maven publish VERSION="${{ inputs.version }}" if [ ! -z "$VERSION" ]; then - GRADLE_ARGS+="-DexecuTorchVersion=${VERSION}" + GRADLE_ARGS+=" -DexecuTorchVersion=${VERSION}" fi FLAVOR="${{ inputs.flavor }}" @@ -104,7 +104,7 @@ jobs: source backends/qualcomm/scripts/qnn_config.sh export QNN_SDK_ROOT="/tmp/qnn/${QNN_VERSION}" export ANDROID_ABIS=arm64-v8a - GRADLE_ARGS+="-DqnnVersion=2.28.0" + GRADLE_ARGS+=" -DqnnVersion=2.28.0" fi # Build AAR Package