xref: /aosp_15_r20/external/android-nn-driver/setup.sh (revision 3e777be0405cee09af5d5785ff37f7cfb5bee59a)
1#!/bin/bash
2
3#
4# Copyright © 2018, 2020-022 Arm Ltd and Contributors. All rights reserved.
5# SPDX-License-Identifier: MIT
6#
7
8function AssertZeroExitCode {
9  EXITCODE=$?
10  if [ $EXITCODE -ne 0 ]; then
11    echo "$1"
12    echo "+++ Command exited with code $EXITCODE. Please fix the above errors and re-run"
13    exit 1
14  fi
15}
16
17BUILD_DIR=build-x86_64
18FLATBUFFERS_DIR=$PWD/flatbuffers
19
20function BuildFlatbuffers {
21  pushd flatbuffers
22  rm -rf $BUILD_DIR
23  rm -f CMakeCache.txt
24  FLATBUFFERS_DIR=$PWD
25
26  mkdir -p $BUILD_DIR
27  cd $BUILD_DIR
28
29  echo "+++ Building Google Flatbufers"
30  CMD="cmake -DFLATBUFFERS_BUILD_FLATC=1 -DCMAKE_INSTALL_PREFIX:PATH=$FLATBUFFERS_DIR .."
31  # Force -fPIC to allow relocatable linking.
32  CXXFLAGS="-fPIC" $CMD
33  AssertZeroExitCode "cmake Google Flatbuffers failed. command was: ${CMD}"
34  make all install
35  AssertZeroExitCode "Building Google Flatbuffers failed"
36  mkdir -p $FLATBUFFERS_DIR/bin
37  cp -f flatc $FLATBUFFERS_DIR/bin
38  AssertZeroExitCode "Failed to copy the Flatbuffers Compiler"
39  popd
40}
41
42if [ ! -d flatbuffers ]; then
43  echo "++ Downloading FlatBuffers v2.0.6"
44
45  FLATBUFFERS_PKG=v2.0.6.tar.gz
46
47  curl -LOk https://github.com/google/flatbuffers/archive/${FLATBUFFERS_PKG}
48  AssertZeroExitCode "Downloading FlatBuffers failed"
49  mkdir -p flatbuffers
50  tar xzf $FLATBUFFERS_PKG -C flatbuffers --strip-components 1
51  AssertZeroExitCode "Unpacking FlatBuffers failed"
52
53  BuildFlatbuffers
54
55  rm -rf $FLATBUFFERS_PKG
56fi
57
58if [ ! -d armnn ]; then
59  echo "++ Downloading armnn"
60
61  git clone git@github.com:ARM-software/armnn armnn
62  AssertZeroExitCode "Cloning armnn failed"
63fi
64
65if [ ! -d clframework ]; then
66  echo "++ Downloading clframework"
67
68  git clone git@github.com:ARM-software/ComputeLibrary clframework
69  AssertZeroExitCode "Cloning clframework failed"
70fi
71
72# Get scons to create the generated source code which clframework needs to compile.
73# This is required for the Android build system to build clframework (see below)
74pushd clframework
75scons os=android build=embed_only neon=0 opencl=1 embed_kernels=1 validation_tests=0 \
76    arch=arm64-v8.2-a build_dir=android-arm64v8.2-a benchmark_tests=0 -j16 \
77    build/android-arm64v8.2-a/src/core/arm_compute_version.embed build/android-arm64v8.2-a/src/core/CL/cl_kernels
78AssertZeroExitCode "Precompiling clframework failed for v82.a"
79
80scons os=android build=embed_only neon=0 opencl=1 embed_kernels=1 validation_tests=0 \
81    arch=arm64-v8a build_dir=android-arm64v8a benchmark_tests=0 -j16 \
82    build/android-arm64v8a/src/core/arm_compute_version.embed build/android-arm64v8a/src/core/CL/cl_kernels
83AssertZeroExitCode "Precompiling clframework failed for v8a."
84popd
85
86if [ ! -d armnn/generated ]; then
87  mkdir -p armnn/generated
88fi
89
90if [ ! -f armnn/generated/ArmnnSchema_generated.h ]; then
91  echo "+++ Generating new ArmnnSchema_generated.h"
92  $FLATBUFFERS_DIR/bin/flatc -o armnn/generated --cpp armnn/src/armnnSerializer/ArmnnSchema.fbs
93  AssertZeroExitCode "Generating ArmnnSchema_generated.h failed."
94fi
95