diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index 278e5abcc5f..1e6057ac3ef 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 * * * @@ -83,10 +84,12 @@ 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 FLAVOR="${{ inputs.flavor }}" @@ -94,6 +97,16 @@ jobs: 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 + 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" + fi + # Build AAR Package mkdir aar-out export BUILD_AAR_DIR=aar-out @@ -106,7 +119,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..7d91cfd1194 100644 --- a/extension/android/executorch_android/build.gradle +++ b/extension/android/executorch_android/build.gradle @@ -6,12 +6,16 @@ * LICENSE file in the root directory of this source tree. */ + plugins { id "com.android.library" version "8.9.0" id "com.vanniktech.maven.publish" version "0.31.0" alias(libs.plugins.jetbrains.kotlin.android) } +def qnnVersion = System.properties['qnnVersion'] +def execuTorchVersion = System.properties['execuTorchVersion'] + android { namespace = "org.pytorch.executorch" compileSdk = 34 @@ -56,13 +60,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" : ""), execuTorchVersion ? execuTorchVersion : "0.7.0-SNAPSHOT") pom { name = "ExecuTorch Android" diff --git a/scripts/build_android_library.sh b/scripts/build_android_library.sh index 7bc52f01863..a50d15709bd 100755 --- a/scripts/build_android_library.sh +++ b/scripts/build_android_library.sh @@ -67,14 +67,6 @@ build_android_native_library() { # 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