1*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Qualcomm Innovation Center, Inc. 2*523fa7a6SAndroid Build Coastguard Worker# All rights reserved 3*523fa7a6SAndroid Build Coastguard Worker# 4*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 5*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 6*523fa7a6SAndroid Build Coastguard Workerset -e 7*523fa7a6SAndroid Build Coastguard Workerset -o xtrace 8*523fa7a6SAndroid Build Coastguard Worker 9*523fa7a6SAndroid Build Coastguard Workerif [[ -z ${QNN_SDK_ROOT} ]]; then 10*523fa7a6SAndroid Build Coastguard Worker echo "Please export QNN_SDK_ROOT=/path/to/qnn_sdk" 11*523fa7a6SAndroid Build Coastguard Worker exit -1 12*523fa7a6SAndroid Build Coastguard Workerfi 13*523fa7a6SAndroid Build Coastguard Worker 14*523fa7a6SAndroid Build Coastguard Worker 15*523fa7a6SAndroid Build Coastguard Worker 16*523fa7a6SAndroid Build Coastguard Workerusage() { 17*523fa7a6SAndroid Build Coastguard Worker echo "Usage: Build the aarch64 version of executor runner or the python interface of Qnn Manager" 18*523fa7a6SAndroid Build Coastguard Worker echo "First, you need to set the environment variable for QNN_SDK_ROOT" 19*523fa7a6SAndroid Build Coastguard Worker echo ", and if you want to build the aarch64 version of executor runner" 20*523fa7a6SAndroid Build Coastguard Worker echo ", you need to export ANDROID_NDK_ROOT=/path/to/android_ndkXX" 21*523fa7a6SAndroid Build Coastguard Worker echo "e.g.: executorch$ ./backends/qualcomm/scripts/build.sh --skip_x86_64" 22*523fa7a6SAndroid Build Coastguard Worker exit 1 23*523fa7a6SAndroid Build Coastguard Worker} 24*523fa7a6SAndroid Build Coastguard Worker 25*523fa7a6SAndroid Build Coastguard Worker 26*523fa7a6SAndroid Build Coastguard Worker[ "$1" = -h ] && usage 27*523fa7a6SAndroid Build Coastguard Worker 28*523fa7a6SAndroid Build Coastguard WorkerBUILD_X86_64="true" 29*523fa7a6SAndroid Build Coastguard WorkerCMAKE_X86_64="build-x86" 30*523fa7a6SAndroid Build Coastguard WorkerBUILD_AARCH64="true" 31*523fa7a6SAndroid Build Coastguard WorkerCMAKE_AARCH64="build-android" 32*523fa7a6SAndroid Build Coastguard WorkerCLEAN="true" 33*523fa7a6SAndroid Build Coastguard WorkerBUILD_TYPE="Debug" 34*523fa7a6SAndroid Build Coastguard WorkerBUILD_JOB_NUMBER="16" 35*523fa7a6SAndroid Build Coastguard Worker 36*523fa7a6SAndroid Build Coastguard Workerif [ -z PYTHON_EXECUTABLE ]; then 37*523fa7a6SAndroid Build Coastguard Worker PYTHON_EXECUTABLE="python3" 38*523fa7a6SAndroid Build Coastguard Workerfi 39*523fa7a6SAndroid Build Coastguard Worker 40*523fa7a6SAndroid Build Coastguard Workerif [ -z BUCK2 ]; then 41*523fa7a6SAndroid Build Coastguard Worker BUCK2="buck2" 42*523fa7a6SAndroid Build Coastguard Workerfi 43*523fa7a6SAndroid Build Coastguard Worker 44*523fa7a6SAndroid Build Coastguard Workerlong_options=skip_x86_64,skip_aarch64,no_clean,release,job_number: 45*523fa7a6SAndroid Build Coastguard Worker 46*523fa7a6SAndroid Build Coastguard Workerparsed_args=$(getopt -a --options '' --longoptions $long_options --name "$0" -- "$@") 47*523fa7a6SAndroid Build Coastguard Workereval set -- "$parsed_args" 48*523fa7a6SAndroid Build Coastguard Worker 49*523fa7a6SAndroid Build Coastguard Worker 50*523fa7a6SAndroid Build Coastguard Workerwhile true ; do 51*523fa7a6SAndroid Build Coastguard Worker case "$1" in 52*523fa7a6SAndroid Build Coastguard Worker --skip_x86_64) BUILD_X86_64="false"; shift;; 53*523fa7a6SAndroid Build Coastguard Worker --skip_aarch64) BUILD_AARCH64="false"; shift;; 54*523fa7a6SAndroid Build Coastguard Worker --no_clean) CLEAN="false"; shift;; 55*523fa7a6SAndroid Build Coastguard Worker --release) BUILD_TYPE="Release"; shift;; 56*523fa7a6SAndroid Build Coastguard Worker --job_number) BUILD_JOB_NUMBER="$2"; shift 2;; 57*523fa7a6SAndroid Build Coastguard Worker --) shift; break;; 58*523fa7a6SAndroid Build Coastguard Worker esac 59*523fa7a6SAndroid Build Coastguard Workerdone 60*523fa7a6SAndroid Build Coastguard Worker 61*523fa7a6SAndroid Build Coastguard WorkerPRJ_ROOT="$( cd "$(dirname "$0")/../../.." ; pwd -P)" 62*523fa7a6SAndroid Build Coastguard Worker 63*523fa7a6SAndroid Build Coastguard Workerif [ "$BUILD_AARCH64" = true ]; then 64*523fa7a6SAndroid Build Coastguard Worker if [[ -z ${ANDROID_NDK_ROOT} ]]; then 65*523fa7a6SAndroid Build Coastguard Worker echo "Please export ANDROID_NDK_ROOT=/path/to/android_ndkXX" 66*523fa7a6SAndroid Build Coastguard Worker exit -1 67*523fa7a6SAndroid Build Coastguard Worker fi 68*523fa7a6SAndroid Build Coastguard Worker 69*523fa7a6SAndroid Build Coastguard Worker BUILD_ROOT=$PRJ_ROOT/$CMAKE_AARCH64 70*523fa7a6SAndroid Build Coastguard Worker if [ "$CLEAN" = true ]; then 71*523fa7a6SAndroid Build Coastguard Worker rm -rf $BUILD_ROOT && mkdir $BUILD_ROOT 72*523fa7a6SAndroid Build Coastguard Worker else 73*523fa7a6SAndroid Build Coastguard Worker # Force rebuild flatccrt for the correct platform 74*523fa7a6SAndroid Build Coastguard Worker cd $BUILD_ROOT/devtools && make clean 75*523fa7a6SAndroid Build Coastguard Worker fi 76*523fa7a6SAndroid Build Coastguard Worker 77*523fa7a6SAndroid Build Coastguard Worker cd $BUILD_ROOT 78*523fa7a6SAndroid Build Coastguard Worker cmake .. \ 79*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_INSTALL_PREFIX=$BUILD_ROOT \ 80*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ 81*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_QNN=ON \ 82*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_DEVTOOLS=ON \ 83*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \ 84*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \ 85*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_ENABLE_EVENT_TRACER=ON \ 86*523fa7a6SAndroid Build Coastguard Worker -DQNN_SDK_ROOT=$QNN_SDK_ROOT \ 87*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake \ 88*523fa7a6SAndroid Build Coastguard Worker -DANDROID_ABI='arm64-v8a' \ 89*523fa7a6SAndroid Build Coastguard Worker -DANDROID_NATIVE_API_LEVEL=23 \ 90*523fa7a6SAndroid Build Coastguard Worker -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \ 91*523fa7a6SAndroid Build Coastguard Worker -B$BUILD_ROOT 92*523fa7a6SAndroid Build Coastguard Worker 93*523fa7a6SAndroid Build Coastguard Worker cmake --build $BUILD_ROOT -j$BUILD_JOB_NUMBER --target install 94*523fa7a6SAndroid Build Coastguard Worker 95*523fa7a6SAndroid Build Coastguard Worker EXAMPLE_ROOT=examples/qualcomm 96*523fa7a6SAndroid Build Coastguard Worker CMAKE_PREFIX_PATH="${BUILD_ROOT}/lib/cmake/ExecuTorch;${BUILD_ROOT}/third-party/gflags;" 97*523fa7a6SAndroid Build Coastguard Worker 98*523fa7a6SAndroid Build Coastguard Worker cmake $PRJ_ROOT/$EXAMPLE_ROOT \ 99*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake \ 100*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ 101*523fa7a6SAndroid Build Coastguard Worker -DANDROID_ABI='arm64-v8a' \ 102*523fa7a6SAndroid Build Coastguard Worker -DANDROID_NATIVE_API_LEVEL=23 \ 103*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH \ 104*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \ 105*523fa7a6SAndroid Build Coastguard Worker -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \ 106*523fa7a6SAndroid Build Coastguard Worker -B$EXAMPLE_ROOT 107*523fa7a6SAndroid Build Coastguard Worker 108*523fa7a6SAndroid Build Coastguard Worker cmake --build $EXAMPLE_ROOT -j$BUILD_JOB_NUMBER 109*523fa7a6SAndroid Build Coastguard Workerfi 110*523fa7a6SAndroid Build Coastguard Worker 111*523fa7a6SAndroid Build Coastguard Workerif [ "$BUILD_X86_64" = true ]; then 112*523fa7a6SAndroid Build Coastguard Worker BUILD_ROOT=$PRJ_ROOT/$CMAKE_X86_64 113*523fa7a6SAndroid Build Coastguard Worker if [ "$CLEAN" = true ]; then 114*523fa7a6SAndroid Build Coastguard Worker rm -rf $BUILD_ROOT && mkdir $BUILD_ROOT 115*523fa7a6SAndroid Build Coastguard Worker else 116*523fa7a6SAndroid Build Coastguard Worker # Force rebuild flatccrt for the correct platform 117*523fa7a6SAndroid Build Coastguard Worker cd $BUILD_ROOT/devtools && make clean 118*523fa7a6SAndroid Build Coastguard Worker fi 119*523fa7a6SAndroid Build Coastguard Worker 120*523fa7a6SAndroid Build Coastguard Worker cd $BUILD_ROOT 121*523fa7a6SAndroid Build Coastguard Worker cmake \ 122*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ 123*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_INSTALL_PREFIX=$BUILD_ROOT \ 124*523fa7a6SAndroid Build Coastguard Worker -DQNN_SDK_ROOT=${QNN_SDK_ROOT} \ 125*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_QNN=ON \ 126*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_DEVTOOLS=ON \ 127*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \ 128*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \ 129*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_ENABLE_EVENT_TRACER=ON \ 130*523fa7a6SAndroid Build Coastguard Worker -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \ 131*523fa7a6SAndroid Build Coastguard Worker -S $PRJ_ROOT \ 132*523fa7a6SAndroid Build Coastguard Worker -B $BUILD_ROOT \ 133*523fa7a6SAndroid Build Coastguard Worker 134*523fa7a6SAndroid Build Coastguard Worker cmake --build $BUILD_ROOT -j$BUILD_JOB_NUMBER --target install 135*523fa7a6SAndroid Build Coastguard Worker 136*523fa7a6SAndroid Build Coastguard Worker rm -f $PRJ_ROOT/backends/qualcomm/python/* 137*523fa7a6SAndroid Build Coastguard Worker cp -fv $BUILD_ROOT/backends/qualcomm/Py* "$PRJ_ROOT/backends/qualcomm/python" 138*523fa7a6SAndroid Build Coastguard Worker cp -fv "$PRJ_ROOT/schema/program.fbs" "$PRJ_ROOT/exir/_serialize/program.fbs" 139*523fa7a6SAndroid Build Coastguard Worker cp -fv "$PRJ_ROOT/schema/scalar_type.fbs" "$PRJ_ROOT/exir/_serialize/scalar_type.fbs" 140*523fa7a6SAndroid Build Coastguard Worker 141*523fa7a6SAndroid Build Coastguard Worker EXAMPLE_ROOT=examples/qualcomm 142*523fa7a6SAndroid Build Coastguard Worker CMAKE_PREFIX_PATH="${BUILD_ROOT}/lib/cmake/ExecuTorch;${BUILD_ROOT}/third-party/gflags;" 143*523fa7a6SAndroid Build Coastguard Worker 144*523fa7a6SAndroid Build Coastguard Worker cmake $PRJ_ROOT/$EXAMPLE_ROOT \ 145*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ 146*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH \ 147*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \ 148*523fa7a6SAndroid Build Coastguard Worker -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \ 149*523fa7a6SAndroid Build Coastguard Worker -B$EXAMPLE_ROOT 150*523fa7a6SAndroid Build Coastguard Worker 151*523fa7a6SAndroid Build Coastguard Worker cmake --build $EXAMPLE_ROOT -j$BUILD_JOB_NUMBER 152*523fa7a6SAndroid Build Coastguard Workerfi 153