xref: /aosp_15_r20/external/armnn/build-tool/scripts/setup-armnn.sh (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker#!/bin/bash
2*89c4ff92SAndroid Build Coastguard Worker#
3*89c4ff92SAndroid Build Coastguard Worker# Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
4*89c4ff92SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT
5*89c4ff92SAndroid Build Coastguard Worker#
6*89c4ff92SAndroid Build Coastguard Worker
7*89c4ff92SAndroid Build Coastguard Worker# Script which downloads and builds Arm NN dependencies
8*89c4ff92SAndroid Build Coastguard Worker# Perquisite to running build-armnn.sh
9*89c4ff92SAndroid Build Coastguard Worker
10*89c4ff92SAndroid Build Coastguard Workerset -o nounset  # Catch references to undefined variables.
11*89c4ff92SAndroid Build Coastguard Workerset -o pipefail # Catch non zero exit codes within pipelines.
12*89c4ff92SAndroid Build Coastguard Workerset -o errexit  # Catch and propagate non zero exit codes.
13*89c4ff92SAndroid Build Coastguard Worker
14*89c4ff92SAndroid Build Coastguard Workerrel_path=$(dirname "$0") # relative path from where script is executed to script location
15*89c4ff92SAndroid Build Coastguard Worker
16*89c4ff92SAndroid Build Coastguard Worker# Download an archive using wget and extract using tar
17*89c4ff92SAndroid Build Coastguard Worker# Takes three arguments:
18*89c4ff92SAndroid Build Coastguard Worker# 1. Name of dependency being downloaded e.g. Flatbuffers
19*89c4ff92SAndroid Build Coastguard Worker# 2. Link to archive
20*89c4ff92SAndroid Build Coastguard Worker# 3. Filename given to archive upon downloading
21*89c4ff92SAndroid Build Coastguard Workerdownload_and_extract()
22*89c4ff92SAndroid Build Coastguard Worker{
23*89c4ff92SAndroid Build Coastguard Worker  cd "$SOURCE_DIR"
24*89c4ff92SAndroid Build Coastguard Worker
25*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Downloading $1 *****\n"
26*89c4ff92SAndroid Build Coastguard Worker  wget -O "$3" "$2"
27*89c4ff92SAndroid Build Coastguard Worker
28*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Extracting archive *****"
29*89c4ff92SAndroid Build Coastguard Worker  tar -xzf "$3"
30*89c4ff92SAndroid Build Coastguard Worker
31*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Removing archive *****"
32*89c4ff92SAndroid Build Coastguard Worker  rm "$3"
33*89c4ff92SAndroid Build Coastguard Worker
34*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** $1 downloaded *****"
35*89c4ff92SAndroid Build Coastguard Worker}
36*89c4ff92SAndroid Build Coastguard Worker
37*89c4ff92SAndroid Build Coastguard Workerdownload_protobuf()
38*89c4ff92SAndroid Build Coastguard Worker{
39*89c4ff92SAndroid Build Coastguard Worker  download_and_extract \
40*89c4ff92SAndroid Build Coastguard Worker    "Protobuf" \
41*89c4ff92SAndroid Build Coastguard Worker    "https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOBUF_VERSION/protobuf-all-$PROTOBUF_VERSION.tar.gz" \
42*89c4ff92SAndroid Build Coastguard Worker    "protobuf-all-$PROTOBUF_VERSION.tar.gz"
43*89c4ff92SAndroid Build Coastguard Worker}
44*89c4ff92SAndroid Build Coastguard Worker
45*89c4ff92SAndroid Build Coastguard Workerbuild_protobuf()
46*89c4ff92SAndroid Build Coastguard Worker{
47*89c4ff92SAndroid Build Coastguard Worker  local native_build=$1
48*89c4ff92SAndroid Build Coastguard Worker  local build_dir="$PROTOBUF_BUILD_TARGET"
49*89c4ff92SAndroid Build Coastguard Worker  local cmake_flags=""
50*89c4ff92SAndroid Build Coastguard Worker  local target_arch="$TARGET_ARCH"
51*89c4ff92SAndroid Build Coastguard Worker  local additional_cmds=""
52*89c4ff92SAndroid Build Coastguard Worker
53*89c4ff92SAndroid Build Coastguard Worker  if [ "$native_build" -eq 0 ]; then
54*89c4ff92SAndroid Build Coastguard Worker    mkdir -p "$PROTOBUF_BUILD_TARGET"
55*89c4ff92SAndroid Build Coastguard Worker    additional_cmds+="--with-protoc=$PROTOCOL_COMPILER_HOST "
56*89c4ff92SAndroid Build Coastguard Worker    if [ "$TARGET_ARCH" == "aarch64" ]; then
57*89c4ff92SAndroid Build Coastguard Worker      cmake_flags+="$AARCH64_COMPILER_FLAGS"
58*89c4ff92SAndroid Build Coastguard Worker      additional_cmds+="--host=aarch64-linux "
59*89c4ff92SAndroid Build Coastguard Worker    fi
60*89c4ff92SAndroid Build Coastguard Worker  else
61*89c4ff92SAndroid Build Coastguard Worker    target_arch="$HOST_ARCH"
62*89c4ff92SAndroid Build Coastguard Worker    mkdir -p "$PROTOBUF_BUILD_HOST"
63*89c4ff92SAndroid Build Coastguard Worker    build_dir="$PROTOBUF_BUILD_HOST"
64*89c4ff92SAndroid Build Coastguard Worker  fi
65*89c4ff92SAndroid Build Coastguard Worker
66*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Building Protobuf for $target_arch ***** "
67*89c4ff92SAndroid Build Coastguard Worker
68*89c4ff92SAndroid Build Coastguard Worker  cd "$PROTOBUF_BUILD_ROOT"
69*89c4ff92SAndroid Build Coastguard Worker
70*89c4ff92SAndroid Build Coastguard Worker  # Cleanup any previous cmake files, except actual builds which we keep
71*89c4ff92SAndroid Build Coastguard Worker  find . -mindepth 1 -name "*_build" -prune -o -exec rm -rf {} +
72*89c4ff92SAndroid Build Coastguard Worker
73*89c4ff92SAndroid Build Coastguard Worker  eval "$cmake_flags" \
74*89c4ff92SAndroid Build Coastguard Worker  "$PROTOBUF_SRC"/configure --prefix="$build_dir" "$additional_cmds"
75*89c4ff92SAndroid Build Coastguard Worker  make install -j "$NUM_THREADS"
76*89c4ff92SAndroid Build Coastguard Worker
77*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Protobuf built for $target_arch ***** "
78*89c4ff92SAndroid Build Coastguard Worker}
79*89c4ff92SAndroid Build Coastguard Worker
80*89c4ff92SAndroid Build Coastguard Workerdownload_flatbuffers()
81*89c4ff92SAndroid Build Coastguard Worker{
82*89c4ff92SAndroid Build Coastguard Worker  download_and_extract \
83*89c4ff92SAndroid Build Coastguard Worker    "Flatbuffers" \
84*89c4ff92SAndroid Build Coastguard Worker    "https://github.com/google/flatbuffers/archive/v$FLATBUFFERS_VERSION.tar.gz" \
85*89c4ff92SAndroid Build Coastguard Worker    "flatbuffers-$FLATBUFFERS_VERSION.tar.gz"
86*89c4ff92SAndroid Build Coastguard Worker}
87*89c4ff92SAndroid Build Coastguard Worker
88*89c4ff92SAndroid Build Coastguard Workerbuild_flatbuffers()
89*89c4ff92SAndroid Build Coastguard Worker{
90*89c4ff92SAndroid Build Coastguard Worker  local native_build=$1
91*89c4ff92SAndroid Build Coastguard Worker  local build_dir="$FLATBUFFERS_BUILD_TARGET"
92*89c4ff92SAndroid Build Coastguard Worker  local target_arch="$TARGET_ARCH"
93*89c4ff92SAndroid Build Coastguard Worker
94*89c4ff92SAndroid Build Coastguard Worker  local cmake_flags="CXXFLAGS=-fPIC "
95*89c4ff92SAndroid Build Coastguard Worker
96*89c4ff92SAndroid Build Coastguard Worker  if [ "$native_build" -eq 0 ]; then
97*89c4ff92SAndroid Build Coastguard Worker    mkdir -p "$FLATBUFFERS_BUILD_TARGET"
98*89c4ff92SAndroid Build Coastguard Worker    if [ "$TARGET_ARCH" == "aarch64" ]; then
99*89c4ff92SAndroid Build Coastguard Worker      cmake_flags+="$AARCH64_COMPILER_FLAGS"
100*89c4ff92SAndroid Build Coastguard Worker    fi
101*89c4ff92SAndroid Build Coastguard Worker  else
102*89c4ff92SAndroid Build Coastguard Worker    target_arch="$HOST_ARCH"
103*89c4ff92SAndroid Build Coastguard Worker    mkdir -p "$FLATBUFFERS_BUILD_HOST"
104*89c4ff92SAndroid Build Coastguard Worker    build_dir="$FLATBUFFERS_BUILD_HOST"
105*89c4ff92SAndroid Build Coastguard Worker  fi
106*89c4ff92SAndroid Build Coastguard Worker
107*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Building flatbuffers for $target_arch *****"
108*89c4ff92SAndroid Build Coastguard Worker
109*89c4ff92SAndroid Build Coastguard Worker  mkdir -p "$FLATBUFFERS_BUILD_ROOT"
110*89c4ff92SAndroid Build Coastguard Worker  cd "$FLATBUFFERS_BUILD_ROOT"
111*89c4ff92SAndroid Build Coastguard Worker
112*89c4ff92SAndroid Build Coastguard Worker  # Cleanup any previous cmake files, except actual builds which we keep
113*89c4ff92SAndroid Build Coastguard Worker  find . -mindepth 1 -name "*_build" -prune -o -exec rm -rf {} +
114*89c4ff92SAndroid Build Coastguard Worker
115*89c4ff92SAndroid Build Coastguard Worker  eval "$cmake_flags" \
116*89c4ff92SAndroid Build Coastguard Worker  cmake -DFLATBUFFERS_BUILD_FLATC="$native_build" \
117*89c4ff92SAndroid Build Coastguard Worker        -DCMAKE_INSTALL_PREFIX:PATH="$build_dir" \
118*89c4ff92SAndroid Build Coastguard Worker        -DFLATBUFFERS_BUILD_TESTS=0 \
119*89c4ff92SAndroid Build Coastguard Worker	      "$FLATBUFFERS_SRC"
120*89c4ff92SAndroid Build Coastguard Worker  make all install -j "$NUM_THREADS"
121*89c4ff92SAndroid Build Coastguard Worker
122*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Built flatbuffers for $target_arch *****"
123*89c4ff92SAndroid Build Coastguard Worker}
124*89c4ff92SAndroid Build Coastguard Worker
125*89c4ff92SAndroid Build Coastguard Workerdownload_tensorflow()
126*89c4ff92SAndroid Build Coastguard Worker{
127*89c4ff92SAndroid Build Coastguard Worker  cd "$SOURCE_DIR"
128*89c4ff92SAndroid Build Coastguard Worker
129*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Downloading TensorFlow *****"
130*89c4ff92SAndroid Build Coastguard Worker  git clone https://github.com/tensorflow/tensorflow.git
131*89c4ff92SAndroid Build Coastguard Worker  cd "$TENSORFLOW_SRC"
132*89c4ff92SAndroid Build Coastguard Worker
133*89c4ff92SAndroid Build Coastguard Worker  git checkout "$TENSORFLOW_VERSION"
134*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** TensorFlow downloaded *****"
135*89c4ff92SAndroid Build Coastguard Worker}
136*89c4ff92SAndroid Build Coastguard Worker
137*89c4ff92SAndroid Build Coastguard Workerbuild_tflite()
138*89c4ff92SAndroid Build Coastguard Worker{
139*89c4ff92SAndroid Build Coastguard Worker  mkdir -p "$TFLITE_BUILD_TARGET"
140*89c4ff92SAndroid Build Coastguard Worker  cd "$TFLITE_BUILD_TARGET"
141*89c4ff92SAndroid Build Coastguard Worker
142*89c4ff92SAndroid Build Coastguard Worker  local target_arch_cmd="" # default is native, no command needed
143*89c4ff92SAndroid Build Coastguard Worker  local cmake_flags=""
144*89c4ff92SAndroid Build Coastguard Worker
145*89c4ff92SAndroid Build Coastguard Worker  case "$TARGET_ARCH" in
146*89c4ff92SAndroid Build Coastguard Worker    "aarch64")
147*89c4ff92SAndroid Build Coastguard Worker      cmake_flags+="$AARCH64_COMPILER_FLAGS"
148*89c4ff92SAndroid Build Coastguard Worker      target_arch_cmd="-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
149*89c4ff92SAndroid Build Coastguard Worker                       -DCMAKE_SYSTEM_NAME=Linux "
150*89c4ff92SAndroid Build Coastguard Worker
151*89c4ff92SAndroid Build Coastguard Worker      if [ "$NATIVE_BUILD" -eq 0 ]; then
152*89c4ff92SAndroid Build Coastguard Worker        cmake_flags+="ARMCC_FLAGS='-funsafe-math-optimizations' "
153*89c4ff92SAndroid Build Coastguard Worker      fi
154*89c4ff92SAndroid Build Coastguard Worker      ;;
155*89c4ff92SAndroid Build Coastguard Worker  esac
156*89c4ff92SAndroid Build Coastguard Worker
157*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Building TF Lite for $TARGET_ARCH *****"
158*89c4ff92SAndroid Build Coastguard Worker
159*89c4ff92SAndroid Build Coastguard Worker  # Cleanup any previous cmake files, except actual builds which we keep
160*89c4ff92SAndroid Build Coastguard Worker  find . -mindepth 1 -name "*_build" -prune -o -exec rm -rf {} +
161*89c4ff92SAndroid Build Coastguard Worker
162*89c4ff92SAndroid Build Coastguard Worker  eval "$cmake_flags" \
163*89c4ff92SAndroid Build Coastguard Worker  cmake -DTFLITE_ENABLE_XNNPACK=OFF \
164*89c4ff92SAndroid Build Coastguard Worker        -DFLATBUFFERS_BUILD_FLATC=OFF \
165*89c4ff92SAndroid Build Coastguard Worker        -DBUILD_SHARED_LIBS=OFF \
166*89c4ff92SAndroid Build Coastguard Worker        -DBUILD_TESTING=OFF \
167*89c4ff92SAndroid Build Coastguard Worker        "$target_arch_cmd" \
168*89c4ff92SAndroid Build Coastguard Worker        "$TFLITE_SRC"
169*89c4ff92SAndroid Build Coastguard Worker  cmake --build . -j "$NUM_THREADS"
170*89c4ff92SAndroid Build Coastguard Worker
171*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Built TF Lite for $TARGET_ARCH *****"
172*89c4ff92SAndroid Build Coastguard Worker}
173*89c4ff92SAndroid Build Coastguard Worker
174*89c4ff92SAndroid Build Coastguard Workergenerate_tflite_schema()
175*89c4ff92SAndroid Build Coastguard Worker{
176*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Generating TF Lite Schema *****"
177*89c4ff92SAndroid Build Coastguard Worker  mkdir -p "$TFLITE_BUILD_ROOT"
178*89c4ff92SAndroid Build Coastguard Worker  cd "$TFLITE_BUILD_ROOT"
179*89c4ff92SAndroid Build Coastguard Worker
180*89c4ff92SAndroid Build Coastguard Worker  cp "$SCHEMA_SRC" .
181*89c4ff92SAndroid Build Coastguard Worker
182*89c4ff92SAndroid Build Coastguard Worker  $FLATC -c --gen-object-api --reflect-types --reflect-names schema.fbs
183*89c4ff92SAndroid Build Coastguard Worker
184*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Generated TF Lite Schema *****"
185*89c4ff92SAndroid Build Coastguard Worker}
186*89c4ff92SAndroid Build Coastguard Worker
187*89c4ff92SAndroid Build Coastguard Workerdownload_onnx()
188*89c4ff92SAndroid Build Coastguard Worker{
189*89c4ff92SAndroid Build Coastguard Worker  download_and_extract \
190*89c4ff92SAndroid Build Coastguard Worker    "ONNX" \
191*89c4ff92SAndroid Build Coastguard Worker    "https://github.com/onnx/onnx/releases/download/v$ONNX_VERSION/onnx-$ONNX_VERSION.tar.gz" \
192*89c4ff92SAndroid Build Coastguard Worker    "onnx-$ONNX_VERSION.tar.gz"
193*89c4ff92SAndroid Build Coastguard Worker}
194*89c4ff92SAndroid Build Coastguard Worker
195*89c4ff92SAndroid Build Coastguard Workergenerate_onnx_sources()
196*89c4ff92SAndroid Build Coastguard Worker{
197*89c4ff92SAndroid Build Coastguard Worker  mkdir -p "$ONNX_BUILD_TARGET"
198*89c4ff92SAndroid Build Coastguard Worker  cd "$ONNX_SRC"
199*89c4ff92SAndroid Build Coastguard Worker
200*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Generating ONNX sources for $TARGET_ARCH *****"
201*89c4ff92SAndroid Build Coastguard Worker
202*89c4ff92SAndroid Build Coastguard Worker  export LD_LIBRARY_PATH="$PROTOBUF_BUILD_HOST"/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
203*89c4ff92SAndroid Build Coastguard Worker
204*89c4ff92SAndroid Build Coastguard Worker  eval "$PROTOCOL_COMPILER_HOST" onnx/onnx.proto \
205*89c4ff92SAndroid Build Coastguard Worker  --proto_path=. \
206*89c4ff92SAndroid Build Coastguard Worker  --proto_path="$ONNX_SRC" \
207*89c4ff92SAndroid Build Coastguard Worker  --proto_path="$PROTOBUF_BUILD_HOST"/include \
208*89c4ff92SAndroid Build Coastguard Worker  --cpp_out "$ONNX_BUILD_TARGET"
209*89c4ff92SAndroid Build Coastguard Worker
210*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Generated ONNX sources for $TARGET_ARCH *****"
211*89c4ff92SAndroid Build Coastguard Worker}
212*89c4ff92SAndroid Build Coastguard Worker
213*89c4ff92SAndroid Build Coastguard Workerusage()
214*89c4ff92SAndroid Build Coastguard Worker{
215*89c4ff92SAndroid Build Coastguard Worker  cat <<EOF
216*89c4ff92SAndroid Build Coastguard Workersetup-armnn.sh - Download and build Arm NN dependencies in the current directory (ROOT_DIR)
217*89c4ff92SAndroid Build Coastguard Workersetup-armnn.sh [OPTION]...
218*89c4ff92SAndroid Build Coastguard Worker  --tflite-delegate
219*89c4ff92SAndroid Build Coastguard Worker    setup dependencies for the Arm NN TF Lite Delegate
220*89c4ff92SAndroid Build Coastguard Worker  --tflite-parser
221*89c4ff92SAndroid Build Coastguard Worker    setup dependencies for the Arm NN TF Lite Parser
222*89c4ff92SAndroid Build Coastguard Worker  --onnx-parser
223*89c4ff92SAndroid Build Coastguard Worker    setup dependencies for the Arm NN ONNX parser
224*89c4ff92SAndroid Build Coastguard Worker  --all
225*89c4ff92SAndroid Build Coastguard Worker    setup dependencies for all Arm NN components listed above
226*89c4ff92SAndroid Build Coastguard Worker  --target-arch=[aarch64|x86_64]
227*89c4ff92SAndroid Build Coastguard Worker    specify a target architecture (mandatory)
228*89c4ff92SAndroid Build Coastguard Worker  --num-threads=<INTEGER>
229*89c4ff92SAndroid Build Coastguard Worker    specify number of threads/cores to build dependencies with (optional: defaults to number of online CPU cores on host)
230*89c4ff92SAndroid Build Coastguard Worker  -h, --help
231*89c4ff92SAndroid Build Coastguard Worker    print brief usage information and exit
232*89c4ff92SAndroid Build Coastguard Worker  -x
233*89c4ff92SAndroid Build Coastguard Worker    enable shell tracing in this script
234*89c4ff92SAndroid Build Coastguard Worker
235*89c4ff92SAndroid Build Coastguard WorkerAt least one dependency flag (e.g. --tflite-delegate) must be provided or else provide --all to setup all dependencies.
236*89c4ff92SAndroid Build Coastguard WorkerDirectories called "source" and "build" will be generated in the current directory (ROOT_DIR) from which this script is called.
237*89c4ff92SAndroid Build Coastguard WorkerIt's recommended to call this script in a directory outside of this Arm NN source repo, to avoid nested repositories.
238*89c4ff92SAndroid Build Coastguard Worker
239*89c4ff92SAndroid Build Coastguard WorkerExamples:
240*89c4ff92SAndroid Build Coastguard WorkerSetup for aarch64 with all Arm NN dependencies:
241*89c4ff92SAndroid Build Coastguard Worker    <PATH_TO>/setup-armnn.sh --target-arch=aarch64 --all
242*89c4ff92SAndroid Build Coastguard WorkerSetup for aarch64 with TF Lite Delegate and TF Lite Parser dependencies only:
243*89c4ff92SAndroid Build Coastguard Worker    <PATH_TO>/setup-armnn.sh --target-arch=aarch64 --tflite-delegate --tflite-parser
244*89c4ff92SAndroid Build Coastguard WorkerEOF
245*89c4ff92SAndroid Build Coastguard Worker}
246*89c4ff92SAndroid Build Coastguard Worker
247*89c4ff92SAndroid Build Coastguard Worker# This will catch in validation.sh if not set
248*89c4ff92SAndroid Build Coastguard Workertarget_arch=""
249*89c4ff92SAndroid Build Coastguard Worker
250*89c4ff92SAndroid Build Coastguard Worker# Default flag values
251*89c4ff92SAndroid Build Coastguard Workerflag_tflite_delegate=0
252*89c4ff92SAndroid Build Coastguard Workerflag_tflite_parser=0
253*89c4ff92SAndroid Build Coastguard Workerflag_onnx_parser=0
254*89c4ff92SAndroid Build Coastguard Worker
255*89c4ff92SAndroid Build Coastguard Worker# If --num-threads is not set, the default NUM_THREADS value in common.sh will be used
256*89c4ff92SAndroid Build Coastguard Workernum_threads=0
257*89c4ff92SAndroid Build Coastguard Worker
258*89c4ff92SAndroid Build Coastguard Workername=$(basename "$0")
259*89c4ff92SAndroid Build Coastguard Worker
260*89c4ff92SAndroid Build Coastguard Worker# If no options provided, show help
261*89c4ff92SAndroid Build Coastguard Workerif [ $# -eq 0 ]; then
262*89c4ff92SAndroid Build Coastguard Worker  usage
263*89c4ff92SAndroid Build Coastguard Worker  exit 1
264*89c4ff92SAndroid Build Coastguard Workerfi
265*89c4ff92SAndroid Build Coastguard Worker
266*89c4ff92SAndroid Build Coastguard Workerargs=$(getopt -ohx -l tflite-delegate,tflite-parser,onnx-parser,all,target-arch:,num-threads:,help -n "$name"   -- "$@")
267*89c4ff92SAndroid Build Coastguard Workereval set -- "$args"
268*89c4ff92SAndroid Build Coastguard Workerwhile [ $# -gt 0 ]; do
269*89c4ff92SAndroid Build Coastguard Worker  if [ -n "${opt_prev:-}" ]; then
270*89c4ff92SAndroid Build Coastguard Worker    eval "$opt_prev=\$1"
271*89c4ff92SAndroid Build Coastguard Worker    opt_prev=
272*89c4ff92SAndroid Build Coastguard Worker    shift 1
273*89c4ff92SAndroid Build Coastguard Worker    continue
274*89c4ff92SAndroid Build Coastguard Worker  elif [ -n "${opt_append:-}" ]; then
275*89c4ff92SAndroid Build Coastguard Worker    if [ -n "$1" ]; then
276*89c4ff92SAndroid Build Coastguard Worker      eval "$opt_append=\"\${$opt_append:-} \$1\""
277*89c4ff92SAndroid Build Coastguard Worker    fi
278*89c4ff92SAndroid Build Coastguard Worker    opt_append=
279*89c4ff92SAndroid Build Coastguard Worker    shift 1
280*89c4ff92SAndroid Build Coastguard Worker    continue
281*89c4ff92SAndroid Build Coastguard Worker  fi
282*89c4ff92SAndroid Build Coastguard Worker  case $1 in
283*89c4ff92SAndroid Build Coastguard Worker  --tflite-parser)
284*89c4ff92SAndroid Build Coastguard Worker    flag_tflite_parser=1
285*89c4ff92SAndroid Build Coastguard Worker    ;;
286*89c4ff92SAndroid Build Coastguard Worker
287*89c4ff92SAndroid Build Coastguard Worker  --tflite-delegate)
288*89c4ff92SAndroid Build Coastguard Worker    flag_tflite_delegate=1
289*89c4ff92SAndroid Build Coastguard Worker    ;;
290*89c4ff92SAndroid Build Coastguard Worker
291*89c4ff92SAndroid Build Coastguard Worker  --onnx-parser)
292*89c4ff92SAndroid Build Coastguard Worker    flag_onnx_parser=1
293*89c4ff92SAndroid Build Coastguard Worker    ;;
294*89c4ff92SAndroid Build Coastguard Worker
295*89c4ff92SAndroid Build Coastguard Worker  --all)
296*89c4ff92SAndroid Build Coastguard Worker    flag_tflite_delegate=1
297*89c4ff92SAndroid Build Coastguard Worker    flag_tflite_parser=1
298*89c4ff92SAndroid Build Coastguard Worker    flag_onnx_parser=1
299*89c4ff92SAndroid Build Coastguard Worker    ;;
300*89c4ff92SAndroid Build Coastguard Worker
301*89c4ff92SAndroid Build Coastguard Worker  --target-arch)
302*89c4ff92SAndroid Build Coastguard Worker    opt_prev=target_arch
303*89c4ff92SAndroid Build Coastguard Worker    ;;
304*89c4ff92SAndroid Build Coastguard Worker
305*89c4ff92SAndroid Build Coastguard Worker  --num-threads)
306*89c4ff92SAndroid Build Coastguard Worker    opt_prev=num_threads
307*89c4ff92SAndroid Build Coastguard Worker    ;;
308*89c4ff92SAndroid Build Coastguard Worker
309*89c4ff92SAndroid Build Coastguard Worker  -h | --help)
310*89c4ff92SAndroid Build Coastguard Worker    usage
311*89c4ff92SAndroid Build Coastguard Worker    exit 0
312*89c4ff92SAndroid Build Coastguard Worker    ;;
313*89c4ff92SAndroid Build Coastguard Worker
314*89c4ff92SAndroid Build Coastguard Worker  -x)
315*89c4ff92SAndroid Build Coastguard Worker    set -x
316*89c4ff92SAndroid Build Coastguard Worker    ;;
317*89c4ff92SAndroid Build Coastguard Worker
318*89c4ff92SAndroid Build Coastguard Worker  --)
319*89c4ff92SAndroid Build Coastguard Worker    shift
320*89c4ff92SAndroid Build Coastguard Worker    break 2
321*89c4ff92SAndroid Build Coastguard Worker    ;;
322*89c4ff92SAndroid Build Coastguard Worker
323*89c4ff92SAndroid Build Coastguard Worker  esac
324*89c4ff92SAndroid Build Coastguard Worker  shift 1
325*89c4ff92SAndroid Build Coastguard Workerdone
326*89c4ff92SAndroid Build Coastguard Worker
327*89c4ff92SAndroid Build Coastguard Worker# shellcheck source=common.sh
328*89c4ff92SAndroid Build Coastguard Workersource "$rel_path"/common.sh
329*89c4ff92SAndroid Build Coastguard Worker
330*89c4ff92SAndroid Build Coastguard Workerecho -e "\nINFO: Displaying configuration information before execution of $name"
331*89c4ff92SAndroid Build Coastguard Workerecho "     target-arch: $TARGET_ARCH"
332*89c4ff92SAndroid Build Coastguard Workerecho "       host-arch: $HOST_ARCH"
333*89c4ff92SAndroid Build Coastguard Workerecho " tflite-delegate: $flag_tflite_delegate"
334*89c4ff92SAndroid Build Coastguard Workerecho "   tflite-parser: $flag_tflite_parser"
335*89c4ff92SAndroid Build Coastguard Workerecho "     onnx-parser: $flag_onnx_parser"
336*89c4ff92SAndroid Build Coastguard Workerecho "     num-threads: $NUM_THREADS"
337*89c4ff92SAndroid Build Coastguard Workerecho "  root directory: $ROOT_DIR"
338*89c4ff92SAndroid Build Coastguard Workerecho "source directory: $SOURCE_DIR"
339*89c4ff92SAndroid Build Coastguard Workerecho " build directory: $BUILD_DIR"
340*89c4ff92SAndroid Build Coastguard Worker
341*89c4ff92SAndroid Build Coastguard Workerif check_if_repository .; then
342*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** WARNING: Running script inside a git repository. To avoid nested repos, call this script from outside of this repo. *****"
343*89c4ff92SAndroid Build Coastguard Workerfi
344*89c4ff92SAndroid Build Coastguard Worker
345*89c4ff92SAndroid Build Coastguard Workerecho -e "\nScript execution will begin in 10 seconds..."
346*89c4ff92SAndroid Build Coastguard Worker
347*89c4ff92SAndroid Build Coastguard Workersleep 10
348*89c4ff92SAndroid Build Coastguard Worker
349*89c4ff92SAndroid Build Coastguard Workermkdir -p "$SOURCE_DIR"
350*89c4ff92SAndroid Build Coastguard Workermkdir -p "$BUILD_DIR"
351*89c4ff92SAndroid Build Coastguard Worker
352*89c4ff92SAndroid Build Coastguard Workerif [ "$flag_tflite_delegate" -eq 1 ] || [ "$flag_tflite_parser" -eq 1 ]; then
353*89c4ff92SAndroid Build Coastguard Worker  download_flatbuffers
354*89c4ff92SAndroid Build Coastguard Worker
355*89c4ff92SAndroid Build Coastguard Worker  # Host build
356*89c4ff92SAndroid Build Coastguard Worker  build_flatbuffers 1
357*89c4ff92SAndroid Build Coastguard Worker
358*89c4ff92SAndroid Build Coastguard Worker  # Target build for cross compile
359*89c4ff92SAndroid Build Coastguard Worker  if [ "$NATIVE_BUILD" -eq 0 ]; then
360*89c4ff92SAndroid Build Coastguard Worker    build_flatbuffers 0
361*89c4ff92SAndroid Build Coastguard Worker  fi
362*89c4ff92SAndroid Build Coastguard Worker
363*89c4ff92SAndroid Build Coastguard Worker  download_tensorflow
364*89c4ff92SAndroid Build Coastguard Workerfi
365*89c4ff92SAndroid Build Coastguard Worker
366*89c4ff92SAndroid Build Coastguard Workerif [ "$flag_tflite_parser" -eq 1 ]; then
367*89c4ff92SAndroid Build Coastguard Worker  generate_tflite_schema
368*89c4ff92SAndroid Build Coastguard Workerfi
369*89c4ff92SAndroid Build Coastguard Worker
370*89c4ff92SAndroid Build Coastguard Workerif [ "$flag_tflite_delegate" -eq 1 ]; then
371*89c4ff92SAndroid Build Coastguard Worker  build_tflite
372*89c4ff92SAndroid Build Coastguard Workerfi
373*89c4ff92SAndroid Build Coastguard Worker
374*89c4ff92SAndroid Build Coastguard Workerif [ "$flag_onnx_parser" -eq 1 ]; then
375*89c4ff92SAndroid Build Coastguard Worker  download_protobuf
376*89c4ff92SAndroid Build Coastguard Worker
377*89c4ff92SAndroid Build Coastguard Worker  # Host build
378*89c4ff92SAndroid Build Coastguard Worker  build_protobuf 1
379*89c4ff92SAndroid Build Coastguard Worker
380*89c4ff92SAndroid Build Coastguard Worker  # Target build for cross compile
381*89c4ff92SAndroid Build Coastguard Worker  if [ "$NATIVE_BUILD" -eq 0 ]; then
382*89c4ff92SAndroid Build Coastguard Worker    build_protobuf 0
383*89c4ff92SAndroid Build Coastguard Worker  fi
384*89c4ff92SAndroid Build Coastguard Worker
385*89c4ff92SAndroid Build Coastguard Worker  download_onnx
386*89c4ff92SAndroid Build Coastguard Worker  generate_onnx_sources
387*89c4ff92SAndroid Build Coastguard Workerfi
388*89c4ff92SAndroid Build Coastguard Worker
389*89c4ff92SAndroid Build Coastguard Workerecho -e "\n***** Arm NN setup complete. Now build with build-armnn.sh. *****\n"
390*89c4ff92SAndroid Build Coastguard Worker
391*89c4ff92SAndroid Build Coastguard Workerexit 0