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