diff --git a/build/build_android_llm_demo.sh b/build/build_android_llm_demo.sh
index 681c442afc1..f015b08e616 100644
--- a/build/build_android_llm_demo.sh
+++ b/build/build_android_llm_demo.sh
@@ -26,7 +26,6 @@ build_android_native_library() {
EXECUTORCH_BUILD_QNN=OFF
fi
-
cmake . -DCMAKE_INSTALL_PREFIX="${CMAKE_OUT}" \
-DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" \
-DANDROID_ABI="${ANDROID_ABI}" \
@@ -150,19 +149,27 @@ collect_artifacts_to_be_uploaded() {
cp extension/benchmark/android/benchmark/app/build/outputs/apk/androidTest/debug/*.apk "${MINIBENCH_APP_DIR}"
}
-BUILD_AAR_DIR="$(mktemp -d)"
-export BUILD_AAR_DIR
-if [ -z "$ANDROID_ABIS" ]; then
- ANDROID_ABIS=("arm64-v8a" "x86_64")
-fi
-export ANDROID_ABIS
+main() {
+ BUILD_AAR_DIR="$(mktemp -d)"
+ export BUILD_AAR_DIR
+ if [ -z "$ANDROID_ABIS" ]; then
+ ANDROID_ABIS=("arm64-v8a" "x86_64")
+ fi
+ export ANDROID_ABIS
+
+ ARTIFACTS_DIR_NAME="$1"
-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
+}
-build_jar
-for ANDROID_ABI in "${ANDROID_ABIS[@]}"; do
- build_android_native_library ${ANDROID_ABI}
-done
-build_aar
-build_android_demo_apps
-collect_artifacts_to_be_uploaded ${ARTIFACTS_DIR_NAME}
+if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
+ main "$@"
+fi
diff --git a/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh b/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh
index df70725942d..53d248bc75e 100644
--- a/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh
+++ b/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh
@@ -7,66 +7,19 @@
set -eu
-CMAKE_OUT="${CMAKE_OUT:-cmake-out-android}"
-# Note: Set up ANDROID_NDK and ANDROID_ABI
-cmake . -DCMAKE_INSTALL_PREFIX="${CMAKE_OUT}" \
- -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" \
- -DANDROID_ABI="${ANDROID_ABI}" \
- -DEXECUTORCH_BUILD_XNNPACK=ON \
- -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
- -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
- -DEXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL=ON \
- -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
- -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
- -DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
- -DEXECUTORCH_BUILD_QNN=ON \
- -DQNN_SDK_ROOT="${QNN_SDK_ROOT}" \
- -DCMAKE_BUILD_TYPE=Release \
- -B"${CMAKE_OUT}"
-
-if [ "$(uname)" == "Darwin" ]; then
- CMAKE_JOBS=$(( $(sysctl -n hw.ncpu) - 1 ))
-else
- CMAKE_JOBS=$(( $(nproc) - 1 ))
+if [ -z "$QNN_SDK_ROOT" ]; then
+ echo "You must specify QNN_SDK_ROOT"
+ exit 1
fi
-cmake --build "${CMAKE_OUT}" -j "${CMAKE_JOBS}" --target install --config Release
-
-cmake extension/android \
- -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
- -DANDROID_ABI="${ANDROID_ABI}" \
- -DCMAKE_INSTALL_PREFIX="${CMAKE_OUT}" \
- -DEXECUTORCH_BUILD_LLAMA_JNI=ON \
- -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
- -DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
- -DEXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL=ON \
- -DCMAKE_BUILD_TYPE=Release \
- -B"${CMAKE_OUT}"/extension/android
-cmake --build "${CMAKE_OUT}"/extension/android -j "${CMAKE_JOBS}" --config Release
-
-JNI_LIBS_PATH="examples/demo-apps/android/LlamaDemo/app/src/main/jniLibs"
-mkdir -p "${JNI_LIBS_PATH}/${ANDROID_ABI}"
+BASEDIR=$(dirname "$0")
+source "$BASEDIR"/../../../../build/build_android_llm_demo.sh
BUILD_AAR_DIR="$(mktemp -d)"
-mkdir -p "${BUILD_AAR_DIR}/jni/${ANDROID_ABI}" "${BUILD_AAR_DIR}/libs"
-JNI_LIBS_PATH="${BUILD_AAR_DIR}/jni"
-cp "${CMAKE_OUT}"/extension/android/libexecutorch_jni.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/libexecutorch.so"
-cp "${CMAKE_OUT}"/lib/libqnn_executorch_backend.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
-cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtp.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
-cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnSystem.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
-cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtpV69Stub.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
-cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtpV73Stub.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
-cp "${QNN_SDK_ROOT}"/lib/aarch64-android/libQnnHtpV75Stub.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
-cp "${QNN_SDK_ROOT}"/lib/hexagon-v69/unsigned/libQnnHtpV69Skel.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
-cp "${QNN_SDK_ROOT}"/lib/hexagon-v73/unsigned/libQnnHtpV73Skel.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
-cp "${QNN_SDK_ROOT}"/lib/hexagon-v75/unsigned/libQnnHtpV75Skel.so "${JNI_LIBS_PATH}/${ANDROID_ABI}/"
-cp extension/android/build/libs/executorch.jar "${BUILD_AAR_DIR}/libs"
-echo \ \
- \ \
- \ > "${BUILD_AAR_DIR}/AndroidManifest.xml"
-pushd "${BUILD_AAR_DIR}"
-zip -r executorch-llama.aar libs jni/${ANDROID_ABI} AndroidManifest.xml
-popd
-mkdir -p examples/demo-apps/android/LlamaDemo/app/libs
-mv "${BUILD_AAR_DIR}/executorch-llama.aar" examples/demo-apps/android/LlamaDemo/app/libs
+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-llama.aar
diff --git a/examples/demo-apps/android/LlamaDemo/setup.sh b/examples/demo-apps/android/LlamaDemo/setup.sh
index b89c1829944..140434a86d7 100644
--- a/examples/demo-apps/android/LlamaDemo/setup.sh
+++ b/examples/demo-apps/android/LlamaDemo/setup.sh
@@ -7,53 +7,15 @@
set -eu
-CMAKE_OUT="${CMAKE_OUT:-cmake-out-android}"
-# Note: Set up ANDROID_NDK and ANDROID_ABI
-cmake . -DCMAKE_INSTALL_PREFIX="${CMAKE_OUT}" \
- -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" \
- -DANDROID_ABI="${ANDROID_ABI}" \
- -DANDROID_PLATFORM=android-23 \
- -DEXECUTORCH_BUILD_XNNPACK=ON \
- -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
- -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
- -DEXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL=ON \
- -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
- -DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
- -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
- -DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
- -DCMAKE_BUILD_TYPE=Release \
- -B"${CMAKE_OUT}"
-
-if [ "$(uname)" == "Darwin" ]; then
- CMAKE_JOBS=$(( $(sysctl -n hw.ncpu) - 1 ))
-else
- CMAKE_JOBS=$(( $(nproc) - 1 ))
-fi
-cmake --build "${CMAKE_OUT}" -j "${CMAKE_JOBS}" --target install --config Release
-
-cmake extension/android \
- -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
- -DANDROID_ABI="${ANDROID_ABI}" \
- -DANDROID_PLATFORM=android-23 \
- -DCMAKE_INSTALL_PREFIX="${CMAKE_OUT}" \
- -DEXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL=ON \
- -DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
- -DEXECUTORCH_BUILD_LLAMA_JNI=ON \
- -DCMAKE_BUILD_TYPE=Release \
- -B"${CMAKE_OUT}"/extension/android
-
-cmake --build "${CMAKE_OUT}"/extension/android -j "${CMAKE_JOBS}" --config Release
+BASEDIR=$(dirname "$0")
+source "$BASEDIR"/../../../../build/build_android_llm_demo.sh
BUILD_AAR_DIR="$(mktemp -d)"
-mkdir -p "${BUILD_AAR_DIR}/jni/${ANDROID_ABI}" "${BUILD_AAR_DIR}/libs"
-cp "${CMAKE_OUT}"/extension/android/libexecutorch_jni.so "${BUILD_AAR_DIR}/jni/${ANDROID_ABI}/libexecutorch.so"
-cp extension/android/build/libs/executorch.jar "${BUILD_AAR_DIR}/libs"
-echo \ \
- \ \
- \ > "${BUILD_AAR_DIR}/AndroidManifest.xml"
-pushd "${BUILD_AAR_DIR}"
-zip -r executorch-llama.aar libs jni/${ANDROID_ABI} AndroidManifest.xml
-popd
-mkdir -p examples/demo-apps/android/LlamaDemo/app/libs
-mv "${BUILD_AAR_DIR}/executorch-llama.aar" examples/demo-apps/android/LlamaDemo/app/libs
+export BUILD_AAR_DIR
+
+build_jar
+build_android_native_library "arm64-v8a"
+build_android_native_library "x86_64"
+build_aar
+mkdir -p "$BASEDIR"/app/libs
+cp "$BUILD_AAR_DIR/executorch.aar" "$BASEDIR"/app/libs/executorch-llama.aar