1717usage () {
1818 echo " Usage: Build the aarch64 version of executor runner or the python interface of Qnn Manager"
1919 echo " First, you need to set the environment variable for QNN_SDK_ROOT"
20- echo " , and if you want to build the aarch64 version of executor runner"
20+ echo " , and if you want to build the android version of executor runner"
2121 echo " , you need to export ANDROID_NDK_ROOT=/path/to/android_ndkXX"
22+ echo " (or export TOOLCHAIN_ROOT_HOST=/path/to/sysroots/xx_host, "
23+ echo " TOOLCHAIN_ROOT_TARGET=/path/to/sysroots/xx_target for linux embedded with --le)"
2224 echo " e.g.: executorch$ ./backends/qualcomm/scripts/build.sh --skip_x86_64"
2325 exit 1
2426}
@@ -28,8 +30,10 @@ usage() {
2830
2931BUILD_X86_64=" true"
3032CMAKE_X86_64=" build-x86"
31- BUILD_AARCH64=" true"
32- CMAKE_AARCH64=" build-android"
33+ BUILD_ANDROID=" true"
34+ CMAKE_ANDROID=" build-android"
35+ BUILD_OE_LINUX=" false"
36+ CMAKE_OE_LINUX=" build-oe-linux"
3337CLEAN=" true"
3438BUILD_TYPE=" RelWithDebInfo"
3539BUILD_JOB_NUMBER=" 16"
@@ -42,7 +46,7 @@ if [ -z BUCK2 ]; then
4246 BUCK2=" buck2"
4347fi
4448
45- long_options=skip_x86_64,skip_aarch64 ,no_clean,release,job_number:
49+ long_options=skip_x86_64,skip_la,skip_le,le ,no_clean,release,job_number:
4650
4751parsed_args=$( getopt -a --options ' ' --longoptions $long_options --name " $0 " -- " $@ " )
4852eval set -- " $parsed_args "
@@ -51,7 +55,9 @@ eval set -- "$parsed_args"
5155while true ; do
5256 case " $1 " in
5357 --skip_x86_64) BUILD_X86_64=" false" ; shift ;;
54- --skip_aarch64) BUILD_AARCH64=" false" ; shift ;;
58+ --skip_la) BUILD_ANDROID=" false" ; shift ;;
59+ --skip_le) BUILD_OE_LINUX=" false" ; shift ;;
60+ --le) BUILD_ANDROID=" false" ; BUILD_OE_LINUX=" true" ; shift ;;
5561 --no_clean) CLEAN=" false" ; shift ;;
5662 --release) BUILD_TYPE=" Release" ; shift ;;
5763 --job_number) BUILD_JOB_NUMBER=" $2 " ; shift 2;;
6167
6268PRJ_ROOT=" $( cd " $( dirname " $0 " ) /../../.." ; pwd -P) "
6369
64- if [ " $BUILD_AARCH64 " = true ]; then
70+ if [ " $BUILD_ANDROID " = true ]; then
6571 if [[ -z ${ANDROID_NDK_ROOT} ]]; then
6672 echo " Please export ANDROID_NDK_ROOT=/path/to/android_ndkXX"
6773 exit -1
6874 fi
6975
70- BUILD_ROOT=$PRJ_ROOT /$CMAKE_AARCH64
76+ BUILD_ROOT=$PRJ_ROOT /$CMAKE_ANDROID
7177 if [ " $CLEAN " = true ]; then
7278 rm -rf $BUILD_ROOT && mkdir $BUILD_ROOT
7379 else
@@ -134,6 +140,72 @@ if [ "$BUILD_AARCH64" = true ]; then
134140 cmake --build $LLAMA_EXAMPLE_ROOT -j$BUILD_JOB_NUMBER
135141fi
136142
143+ if [ " $BUILD_OE_LINUX " = true ]; then
144+ if [[ -z ${TOOLCHAIN_ROOT_HOST} ]]; then
145+ echo " Please export e.g. TOOLCHAIN_ROOT_HOST=/path/to/sysroots/x86_64-qtisdk-linux"
146+ exit -1
147+ fi
148+ if [[ -z ${TOOLCHAIN_ROOT_TARGET} ]]; then
149+ echo " Please export e.g. TOOLCHAIN_ROOT_TARGET=/path/to/sysroots/armv8a-oe-linux"
150+ exit -1
151+ fi
152+
153+ BUILD_ROOT=$PRJ_ROOT /$CMAKE_OE_LINUX
154+ if [ " $CLEAN " = true ]; then
155+ rm -rf $BUILD_ROOT && mkdir $BUILD_ROOT
156+ else
157+ # Force rebuild flatccrt for the correct platform
158+ cd $BUILD_ROOT /third-party/flatcc && make clean
159+ fi
160+
161+ TOOLCHAN_PREFIX=$TOOLCHAIN_ROOT_HOST /usr/bin/aarch64-oe-linux/aarch64-oe-linux-
162+ cd $BUILD_ROOT
163+ cmake .. \
164+ -DCMAKE_INSTALL_PREFIX=$BUILD_ROOT \
165+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
166+ -DCMAKE_C_COMPILER=${TOOLCHAN_PREFIX} gcc \
167+ -DCMAKE_CXX_COMPILER=${TOOLCHAN_PREFIX} g++ \
168+ -DCMAKE_SYSROOT=$TOOLCHAIN_ROOT_TARGET \
169+ -DCMAKE_SYSTEM_NAME=Linux \
170+ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
171+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
172+ -DEXECUTORCH_BUILD_CPUINFO=OFF \
173+ -DEXECUTORCH_BUILD_QNN=ON \
174+ -DEXECUTORCH_BUILD_DEVTOOLS=ON \
175+ -DEXECUTORCH_BUILD_EXTENSION_LLM=ON \
176+ -DEXECUTORCH_BUILD_EXTENSION_LLM_RUNNER=ON \
177+ -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
178+ -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
179+ -DEXECUTORCH_BUILD_EXTENSION_FLAT_TENSOR=ON \
180+ -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
181+ -DEXECUTORCH_ENABLE_EVENT_TRACER=ON \
182+ -DQNN_SDK_ROOT=$QNN_SDK_ROOT \
183+ -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
184+ -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
185+ -B$BUILD_ROOT
186+
187+ cmake --build $BUILD_ROOT -j$BUILD_JOB_NUMBER --target install
188+
189+ EXAMPLE_ROOT=examples/qualcomm
190+ CMAKE_PREFIX_PATH=" ${BUILD_ROOT} ;${BUILD_ROOT} /third-party/gflags;"
191+
192+ cmake $PRJ_ROOT /$EXAMPLE_ROOT \
193+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
194+ -DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH \
195+ -DCMAKE_C_COMPILER=${TOOLCHAN_PREFIX} gcc \
196+ -DCMAKE_CXX_COMPILER=${TOOLCHAN_PREFIX} g++ \
197+ -DCMAKE_SYSROOT=$TOOLCHAIN_ROOT_TARGET \
198+ -DCMAKE_SYSTEM_NAME=Linux \
199+ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
200+ -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
201+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
202+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \
203+ -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
204+ -B$EXAMPLE_ROOT
205+
206+ cmake --build $EXAMPLE_ROOT -j$BUILD_JOB_NUMBER
207+ fi
208+
137209if [ " $BUILD_X86_64 " = true ]; then
138210 BUILD_ROOT=$PRJ_ROOT /$CMAKE_X86_64
139211 if [ " $CLEAN " = true ]; then
0 commit comments