Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .ci/scripts/collect_android_artifacts_for_upload.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/bin/bash
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.


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}" || true
cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/androidTest/debug/*.apk "${DEMO_APP_DIR}" || true
# 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}" || true
cp extension/benchmark/android/benchmark/app/build/outputs/apk/androidTest/debug/*.apk "${MINIBENCH_APP_DIR}" || true
# Collect Java library test
JAVA_LIBRARY_TEST_DIR="${ARTIFACTS_DIR_NAME}/library_test_dir"
mkdir -p "${JAVA_LIBRARY_TEST_DIR}"
cp extension/android_test/build/outputs/apk/debug/*.apk "${JAVA_LIBRARY_TEST_DIR}" || true
cp extension/android_test/build/outputs/apk/androidTest/debug/*.apk "${JAVA_LIBRARY_TEST_DIR}" || true
}

if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
collect_artifacts_to_be_uploaded "$@"
fi
11 changes: 10 additions & 1 deletion .github/workflows/_android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,17 @@ jobs:
PYTHON_EXECUTABLE=python bash .ci/scripts/setup-linux.sh --build-tool buck2
export ARTIFACTS_DIR_NAME=artifacts-to-be-uploaded

export BUILD_AAR_DIR="$(mkdir -p aar-out)"
source build/build_android_library.sh
build_jar
build_android_native_library "arm64-v8a"
build_aar
# Build LLM Demo for Android
bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME}
source build/build_android_demo_app.sh
build_android_llama_demo
build_android_test
# Upload
.ci/scripts/collect_android_artifacts_for_upload.sh $ARTIFACTS_DIR_NAME

# Running Android emulator directly on the runner and not using Docker
run-emulator:
Expand Down
10 changes: 8 additions & 2 deletions .github/workflows/android-perf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -362,8 +362,14 @@ 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}
export BUILD_AAR_DIR="$(mkdir -p aar-out)"
source build/build_android_library.sh
PYTHON_EXECUTABLE=python build_jar
PYTHON_EXECUTABLE=python EXECUTORCH_BUILD_QNN=ON QNN_SDK_ROOT=/tmp/qnn/2.28.0.241029 build_android_native_library "arm64-v8a"
build_aar
source build/build_android_demo_app.sh
PYTHON_EXECUTABLE=python build_android_llama_demo
PYTHON_EXECUTABLE=python .ci/scripts/collect_android_artifacts_for_upload.sh $ARTIFACTS_DIR_NAME

# Let's see how expensive this job is, we might want to tone it down by running it periodically
benchmark-on-device:
Expand Down
10 changes: 9 additions & 1 deletion .github/workflows/android-release-artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,15 @@ jobs:
export ARTIFACTS_DIR_NAME=artifacts-to-be-uploaded

# Build LLM Demo for Android
bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME}
export BUILD_AAR_DIR="$(mkdir -p aar-out)"
source build/build_android_library.sh
build_jar
build_android_native_library "arm64-v8a"
build_android_native_library "x86_64"
build_aar
# Upload
.ci/scripts/collect_android_artifacts_for_upload.sh $ARTIFACTS_DIR_NAME


shasum -a 256 "${ARTIFACTS_DIR_NAME}/llm_demo/executorch.aar"

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
__pycache__/

# Build and tool-generated files
aar-out/
arm_test/
buck-out/
buck2-bin/
Expand Down
37 changes: 37 additions & 0 deletions build/build_android_demo_app.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#!/bin/bash
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.


build_android_llama_demo() {
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
}

build_android_benchmark_app() {
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
}

build_android_test() {
pushd extension/android_test
ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew testDebugUnitTest
ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew build assembleAndroidTest
popd
}


if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
build_android_llama_demo
build_android_benchmark_app
build_android_test
fi
53 changes: 1 addition & 52 deletions build/build_android_library.sh
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,6 @@ build_aar() {
\<uses-sdk android:minSdkVersion=\"19\" /\> \
\</manifest\> > "${BUILD_AAR_DIR}/AndroidManifest.xml"
pushd "${BUILD_AAR_DIR}"
# Rename libexecutorch_jni.so to libexecutorch.so for soname consistency
# between Java and JNI
find jni -type f -name "libexecutorch_jni.so" -exec bash -c 'mv "$1" "${1/_jni/}"' bash {} \;
if [ "$EXECUTORCH_CMAKE_BUILD_TYPE" == "Release" ]; then
find jni -type f -name "*.so" -exec "$ANDROID_NDK"/toolchains/llvm/prebuilt/*/bin/llvm-strip {} \;
fi
Expand All @@ -137,69 +134,21 @@ 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

pushd extension/android_test
ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew testDebugUnitTest
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}"
# Collect Java library test
JAVA_LIBRARY_TEST_DIR="${ARTIFACTS_DIR_NAME}/library_test_dir"
mkdir -p "${JAVA_LIBRARY_TEST_DIR}"
cp extension/android_test/build/outputs/apk/debug/*.apk "${JAVA_LIBRARY_TEST_DIR}"
cp extension/android_test/build/outputs/apk/androidTest/debug/*.apk "${JAVA_LIBRARY_TEST_DIR}"
}

main() {
if [[ -z "${BUILD_AAR_DIR:-}" ]]; then
BUILD_AAR_DIR="$(mktemp -d)"
BUILD_AAR_DIR="$(mkdir -p aar-out)"
fi
export BUILD_AAR_DIR
if [ -z "$ANDROID_ABIS" ]; then
ANDROID_ABIS=("arm64-v8a" "x86_64")
fi
export ANDROID_ABIS

ARTIFACTS_DIR_NAME="$1"

build_jar
for ANDROID_ABI in "${ANDROID_ABIS[@]}"; do
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
Expand Down
Loading