xref: /aosp_15_r20/external/armnn/build-tool/scripts/install-packages.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 installs system-wide packages required by setup-armnn.sh and build-armnn.sh
8*89c4ff92SAndroid Build Coastguard Worker# Downloads and builds CMake from source in the current directory from which this script is called
9*89c4ff92SAndroid Build Coastguard Worker# CMake will be installed system-wide once this script has completed execution
10*89c4ff92SAndroid Build Coastguard Worker# Requires sudo privileges
11*89c4ff92SAndroid Build Coastguard Worker
12*89c4ff92SAndroid Build Coastguard Workerset -o nounset  # Catch references to undefined variables.
13*89c4ff92SAndroid Build Coastguard Workerset -o pipefail # Catch non zero exit codes within pipelines.
14*89c4ff92SAndroid Build Coastguard Workerset -o errexit  # Catch and propagate non zero exit codes.
15*89c4ff92SAndroid Build Coastguard Worker
16*89c4ff92SAndroid Build Coastguard Worker# Host architecture e.g. x86_64, aarch64
17*89c4ff92SAndroid Build Coastguard WorkerHOST_ARCH=$(uname -m)
18*89c4ff92SAndroid Build Coastguard Worker
19*89c4ff92SAndroid Build Coastguard Worker# Number of online cores on host
20*89c4ff92SAndroid Build Coastguard WorkerNUM_THREADS=$(getconf _NPROCESSORS_ONLN)
21*89c4ff92SAndroid Build Coastguard Worker
22*89c4ff92SAndroid Build Coastguard Worker# CMake is downloaded and built in the current directory from which this script is called
23*89c4ff92SAndroid Build Coastguard WorkerROOT_DIR=$(pwd)
24*89c4ff92SAndroid Build Coastguard Worker
25*89c4ff92SAndroid Build Coastguard Worker# CMake
26*89c4ff92SAndroid Build Coastguard WorkerCMAKE_VERSION=3.19
27*89c4ff92SAndroid Build Coastguard WorkerCMAKE_VERSION_FULL=3.19.0
28*89c4ff92SAndroid Build Coastguard WorkerCMAKE_SRC="$ROOT_DIR"/cmake-"$CMAKE_VERSION_FULL"
29*89c4ff92SAndroid Build Coastguard WorkerCMAKE_BUILD="$ROOT_DIR"/cmake_build
30*89c4ff92SAndroid Build Coastguard Worker
31*89c4ff92SAndroid Build Coastguard Workerdownload_cmake()
32*89c4ff92SAndroid Build Coastguard Worker{
33*89c4ff92SAndroid Build Coastguard Worker  cd "$ROOT_DIR"
34*89c4ff92SAndroid Build Coastguard Worker
35*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Downloading CMake $CMAKE_VERSION *****"
36*89c4ff92SAndroid Build Coastguard Worker  wget -O cmake-"$CMAKE_VERSION_FULL".tar.gz https://cmake.org/files/v"$CMAKE_VERSION"/cmake-"$CMAKE_VERSION_FULL".tar.gz
37*89c4ff92SAndroid Build Coastguard Worker
38*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Extracting archive *****"
39*89c4ff92SAndroid Build Coastguard Worker  tar -xzf cmake-"$CMAKE_VERSION_FULL".tar.gz
40*89c4ff92SAndroid Build Coastguard Worker
41*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Removing archive *****"
42*89c4ff92SAndroid Build Coastguard Worker  rm cmake-"$CMAKE_VERSION_FULL".tar.gz
43*89c4ff92SAndroid Build Coastguard Worker
44*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** CMake $CMAKE_VERSION Downloaded *****"
45*89c4ff92SAndroid Build Coastguard Worker}
46*89c4ff92SAndroid Build Coastguard Worker
47*89c4ff92SAndroid Build Coastguard Workerinstall_cmake()
48*89c4ff92SAndroid Build Coastguard Worker{
49*89c4ff92SAndroid Build Coastguard Worker  mkdir -p "$CMAKE_BUILD"
50*89c4ff92SAndroid Build Coastguard Worker  cd "$CMAKE_BUILD"
51*89c4ff92SAndroid Build Coastguard Worker
52*89c4ff92SAndroid Build Coastguard Worker  apt-get purge -y cmake
53*89c4ff92SAndroid Build Coastguard Worker
54*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** Building CMake $CMAKE_VERSION ***** "
55*89c4ff92SAndroid Build Coastguard Worker  "$CMAKE_SRC"/bootstrap
56*89c4ff92SAndroid Build Coastguard Worker  make
57*89c4ff92SAndroid Build Coastguard Worker  make install -j "$NUM_THREADS"
58*89c4ff92SAndroid Build Coastguard Worker
59*89c4ff92SAndroid Build Coastguard Worker  if [[ "$(cmake --version 2> /dev/null | grep "$CMAKE_VERSION" )" == *"$CMAKE_VERSION"* ]]; then
60*89c4ff92SAndroid Build Coastguard Worker    echo -e "\n***** Built and Installed CMake $CMAKE_VERSION *****"
61*89c4ff92SAndroid Build Coastguard Worker  else
62*89c4ff92SAndroid Build Coastguard Worker    echo -e "\nERROR: CMake $CMAKE_VERSION not installed correctly after building from source"
63*89c4ff92SAndroid Build Coastguard Worker    exit 1
64*89c4ff92SAndroid Build Coastguard Worker  fi
65*89c4ff92SAndroid Build Coastguard Worker}
66*89c4ff92SAndroid Build Coastguard Worker
67*89c4ff92SAndroid Build Coastguard Workerinstall_apt_packages()
68*89c4ff92SAndroid Build Coastguard Worker{
69*89c4ff92SAndroid Build Coastguard Worker  apt-get update && apt-get install -y --no-install-recommends  \
70*89c4ff92SAndroid Build Coastguard Worker      autoconf \
71*89c4ff92SAndroid Build Coastguard Worker      automake \
72*89c4ff92SAndroid Build Coastguard Worker      build-essential \
73*89c4ff92SAndroid Build Coastguard Worker      curl \
74*89c4ff92SAndroid Build Coastguard Worker      git \
75*89c4ff92SAndroid Build Coastguard Worker      libssl-dev \
76*89c4ff92SAndroid Build Coastguard Worker      libtool \
77*89c4ff92SAndroid Build Coastguard Worker      make \
78*89c4ff92SAndroid Build Coastguard Worker      scons \
79*89c4ff92SAndroid Build Coastguard Worker      unzip \
80*89c4ff92SAndroid Build Coastguard Worker      wget \
81*89c4ff92SAndroid Build Coastguard Worker      xxd
82*89c4ff92SAndroid Build Coastguard Worker
83*89c4ff92SAndroid Build Coastguard Worker  # Install cross compile toolchains if host is x86_64
84*89c4ff92SAndroid Build Coastguard Worker  if [ "$HOST_ARCH" == "x86_64" ]; then
85*89c4ff92SAndroid Build Coastguard Worker    apt-get update && apt-get install -y --no-install-recommends  \
86*89c4ff92SAndroid Build Coastguard Worker        crossbuild-essential-arm64
87*89c4ff92SAndroid Build Coastguard Worker  fi
88*89c4ff92SAndroid Build Coastguard Worker
89*89c4ff92SAndroid Build Coastguard Worker  apt-get clean
90*89c4ff92SAndroid Build Coastguard Worker  rm -rf /var/lib/apt/lists/*
91*89c4ff92SAndroid Build Coastguard Worker}
92*89c4ff92SAndroid Build Coastguard Worker
93*89c4ff92SAndroid Build Coastguard Workername=$(basename "$0")
94*89c4ff92SAndroid Build Coastguard Worker
95*89c4ff92SAndroid Build Coastguard Workerif [ ! "$(id -u)" -eq 0 ]; then
96*89c4ff92SAndroid Build Coastguard Worker  echo -e "\nERROR: $name must be ran as root (i.e. sudo ./$name)"
97*89c4ff92SAndroid Build Coastguard Worker  exit 1
98*89c4ff92SAndroid Build Coastguard Workerfi
99*89c4ff92SAndroid Build Coastguard Worker
100*89c4ff92SAndroid Build Coastguard Workerecho -e "\n***** $name: Installing system-wide packages required by setup-armnn.sh and build-armnn.sh *****"
101*89c4ff92SAndroid Build Coastguard Workerecho -e "\nINFO: This script downloads and builds CMake from source in the current directory from which this script is called"
102*89c4ff92SAndroid Build Coastguard Workerecho -e "\nINFO: CMake and other apt packages will be installed system-wide once this script has completed execution"
103*89c4ff92SAndroid Build Coastguard Workerecho -e "\nScript execution will begin in 10 seconds..."
104*89c4ff92SAndroid Build Coastguard Worker
105*89c4ff92SAndroid Build Coastguard Workersleep 10
106*89c4ff92SAndroid Build Coastguard Worker
107*89c4ff92SAndroid Build Coastguard Workerinstall_apt_packages
108*89c4ff92SAndroid Build Coastguard Worker
109*89c4ff92SAndroid Build Coastguard Worker# Download, Build and Install CMake if not already present
110*89c4ff92SAndroid Build Coastguard Workerif [[ "$(cmake --version 2> /dev/null | grep "$CMAKE_VERSION" )" == *"$CMAKE_VERSION"* ]]; then
111*89c4ff92SAndroid Build Coastguard Worker  echo -e "\n***** CMake $CMAKE_VERSION already installed, skipping CMake install *****"
112*89c4ff92SAndroid Build Coastguard Workerelse
113*89c4ff92SAndroid Build Coastguard Worker  download_cmake
114*89c4ff92SAndroid Build Coastguard Worker  install_cmake
115*89c4ff92SAndroid Build Coastguard Workerfi
116*89c4ff92SAndroid Build Coastguard Worker
117*89c4ff92SAndroid Build Coastguard Workerecho -e "\n***** $name: Successfully installed system-wide packages required by setup-armnn.sh and build-armnn.sh *****\n"
118*89c4ff92SAndroid Build Coastguard Worker
119*89c4ff92SAndroid Build Coastguard Workerexit 0