@@ -25,8 +25,10 @@ set -o xtrace
2525usage () {
2626 echo " Usage: Build the aarch64 version of executor runner or the python interface of Qnn Manager"
2727 echo " First, you need to set the environment variable for QNN_SDK_ROOT"
28- echo " , and if you want to build the aarch64 version of executor runner"
28+ echo " , and if you want to build the android version of executor runner"
2929 echo " , you need to export ANDROID_NDK_ROOT=/path/to/android_ndkXX"
30+ echo " (or export TOOLCHAIN_ROOT_HOST=/path/to/sysroots/xx_host, "
31+ echo " TOOLCHAIN_ROOT_TARGET=/path/to/sysroots/xx_target for linux embedded with --enable_linux_embedded)"
3032 echo " e.g.: executorch$ ./backends/qualcomm/scripts/build.sh --skip_x86_64"
3133 exit 1
3234}
@@ -36,8 +38,10 @@ usage() {
3638
3739BUILD_X86_64=" true"
3840CMAKE_X86_64=" build-x86"
39- BUILD_AARCH64=" true"
40- CMAKE_AARCH64=" build-android"
41+ BUILD_ANDROID=" true"
42+ CMAKE_ANDROID=" build-android"
43+ BUILD_OE_LINUX=" false"
44+ CMAKE_OE_LINUX=" build-oe-linux"
4145CLEAN=" true"
4246BUILD_TYPE=" RelWithDebInfo"
4347BUILD_JOB_NUMBER=" 16"
@@ -50,7 +54,7 @@ if [ -z BUCK2 ]; then
5054 BUCK2=" buck2"
5155fi
5256
53- long_options=skip_x86_64,skip_aarch64 ,no_clean,release,job_number:
57+ long_options=skip_x86_64,skip_linux_android,skip_linux_embedded,enable_linux_embedded ,no_clean,release,job_number:
5458
5559parsed_args=$( getopt -a --options ' ' --longoptions $long_options --name " $0 " -- " $@ " )
5660eval set -- " $parsed_args "
@@ -59,7 +63,9 @@ eval set -- "$parsed_args"
5963while true ; do
6064 case " $1 " in
6165 --skip_x86_64) BUILD_X86_64=" false" ; shift ;;
62- --skip_aarch64) BUILD_AARCH64=" false" ; shift ;;
66+ --skip_linux_android) BUILD_ANDROID=" false" ; shift ;;
67+ --skip_linux_embedded) BUILD_OE_LINUX=" false" ; shift ;;
68+ --enable_linux_embedded) BUILD_ANDROID=" false" ; BUILD_OE_LINUX=" true" ; shift ;;
6369 --no_clean) CLEAN=" false" ; shift ;;
6470 --release) BUILD_TYPE=" Release" ; shift ;;
6571 --job_number) BUILD_JOB_NUMBER=" $2 " ; shift 2;;
6975
7076PRJ_ROOT=" $( cd " $( dirname " $0 " ) /../../.." ; pwd -P) "
7177
72- if [ " $BUILD_AARCH64 " = true ]; then
78+ if [ " $BUILD_ANDROID " = true ]; then
7379 if [[ -z ${ANDROID_NDK_ROOT} ]]; then
7480 echo " Please export ANDROID_NDK_ROOT=/path/to/android_ndkXX"
7581 exit -1
7682 fi
7783
78- BUILD_ROOT=$PRJ_ROOT /$CMAKE_AARCH64
84+ BUILD_ROOT=$PRJ_ROOT /$CMAKE_ANDROID
7985 if [ " $CLEAN " = true ]; then
8086 rm -rf $BUILD_ROOT && mkdir $BUILD_ROOT
8187 else
@@ -143,6 +149,94 @@ if [ "$BUILD_AARCH64" = true ]; then
143149 cmake --build $LLAMA_EXAMPLE_ROOT -j$BUILD_JOB_NUMBER
144150fi
145151
152+ if [ " $BUILD_OE_LINUX " = true ]; then
153+ if [[ -z ${TOOLCHAIN_ROOT_HOST} ]]; then
154+ echo " Please export e.g. TOOLCHAIN_ROOT_HOST=/path/to/sysroots/x86_64-qtisdk-linux"
155+ exit -1
156+ fi
157+ if [[ -z ${TOOLCHAIN_ROOT_TARGET} ]]; then
158+ echo " Please export e.g. TOOLCHAIN_ROOT_TARGET=/path/to/sysroots/armv8a-oe-linux"
159+ exit -1
160+ fi
161+
162+ BUILD_ROOT=$PRJ_ROOT /$CMAKE_OE_LINUX
163+ if [ " $CLEAN " = true ]; then
164+ rm -rf $BUILD_ROOT && mkdir $BUILD_ROOT
165+ else
166+ # Force rebuild flatccrt for the correct platform
167+ cd $BUILD_ROOT /third-party/flatcc && make clean
168+ fi
169+
170+ TOOLCHAN_PREFIX=$TOOLCHAIN_ROOT_HOST /usr/bin/aarch64-oe-linux/aarch64-oe-linux-
171+ cd $BUILD_ROOT
172+ cmake .. \
173+ -DCMAKE_INSTALL_PREFIX=$BUILD_ROOT \
174+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
175+ -DCMAKE_C_COMPILER=${TOOLCHAN_PREFIX} gcc \
176+ -DCMAKE_CXX_COMPILER=${TOOLCHAN_PREFIX} g++ \
177+ -DCMAKE_SYSROOT=$TOOLCHAIN_ROOT_TARGET \
178+ -DCMAKE_SYSTEM_NAME=Linux \
179+ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
180+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
181+ -DEXECUTORCH_BUILD_QNN=ON \
182+ -DEXECUTORCH_BUILD_DEVTOOLS=ON \
183+ -DEXECUTORCH_BUILD_EXTENSION_LLM=ON \
184+ -DEXECUTORCH_BUILD_EXTENSION_LLM_RUNNER=ON \
185+ -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
186+ -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
187+ -DEXECUTORCH_BUILD_EXTENSION_FLAT_TENSOR=ON \
188+ -DEXECUTORCH_BUILD_EXTENSION_NAMED_DATA_MAP=ON \
189+ -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
190+ -DEXECUTORCH_ENABLE_EVENT_TRACER=ON \
191+ -DEXECUTORCH_ENABLE_LOGGING=ON \
192+ -DQNN_SDK_ROOT=$QNN_SDK_ROOT \
193+ -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
194+ -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
195+ -B$BUILD_ROOT
196+
197+ cmake --build $BUILD_ROOT -j$BUILD_JOB_NUMBER --target install
198+
199+ EXAMPLE_ROOT=examples/qualcomm
200+ CMAKE_PREFIX_PATH=" ${BUILD_ROOT} ;${BUILD_ROOT} /third-party/gflags;"
201+
202+ cmake $PRJ_ROOT /$EXAMPLE_ROOT \
203+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
204+ -DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH \
205+ -DSUPPORT_REGEX_LOOKAHEAD=ON \
206+ -DBUILD_TESTING=OFF \
207+ -DEXECUTORCH_ENABLE_LOGGING=ON \
208+ -DCMAKE_C_COMPILER=${TOOLCHAN_PREFIX} gcc \
209+ -DCMAKE_CXX_COMPILER=${TOOLCHAN_PREFIX} g++ \
210+ -DCMAKE_SYSROOT=$TOOLCHAIN_ROOT_TARGET \
211+ -DCMAKE_SYSTEM_NAME=Linux \
212+ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
213+ -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
214+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
215+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \
216+ -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
217+ -B$EXAMPLE_ROOT
218+
219+ cmake --build $EXAMPLE_ROOT -j$BUILD_JOB_NUMBER
220+
221+ LLAMA_EXAMPLE_ROOT=examples/models/llama
222+ cmake $PRJ_ROOT /$LLAMA_EXAMPLE_ROOT \
223+ -DBUILD_TESTING=OFF \
224+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
225+ -DCMAKE_C_COMPILER=${TOOLCHAN_PREFIX} gcc \
226+ -DCMAKE_CXX_COMPILER=${TOOLCHAN_PREFIX} g++ \
227+ -DCMAKE_SYSROOT=$TOOLCHAIN_ROOT_TARGET \
228+ -DCMAKE_SYSTEM_NAME=Linux \
229+ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
230+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
231+ -DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH \
232+ -DEXECUTORCH_ENABLE_LOGGING=ON \
233+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \
234+ -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
235+ -B$LLAMA_EXAMPLE_ROOT
236+
237+ cmake --build $LLAMA_EXAMPLE_ROOT -j$BUILD_JOB_NUMBER
238+ fi
239+
146240if [ " $BUILD_X86_64 " = true ]; then
147241 BUILD_ROOT=$PRJ_ROOT /$CMAKE_X86_64
148242 if [ " $CLEAN " = true ]; then
0 commit comments