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