xref: /aosp_15_r20/external/executorch/backends/qualcomm/scripts/build.sh (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
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