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 --enable_linux_embedding)"
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_linux_android,skip_linux_embedding,enable_linux_embedding ,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_linux_android) BUILD_ANDROID=" false" ; shift ;;
59+ --skip_linux_embedding) BUILD_OE_LINUX=" false" ; shift ;;
60+ --enable_linux_embedding) 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
@@ -135,6 +141,94 @@ if [ "$BUILD_AARCH64" = true ]; then
135141 cmake --build $LLAMA_EXAMPLE_ROOT -j$BUILD_JOB_NUMBER
136142fi
137143
144+ if [ " $BUILD_OE_LINUX " = true ]; then
145+ if [[ -z ${TOOLCHAIN_ROOT_HOST} ]]; then
146+ echo " Please export e.g. TOOLCHAIN_ROOT_HOST=/path/to/sysroots/x86_64-qtisdk-linux"
147+ exit -1
148+ fi
149+ if [[ -z ${TOOLCHAIN_ROOT_TARGET} ]]; then
150+ echo " Please export e.g. TOOLCHAIN_ROOT_TARGET=/path/to/sysroots/armv8a-oe-linux"
151+ exit -1
152+ fi
153+
154+ BUILD_ROOT=$PRJ_ROOT /$CMAKE_OE_LINUX
155+ if [ " $CLEAN " = true ]; then
156+ rm -rf $BUILD_ROOT && mkdir $BUILD_ROOT
157+ else
158+ # Force rebuild flatccrt for the correct platform
159+ cd $BUILD_ROOT /third-party/flatcc && make clean
160+ fi
161+
162+ TOOLCHAN_PREFIX=$TOOLCHAIN_ROOT_HOST /usr/bin/aarch64-oe-linux/aarch64-oe-linux-
163+ cd $BUILD_ROOT
164+ cmake .. \
165+ -DCMAKE_INSTALL_PREFIX=$BUILD_ROOT \
166+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
167+ -DCMAKE_C_COMPILER=${TOOLCHAN_PREFIX} gcc \
168+ -DCMAKE_CXX_COMPILER=${TOOLCHAN_PREFIX} g++ \
169+ -DCMAKE_SYSROOT=$TOOLCHAIN_ROOT_TARGET \
170+ -DCMAKE_SYSTEM_NAME=Linux \
171+ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
172+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
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_NAMED_DATA_MAP=ON \
181+ -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
182+ -DEXECUTORCH_ENABLE_EVENT_TRACER=ON \
183+ -DEXECUTORCH_ENABLE_LOGGING=ON \
184+ -DQNN_SDK_ROOT=$QNN_SDK_ROOT \
185+ -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
186+ -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
187+ -B$BUILD_ROOT
188+
189+ cmake --build $BUILD_ROOT -j$BUILD_JOB_NUMBER --target install
190+
191+ EXAMPLE_ROOT=examples/qualcomm
192+ CMAKE_PREFIX_PATH=" ${BUILD_ROOT} ;${BUILD_ROOT} /third-party/gflags;"
193+
194+ cmake $PRJ_ROOT /$EXAMPLE_ROOT \
195+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
196+ -DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH \
197+ -DSUPPORT_REGEX_LOOKAHEAD=ON \
198+ -DBUILD_TESTING=OFF \
199+ -DEXECUTORCH_ENABLE_LOGGING=ON \
200+ -DCMAKE_C_COMPILER=${TOOLCHAN_PREFIX} gcc \
201+ -DCMAKE_CXX_COMPILER=${TOOLCHAN_PREFIX} g++ \
202+ -DCMAKE_SYSROOT=$TOOLCHAIN_ROOT_TARGET \
203+ -DCMAKE_SYSTEM_NAME=Linux \
204+ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
205+ -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
206+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
207+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \
208+ -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
209+ -B$EXAMPLE_ROOT
210+
211+ cmake --build $EXAMPLE_ROOT -j$BUILD_JOB_NUMBER
212+
213+ LLAMA_EXAMPLE_ROOT=examples/models/llama
214+ cmake $PRJ_ROOT /$LLAMA_EXAMPLE_ROOT \
215+ -DBUILD_TESTING=OFF \
216+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
217+ -DCMAKE_C_COMPILER=${TOOLCHAN_PREFIX} gcc \
218+ -DCMAKE_CXX_COMPILER=${TOOLCHAN_PREFIX} g++ \
219+ -DCMAKE_SYSROOT=$TOOLCHAIN_ROOT_TARGET \
220+ -DCMAKE_SYSTEM_NAME=Linux \
221+ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
222+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
223+ -DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH \
224+ -DEXECUTORCH_ENABLE_LOGGING=ON \
225+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \
226+ -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
227+ -B$LLAMA_EXAMPLE_ROOT
228+
229+ cmake --build $LLAMA_EXAMPLE_ROOT -j$BUILD_JOB_NUMBER
230+ fi
231+
138232if [ " $BUILD_X86_64 " = true ]; then
139233 BUILD_ROOT=$PRJ_ROOT /$CMAKE_X86_64
140234 if [ " $CLEAN " = true ]; then
0 commit comments