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