@@ -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 ' ' $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