|  |  | 
 |  |  | #!/bin/bash | 
 |  |  | # This shell script used to install system tools | 
 |  |  |  | 
 |  |  | # display in red | 
 |  |  | # 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 --E-- $1 \033[0m\n" | 
 |  |  |     echo -e "\033[40;31m $1 \033[0m" | 
 |  |  | } | 
 |  |  |  | 
 |  |  | # display in green | 
 |  |  | function pr_warn() { | 
 |  |  |     echo -e "\033[40;33m $1 \033[0m" | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function pr_info() { | 
 |  |  |     echo -e "\033[40;32m --I-- $1 \033[0m\n" | 
 |  |  |     echo -e "\033[40;32m $1 \033[0m" | 
 |  |  | } | 
 |  |  |  | 
 |  |  | if [ `id -u` != 0 ] ; then | 
 |  |  |     echo "" | 
 |  |  |     pr_error "This shell script must be excuted as root privilege" | 
 |  |  |     exit; | 
 |  |  | fi | 
 |  |  |  | 
 |  |  | function install_systools() | 
 |  |  | { | 
 |  |  | 
 |  |  |     apt install -y $devtools | 
 |  |  | } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | # NXP document suggest cross compiler from ARM Developer: | 
 |  |  | #   https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads | 
 |  |  | function install_crosstool() | 
 |  |  | function install_crosstool_imx6() | 
 |  |  | { | 
 |  |  |     ARMTOOL_VER=10.3-2021.07 | 
 |  |  |     # Crosstool for Cortex-A download from ARM Developer | 
 |  |  |     ARMTOOL_NAME=arm-none-linux-gnueabihf | 
 |  |  |     CortexA_PACK=gcc-arm-$ARMTOOL_VER-`uname -p`-$ARMTOOL_NAME | 
 |  |  |     CortexA_TAR=$CortexA_PACK.tar.xz | 
 |  |  |     CortexA_URL=https://developer.arm.com/-/media/Files/downloads/gnu-a/$ARMTOOL_VER/binrel/ | 
 |  |  |     CortexA_NAME=gcc-aarch32-$ARMTOOL_VER | 
 |  |  |  | 
 |  |  |     CortexM_PACK=gcc-arm-none-eabi-$ARMTOOL_VER-`uname -p`-linux | 
 |  |  |     if [ -d /opt/$CortexA_NAME ]  ; then | 
 |  |  |         pr_info "Cortex-A crosstool /opt/$CortexA_NAME installed already, skip it" | 
 |  |  |     else | 
 |  |  |         if [ ! -s $CortexA_TAR ] ; then | 
 |  |  |             pr_info "start download cross compiler from ARM Developer for Cortex-A core" | 
 |  |  |             wget $CortexA_URL/$CortexA_TAR | 
 |  |  |         fi | 
 |  |  |  | 
 |  |  |         pr_info "start decompress cross compiler for Cortex-A core" | 
 |  |  |         tar -xJf $CortexA_TAR -C /opt | 
 |  |  |         mv /opt/$CortexA_PACK /opt/$CortexA_NAME | 
 |  |  |         /opt/$CortexA_NAME/bin/${ARMTOOL_NAME}-gcc -v | 
 |  |  |         pr_info "cross compiler for Cortex-A installed to \"/opt/$CortexA_NAME\" successfully" | 
 |  |  |         rm -f $CortexA_TAR | 
 |  |  |     fi | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function install_crosstool_imx8() | 
 |  |  | { | 
 |  |  |     # Crosstool for Cortex-M download from ARM Developer | 
 |  |  |     ARMTOOL_NAME=arm-none-eabi | 
 |  |  |     CortexM_PACK=gcc-$ARMTOOL_NAME-$ARMTOOL_VER-`uname -p`-linux | 
 |  |  |     CortexM_TAR=$CortexM_PACK.tar.bz2 | 
 |  |  |     CortexM_URL=https://developer.arm.com/-/media/Files/downloads/gnu-rm/$ARMTOOL_VER/ | 
 |  |  |     CortexM_NAME=gcc-cortexM-$ARMTOOL_VER | 
 |  |  |  | 
 |  |  |     # Crosstool for Cortex-M download from ARM Developer | 
 |  |  |  | 
 |  |  |     if [ -d /opt/$CortexM_NAME ]  ; then | 
 |  |  |         pr_info "Cortex-M crosstool /opt/$CortexM_NAME installed already, skip it" | 
 |  |  | 
 |  |  |  | 
 |  |  |         pr_info "start decompress cross compiler for Cortex-M core" | 
 |  |  |         tar -xjf $CortexM_TAR -C /opt | 
 |  |  |         mv /opt/gcc-arm-none-eabi-$ARMTOOL_VER /opt/$CortexM_NAME | 
 |  |  |         rm -f $CortexM_TAR | 
 |  |  |  | 
 |  |  |         /opt/$CortexM_NAME/bin/arm-none-eabi-gcc -v | 
 |  |  |         mv /opt/gcc-$ARMTOOL_NAME-$ARMTOOL_VER /opt/$CortexM_NAME | 
 |  |  |         /opt/$CortexM_NAME/bin/$ARMTOOL_NAME-gcc -v | 
 |  |  |         pr_info "cross compiler for Cortex-M installed to \"/opt/$CortexM_NAME\" successfully" | 
 |  |  |         rm -f $CortexM_TAR | 
 |  |  |     fi | 
 |  |  |  | 
 |  |  |     # Crosstool for Cortex-A download from ARM Developer | 
 |  |  |  | 
 |  |  |     CortexA_PACK=gcc-arm-$ARMTOOL_VER-`uname -p`-aarch64-none-linux-gnu | 
 |  |  |     ARMTOOL_NAME=aarch64-none-linux-gnu | 
 |  |  |     CortexA_PACK=gcc-arm-$ARMTOOL_VER-`uname -p`-$ARMTOOL_NAME | 
 |  |  |     CortexA_TAR=$CortexA_PACK.tar.xz | 
 |  |  |     CortexA_URL=https://developer.arm.com/-/media/Files/downloads/gnu-a/$ARMTOOL_VER/binrel/ | 
 |  |  |     CortexA_NAME=gcc-aarch64-$ARMTOOL_VER | 
 |  |  | 
 |  |  |         pr_info "start decompress cross compiler for Cortex-A core" | 
 |  |  |         tar -xJf $CortexA_TAR -C /opt | 
 |  |  |         mv /opt/$CortexA_PACK /opt/$CortexA_NAME | 
 |  |  |         rm -f $CortexA_TAR | 
 |  |  |  | 
 |  |  |         /opt/$CortexA_NAME/bin/aarch64-none-linux-gnu-gcc -v | 
 |  |  |         /opt/$CortexA_NAME/bin/$ARMTOOL_NAME-gcc -v | 
 |  |  |         pr_info "cross compiler for Cortex-A installed to \"/opt/$CortexA_NAME\" successfully" | 
 |  |  |         rm -f $CortexA_TAR | 
 |  |  |     fi | 
 |  |  | } | 
 |  |  |  | 
 |  |  | echo "" | 
 |  |  | set -e | 
 |  |  | if [ `id -u` != 0 ] ; then | 
 |  |  |     echo "" | 
 |  |  |     pr_error "This shell script must be excuted as root privilege" | 
 |  |  |     exit; | 
 |  |  | fi | 
 |  |  |  | 
 |  |  | install_systools | 
 |  |  |  | 
 |  |  | install_devtools | 
 |  |  |  | 
 |  |  | install_crosstool | 
 |  |  | BOARD=`jq -r ".bsp.board" $CONF_FILE | tr 'A-Z' 'a-z'` | 
 |  |  |  | 
 |  |  | if [[ $BOARD =~ mx6ull ]] ; then | 
 |  |  |     install_crosstool_imx6 | 
 |  |  | else | 
 |  |  |     install_crosstool_imx8 | 
 |  |  | fi | 
 |  |  |  |