#!/bin/bash
|
# This shell script used to install system tools
|
|
# this project absolute path
|
PRJ_PATH=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
|
|
# top project absolute path
|
TOP_PATH=$(realpath $PRJ_PATH/..)
|
|
# config file path
|
CONF_FILE=$TOP_PATH/config.json
|
|
# shell script will exit once get command error
|
set -e
|
|
#+-------------------------+
|
#| Shell script functions |
|
#+-------------------------+
|
|
function pr_error() {
|
echo -e "\033[40;31m $1 \033[0m"
|
}
|
|
function pr_warn() {
|
echo -e "\033[40;33m $1 \033[0m"
|
}
|
|
function pr_info() {
|
echo -e "\033[40;32m $1 \033[0m"
|
}
|
|
# decompress a packet to destination path
|
function do_unpack()
|
{
|
tarball=$1
|
dstpath=`pwd`
|
|
if [[ $# == 2 ]] ; then
|
dstpath=$2
|
fi
|
|
pr_info "decompress $tarball => $dstpath"
|
|
mkdir -p $dstpath
|
case $tarball in
|
*.tar.gz)
|
tar -xzf $tarball -C $dstpath
|
;;
|
|
*.tar.bz2)
|
tar -xjf $tarball -C $dstpath
|
;;
|
|
*.tar.xz)
|
tar -xJf $tarball -C $dstpath
|
;;
|
|
*.tar.zst)
|
tar -I zstd -xf $tarball -C $dstpath
|
;;
|
|
*.tar)
|
tar -xf $tarball -C $dstpath
|
;;
|
|
*.zip)
|
unzip -qo $tarball -d $dstpath
|
;;
|
|
*)
|
pr_error "decompress Unsupport packet: $tarball"
|
return 1;
|
;;
|
esac
|
}
|
|
# parser configure file and export environment variable
|
function export_env()
|
{
|
export BOARD=`jq -r ".bsp.board" $CONF_FILE | tr 'A-Z' 'a-z'`
|
export BSP_VER=`jq -r ".bsp.version" $CONF_FILE | tr 'A-Z' 'a-z'`
|
export BSP_URL=`jq -r ".bsp.giturl" $CONF_FILE`
|
export CROSS_COMPILE=`jq -r ".bsp.crosstool" $CONF_FILE`
|
}
|
|
function install_systools()
|
{
|
if command -v jq > /dev/null 2>&1 ; then
|
pr_info "All system tools already installed, skip it"
|
return 0;
|
fi
|
|
pr_info "start apt install system tools(commands)"
|
|
systools="coreutils jq wget curl tree gawk sed unzip cpio bc lzop zstd rsync kmod kpartx \
|
desktop-file-utils iputils-ping xterm diffstat chrpath asciidoc docbook-utils help2man \
|
build-essential gcc g++ make cmake automake groff socat flex texinfo bison texi2html \
|
git cvs subversion mercurial autoconf autoconf-archive parted dosfstools fakeroot \
|
python3 python3-pip python3-pexpect python3-git python3-jinja2 \
|
lib32z1 libssl-dev libncurses-dev libgl1-mesa-dev libglu1-mesa-dev libsdl1.2-dev \
|
u-boot-tools mtd-utils device-tree-compiler binfmt-support "
|
|
apt update > /dev/null 2>&1
|
apt install -y $systools
|
}
|
|
function install_crosstool()
|
{
|
# Crosstool installed path
|
CROSSTOOL_PATH=`dirname $CROSS_COMPILE`
|
|
# crosstool name and version
|
tmp="${CROSS_COMPILE%/bin/*}"
|
CROSSTOOL_NAME="${tmp##*/}"
|
|
# crosstool installed path
|
CROSSTOOL_DIR="${CROSS_COMPILE%%/$CROSSTOOL_NAME/*}/"
|
|
|
if [ -d $CROSSTOOL_PATH ] ; then
|
pr_info "Crosstool already installed to $CROSSTOOL_PATH, skip it"
|
return ;
|
fi
|
|
wget $BSP_URL/at91/bsp/$BSP_VER/$CROSSTOOL_NAME.tar.xz
|
|
# decompress source code packet
|
mkdir -p $CROSSTOOL_DIR
|
do_unpack $CROSSTOOL_NAME.tar.xz $CROSSTOOL_DIR
|
|
# show cross compiler version information
|
${CROSS_COMPILE}gcc -v
|
|
rm -f $CROSSTOOL_NAME.tar.xz
|
}
|
|
if [ `id -u` != 0 ] ; then
|
echo ""
|
pr_error "This shell script must be excuted as root privilege"
|
exit;
|
fi
|
|
export_env
|
|
install_systools
|
|
install_crosstool
|