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