From 4846e746577141232da11c90bf98ba9e00448ed4 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Wed, 22 May 2024 23:19:30 +0800
Subject: [PATCH] Add setup_tools.sh shell script

---
 tools/setup_tools.sh |  152 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 152 insertions(+), 0 deletions(-)

diff --git a/tools/setup_tools.sh b/tools/setup_tools.sh
new file mode 100755
index 0000000..68620fb
--- /dev/null
+++ b/tools/setup_tools.sh
@@ -0,0 +1,152 @@
+#!/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
+
+# NXP document suggest cross compiler from ARM Developer:
+#   https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
+ARMTOOL_VER=10.3-2021.07
+
+# 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 \
+        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
+

--
Gitblit v1.9.1