blob: dea138be338eccdb65ef77a29ae130cc9f5925b8 [file] [log] [blame]
#!/bin/bash
#
# Copyright © 2022, 2024 Arm Ltd and Contributors. All rights reserved.
# SPDX-License-Identifier: MIT
#
# Script which installs system-wide packages required by setup-armnn.sh and build-armnn.sh
# Downloads and builds CMake from source in the current directory from which this script is called
# CMake will be installed system-wide once this script has completed execution
# Requires sudo privileges
set -o nounset # Catch references to undefined variables.
set -o pipefail # Catch non zero exit codes within pipelines.
set -o errexit # Catch and propagate non zero exit codes.
# Host architecture e.g. x86_64, aarch64
HOST_ARCH=$(uname -m)
# Number of online cores on host
NUM_THREADS=$(getconf _NPROCESSORS_ONLN)
# CMake is downloaded and built in the current directory from which this script is called
ROOT_DIR=$(pwd)
# CMake
CMAKE_VERSION=3.19
CMAKE_VERSION_FULL=3.19.0
CMAKE_SRC="$ROOT_DIR"/cmake-"$CMAKE_VERSION_FULL"
CMAKE_BUILD="$ROOT_DIR"/cmake_build
download_cmake()
{
cd "$ROOT_DIR"
echo -e "\n***** Downloading CMake $CMAKE_VERSION *****"
wget -O cmake-"$CMAKE_VERSION_FULL".tar.gz https://cmake.org/files/v"$CMAKE_VERSION"/cmake-"$CMAKE_VERSION_FULL".tar.gz
echo -e "\n***** Extracting archive *****"
tar -xzf cmake-"$CMAKE_VERSION_FULL".tar.gz
echo -e "\n***** Removing archive *****"
rm cmake-"$CMAKE_VERSION_FULL".tar.gz
echo -e "\n***** CMake $CMAKE_VERSION Downloaded *****"
}
install_cmake()
{
mkdir -p "$CMAKE_BUILD"
cd "$CMAKE_BUILD"
apt-get purge -y cmake
echo -e "\n***** Building CMake $CMAKE_VERSION ***** "
"$CMAKE_SRC"/bootstrap
make
make install -j "$NUM_THREADS"
if [[ "$(cmake --version 2> /dev/null | grep "$CMAKE_VERSION" )" == *"$CMAKE_VERSION"* ]]; then
echo -e "\n***** Built and Installed CMake $CMAKE_VERSION *****"
else
echo -e "\nERROR: CMake $CMAKE_VERSION not installed correctly after building from source"
exit 1
fi
}
install_apt_packages()
{
apt-get update && apt-get install -y --no-install-recommends \
autoconf \
automake \
build-essential \
curl \
git \
libssl-dev \
libtool \
make \
scons \
unzip \
wget \
xxd \
llvm
# Install cross compile toolchains if host is x86_64
if [ "$HOST_ARCH" == "x86_64" ]; then
apt-get update && apt-get install -y --no-install-recommends \
crossbuild-essential-arm64
fi
apt-get clean
rm -rf /var/lib/apt/lists/*
}
usage_darwin()
{
cat <<EOF
The $osname platform requires manual setup:
0) Install the command line developer tools (at a minimum)
1) Install homebrew and then run the following in a terminal:
1) brew install cmake
2) brew install scons
3) brew install gnu-getopt
4) brew install wget
EOF
}
osname=$(uname)
if [ "$osname" == "Darwin" ]; then
usage_darwin
exit 1
fi
name=$(basename "$0")
if [ ! "$(id -u)" -eq 0 ]; then
echo -e "\nERROR: $name must be ran as root (i.e. sudo ./$name)"
exit 1
fi
echo -e "\n***** $name: Installing system-wide packages required by setup-armnn.sh and build-armnn.sh *****"
echo -e "\nINFO: This script downloads and builds CMake from source in the current directory from which this script is called"
echo -e "\nINFO: CMake and other apt packages will be installed system-wide once this script has completed execution"
install_apt_packages
# Download, Build and Install CMake if not already present
if [[ "$(cmake --version 2> /dev/null | grep "$CMAKE_VERSION" )" == *"$CMAKE_VERSION"* ]]; then
echo -e "\n***** CMake $CMAKE_VERSION already installed, skipping CMake install *****"
else
download_cmake
install_cmake
fi
echo -e "\n***** $name: Successfully installed system-wide packages required by setup-armnn.sh and build-armnn.sh *****\n"
exit 0