diff --git a/.github/workflows/_android.yml b/.github/workflows/_android.yml index 7061eb72aa3..418ddd7109e 100644 --- a/.github/workflows/_android.yml +++ b/.github/workflows/_android.yml @@ -29,8 +29,25 @@ jobs: export ARTIFACTS_DIR_NAME=artifacts-to-be-uploaded # Build LLM Demo for Android + export BUILD_AAR_DIR=aar-out bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME} - bash build/build_android_instrumentation.sh + bash build/build_android_instrumentation.sh ${ARTIFACTS_DIR_NAME} + + mkdir -p ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom + bash ".ci/scripts/test_llama.sh" -model stories110M -build_tool cmake -dtype fp16 -mode portable -upload ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom + + mkdir -p examples/demo-apps/android/LlamaDemo/app/libs + cp aar-out/executorch.aar examples/demo-apps/android/LlamaDemo/app/libs + pushd examples/demo-apps/android/LlamaDemo + ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew build assembleAndroidTest + popd + + DEMO_APP_DIR="${ARTIFACTS_DIR_NAME}/llm_demo" + # The app directory is named using its build flavor as a suffix. + mkdir -p "${DEMO_APP_DIR}" + # Collect the app and its test suite + cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/debug/*.apk "${DEMO_APP_DIR}" + cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/androidTest/debug/*.apk "${DEMO_APP_DIR}" # Running Android emulator directly on the runner and not using Docker run-emulator: diff --git a/.github/workflows/android-perf.yml b/.github/workflows/android-perf.yml index fbd2cae24e0..e775d7316e6 100644 --- a/.github/workflows/android-perf.yml +++ b/.github/workflows/android-perf.yml @@ -362,8 +362,17 @@ jobs: PYTHON_EXECUTABLE=python bash .ci/scripts/setup-qnn-deps.sh PYTHON_EXECUTABLE=python bash .ci/scripts/build-qnn-sdk.sh - export ANDROID_ABIS="arm64-v8a" - PYTHON_EXECUTABLE=python EXECUTORCH_BUILD_QNN=ON QNN_SDK_ROOT=/tmp/qnn/2.28.0.241029 bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME} + mkdir -p aar-out + PYTHON_EXECUTABLE=python ANDROID_ABIS="arm64-v8a" BUILD_AAR_DIR=aar-out EXECUTORCH_BUILD_QNN=ON QNN_SDK_ROOT=/tmp/qnn/2.28.0.241029 bash build/build_android_library.sh + mkdir -p extension/benchmark/android/benchmark/app/libs + cp aar-out/executorch.aar extension/benchmark/android/benchmark/app/libs + pushd extension/benchmark/android/benchmark + ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew build assembleAndroidTest + popd + MINIBENCH_APP_DIR="${ARTIFACTS_DIR_NAME}/minibench" + mkdir -p "${MINIBENCH_APP_DIR}" + cp extension/benchmark/android/benchmark/app/build/outputs/apk/debug/*.apk "${MINIBENCH_APP_DIR}" + cp extension/benchmark/android/benchmark/app/build/outputs/apk/androidTest/debug/*.apk "${MINIBENCH_APP_DIR}" # Let's see how expensive this job is, we might want to tone it down by running it periodically benchmark-on-device: diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index 26423e59233..8809c77962a 100644 --- a/.github/workflows/android-release-artifacts.yml +++ b/.github/workflows/android-release-artifacts.yml @@ -52,8 +52,12 @@ jobs: PYTHON_EXECUTABLE=python bash .ci/scripts/setup-linux.sh --build-tool buck2 export ARTIFACTS_DIR_NAME=artifacts-to-be-uploaded - # Build LLM Demo for Android - bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME} + # Build AAR Package + mkdir aar-out + export BUILD_AAR_DIR=aar-out + bash build/build_android_library.sh + mkdir -p "${ARTIFACTS_DIR_NAME}/llm_demo" + cp aar-out/executorch.aar "${ARTIFACTS_DIR_NAME}/llm_demo/executorch.aar" shasum -a 256 "${ARTIFACTS_DIR_NAME}/llm_demo/executorch.aar" diff --git a/build/build_android_library.sh b/build/build_android_library.sh index 32b2210a54e..8f3b28d12e1 100644 --- a/build/build_android_library.sh +++ b/build/build_android_library.sh @@ -137,38 +137,6 @@ build_aar() { popd } -build_android_demo_apps() { - mkdir -p examples/demo-apps/android/LlamaDemo/app/libs - cp ${BUILD_AAR_DIR}/executorch.aar examples/demo-apps/android/LlamaDemo/app/libs - pushd examples/demo-apps/android/LlamaDemo - ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew build assembleAndroidTest - popd - - mkdir -p extension/benchmark/android/benchmark/app/libs - cp ${BUILD_AAR_DIR}/executorch.aar extension/benchmark/android/benchmark/app/libs - pushd extension/benchmark/android/benchmark - ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew build assembleAndroidTest - popd -} - -collect_artifacts_to_be_uploaded() { - ARTIFACTS_DIR_NAME="$1" - DEMO_APP_DIR="${ARTIFACTS_DIR_NAME}/llm_demo" - # The app directory is named using its build flavor as a suffix. - mkdir -p "${DEMO_APP_DIR}" - # Collect the app and its test suite - cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/debug/*.apk "${DEMO_APP_DIR}" - cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/androidTest/debug/*.apk "${DEMO_APP_DIR}" - # Collect JAR and AAR - cp extension/android/build/libs/executorch.jar "${DEMO_APP_DIR}" - find "${BUILD_AAR_DIR}/" -name 'executorch*.aar' -exec cp {} "${DEMO_APP_DIR}" \; - # Collect MiniBench APK - MINIBENCH_APP_DIR="${ARTIFACTS_DIR_NAME}/minibench" - mkdir -p "${MINIBENCH_APP_DIR}" - cp extension/benchmark/android/benchmark/app/build/outputs/apk/debug/*.apk "${MINIBENCH_APP_DIR}" - cp extension/benchmark/android/benchmark/app/build/outputs/apk/androidTest/debug/*.apk "${MINIBENCH_APP_DIR}" -} - main() { if [[ -z "${BUILD_AAR_DIR:-}" ]]; then BUILD_AAR_DIR="$(mktemp -d)" @@ -186,10 +154,6 @@ main() { build_android_native_library ${ANDROID_ABI} done build_aar - build_android_demo_apps - if [ -n "$ARTIFACTS_DIR_NAME" ]; then - collect_artifacts_to_be_uploaded ${ARTIFACTS_DIR_NAME} - fi } if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then diff --git a/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh b/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh index 1d251de9ef3..0f1cde1a06f 100644 --- a/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh +++ b/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh @@ -13,13 +13,7 @@ if [ -z "$QNN_SDK_ROOT" ]; then fi BASEDIR=$(dirname "$0") -source "$BASEDIR"/../../../../build/build_android_library.sh +ANDROID_ABIS="arm64-v8a" bash "$BASEDIR"/setup.sh BUILD_AAR_DIR="$(mktemp -d)" export BUILD_AAR_DIR - -build_jar -build_android_native_library "arm64-v8a" -build_aar -mkdir -p "$BASEDIR"/app/libs -cp "$BUILD_AAR_DIR/executorch.aar" "$BASEDIR"/app/libs/executorch.aar diff --git a/examples/demo-apps/android/LlamaDemo/setup.sh b/examples/demo-apps/android/LlamaDemo/setup.sh index ec626c289b5..2596a6673e3 100644 --- a/examples/demo-apps/android/LlamaDemo/setup.sh +++ b/examples/demo-apps/android/LlamaDemo/setup.sh @@ -7,15 +7,11 @@ set -eu -BASEDIR=$(dirname "$0") -source "$BASEDIR"/../../../../build/build_android_library.sh - BUILD_AAR_DIR="$(mktemp -d)" export BUILD_AAR_DIR -build_jar -build_android_native_library "arm64-v8a" -build_android_native_library "x86_64" -build_aar +BASEDIR=$(dirname "$0") mkdir -p "$BASEDIR"/app/libs +bash "$BASEDIR"/../../../../build/build_android_library.sh + cp "$BUILD_AAR_DIR/executorch.aar" "$BASEDIR"/app/libs/executorch.aar