From 6cfefefb4744fdfbf2a739b51933092160fd4a6d Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Tue, 8 Oct 2024 17:14:08 -0700 Subject: [PATCH 1/2] Use a common sh to build android llama app related stuff --- build/build_android_llm_demo.sh | 37 ++++++---- .../android/LlamaDemo/setup-with-qnn.sh | 71 ++++--------------- examples/demo-apps/android/LlamaDemo/setup.sh | 57 +++------------ 3 files changed, 43 insertions(+), 122 deletions(-) diff --git a/build/build_android_llm_demo.sh b/build/build_android_llm_demo.sh index 8bea69615c8..2e42f660f93 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}" \ @@ -139,19 +138,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..67dc957e31a 100644 --- a/examples/demo-apps/android/LlamaDemo/setup.sh +++ b/examples/demo-apps/android/LlamaDemo/setup.sh @@ -7,53 +7,14 @@ 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_aar +mkdir -p "$BASEDIR"/app/libs +cp "$BUILD_AAR_DIR/executorch.aar" "$BASEDIR"/app/libs/executorch-llama.aar From b36263c38a522006461446d00c8b0d6e5f6eeb84 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Tue, 15 Oct 2024 14:19:04 -0700 Subject: [PATCH 2/2] Build x86_64 as well --- examples/demo-apps/android/LlamaDemo/setup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/demo-apps/android/LlamaDemo/setup.sh b/examples/demo-apps/android/LlamaDemo/setup.sh index 67dc957e31a..140434a86d7 100644 --- a/examples/demo-apps/android/LlamaDemo/setup.sh +++ b/examples/demo-apps/android/LlamaDemo/setup.sh @@ -15,6 +15,7 @@ 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