xref: /aosp_15_r20/external/executorch/.ci/scripts/build-qnn-sdk.sh (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1#!/bin/bash
2# Copyright (c) Meta Platforms, Inc. and affiliates.
3# All rights reserved.
4#
5# This source code is licensed under the BSD-style license found in the
6# LICENSE file in the root directory of this source tree.
7
8set -eux
9set -o xtrace
10
11build_qnn_backend() {
12  echo "Start building qnn backend."
13  export ANDROID_NDK_ROOT=/opt/ndk
14  export QNN_SDK_ROOT=/tmp/qnn/2.25.0.240728
15  export EXECUTORCH_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
16
17  bash backends/qualcomm/scripts/build.sh --skip_aarch64 --job_number 2 --release
18}
19
20set_up_aot() {
21  cd $EXECUTORCH_ROOT
22  if [ ! -d "cmake-out" ]; then
23      mkdir cmake-out
24  fi
25  pushd cmake-out
26  cmake .. \
27      -DCMAKE_INSTALL_PREFIX=$PWD \
28      -DEXECUTORCH_BUILD_QNN=ON \
29      -DQNN_SDK_ROOT=${QNN_SDK_ROOT} \
30      -DEXECUTORCH_BUILD_DEVTOOLS=ON \
31      -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
32      -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
33      -DEXECUTORCH_ENABLE_EVENT_TRACER=ON \
34      -DPYTHON_EXECUTABLE=python3 \
35      -DEXECUTORCH_SEPARATE_FLATCC_HOST_PROJECT=OFF
36  cmake --build $PWD --target "PyQnnManagerAdaptor" "PyQnnWrapperAdaptor" -j$(nproc)
37  # install Python APIs to correct import path
38  # The filename might vary depending on your Python and host version.
39  cp -f backends/qualcomm/PyQnnManagerAdaptor.cpython-310-x86_64-linux-gnu.so $EXECUTORCH_ROOT/backends/qualcomm/python
40  cp -f backends/qualcomm/PyQnnWrapperAdaptor.cpython-310-x86_64-linux-gnu.so $EXECUTORCH_ROOT/backends/qualcomm/python
41  popd
42
43  # Workaround for fbs files in exir/_serialize
44  cp schema/program.fbs exir/_serialize/program.fbs
45  cp schema/scalar_type.fbs exir/_serialize/scalar_type.fbs
46}
47
48build_qnn_backend
49set_up_aot
50