#!/bin/bash # ---------------------------------------------------------------------------------------------------- if [ "$0" == "${BASH_SOURCE[0]}" ] ; then echo -e "\033[1;31m[ERROR](${SCRIPT_NAME}) Using the shell \"source\" command to this script.\033[0m \033[0;33msource ${BASH_SOURCE[0]}\033[0m"; fi # ---------------------------------------------------------------------------------------------------- SCRIPT_NAME_BAK=${SCRIPT_NAME};SCRIPT_PATH_BAK=${SCRIPT_PATH} SCRIPT_NAME=${BASH_SOURCE[0]##*/} SCRIPT_PATH=$(if [ -n "${BASH_SOURCE[0]%${SCRIPT_NAME}}" ]; then cd ${BASH_SOURCE[0]%${SCRIPT_NAME}}; fi; pwd) #echo "BASH_SOURCE[0]=${BASH_SOURCE[0]}" #echo "SCRIPT_FILE=${SCRIPT_FILE}" #echo "SCRIPT_NAME=${SCRIPT_NAME}" #echo "SCRIPT_PATH=${SCRIPT_PATH}" # ---------------------------------------------------------------------------------------------------- toolchain_echo_quiet_state=0; for argv in $*; do if [ "$argv" == "info" ]; then toolchain_echo_quiet_state=1; fi done function toolchain_echo() { if [ "$toolchain_echo_quiet_state" == "1" ]; then echo "$*"; fi } function toolchain_echo_yellow(){ echo -e "\033[0;33m$*\033[0m"; } function toolchain_echo_var() { var_name_len_max=16; if [ -n "$2" ]; then var_name_len_max=$2; fi var_name=$1 var_data=$(eval echo \${${var_name}}) var_name_len=${#var_name} for((i=${var_name_len};i<${var_name_len_max};i++)); do var_name="${var_name} " done toolchain_echo "${var_name} : ${var_data}" } function toolchain_echo_var_yellow() { var_name_len_max=16; if [ -n "$2" ]; then var_name_len_max=$2; fi var_name=$1 var_data=$(eval echo \${${var_name}}) var_name_len=${#var_name} for((i=${var_name_len};i<${var_name_len_max};i++)); do var_name="${var_name} " done toolchain_echo "${var_name} : ${var_data}" } # ---------------------------------------------------------------------------------------------------- function find_aarch64-linux-gnu-gcc() { if [ -n "$FINDED_COMPILER" ]; then return fi if [ ! -n "$FINDED_COMPILER" ]; then FINDED_COMPILER=$(find -L ${SEARCH_PATH} -name aarch64-linux-gnu-g++ -type f) TOOLCHAIN_CMAKE="-DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_CXX_COMPILER=${FINDED_COMPILER}" fi if [ ! -n "$FINDED_COMPILER" ]; then FINDED_COMPILER=$(find -L ${SEARCH_PATH} -name aarch64-linux-gnu-gcc -type f) TOOLCHAIN_CMAKE="-DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=${FINDED_COMPILER}" fi if [ -n "$FINDED_COMPILER" ]; then TOOLCHAIN_PATH=${FINDED_COMPILER%/*/*} GCC_INCLUDE_PATH=${TOOLCHAIN_PATH}/aarch64-linux-gnu/include #GCC_VERSION=$(ls ${TOOLCHAIN_PATH}/lib/gcc/*-* | head -n 1) PATH=${TOOLCHAIN_PATH}/bin:$PATH PATH=${TOOLCHAIN_PATH}/sbin:$PATH PATH=${TOOLCHAIN_PATH}/bin/aarch64-linux-gnu:$PATH PATH=${TOOLCHAIN_PATH}/bin/aarch64-linux-gnu-uclibc:$PATH PATH=${TOOLCHAIN_PATH}/bin/aarch64-linux-gnu-musl:$PATH CCACHE_PATH=${TOOLCHAIN_PATH}/bin:${TOOLCHAIN_PATH}/bin/../aarch64-linux-gnu/bin:${TOOLCHAIN_PATH}/bin/aarch64-linux-gnu:${TOOLCHAIN_PATH}/bin/aarch64-linux-gnu-uclibc:${TOOLCHAIN_PATH}/bin/aarch64-linux-gnu-musl:$CCACHE_PATH export GCC_PATH=${TOOLCHAIN_PATH} export GCC_PREFIX="aarch64-linux-gnu-" C_INCLUDE_PATH=${GCC_INCLUDE_PATH}:${TOOLCHAIN_PATH}/aarch64-linux-gnu/libc/usr/include:${C_INCLUDE_PATH} CPLUS_INCLUDE_PATH=${GCC_INCLUDE_PATH}:${TOOLCHAIN_PATH}/aarch64-linux-gnu/libc/usr/include:${CPLUS_INCLUDE_PATH} LD_LIBRARY_PATH=${TOOLCHAIN_PATH}/aarch64-linux-gnu/libc/usr/lib:${LD_LIBRARY_PATH} export PATH fi return } function find_aarch64-qnx-gnu-gcc() { if [ -n "$FINDED_COMPILER" ]; then return fi if [ ! -n "$FINDED_COMPILER" ]; then FINDED_COMPILER=$(find -L ${SEARCH_PATH} -name ntoaarch64-g++) TOOLCHAIN_CMAKE="-DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_CXX_COMPILER=${FINDED_COMPILER}" fi if [ ! -n "$FINDED_COMPILER" ]; then FINDED_COMPILER=$(find -L ${SEARCH_PATH} -name ntoaarch64-gcc) TOOLCHAIN_CMAKE="-DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=${FINDED_COMPILER}" fi if [ -n "$FINDED_COMPILER" ]; then TOOLCHAIN_PATH=${FINDED_COMPILER%/*/*} GCC_INCLUDE_PATH=${TOOLCHAIN_PATH}/ntoaarch64/include #GCC_VERSION=$(ls ${TOOLCHAIN_PATH}/lib/gcc/*-* | head -n 1) PATH=${TOOLCHAIN_PATH}/bin:$PATH PATH=${TOOLCHAIN_PATH}/sbin:$PATH PATH=${TOOLCHAIN_PATH}/bin/ntoaarch64:$PATH PATH=${TOOLCHAIN_PATH}/bin/ntoaarch64-uclibc:$PATH PATH=${TOOLCHAIN_PATH}/bin/ntoaarch64-musl:$PATH CCACHE_PATH=${TOOLCHAIN_PATH}/bin:${TOOLCHAIN_PATH}/bin/../ntoaarch64/bin:${TOOLCHAIN_PATH}/bin/ntoaarch64:${TOOLCHAIN_PATH}/bin/ntoaarch64-uclibc:${TOOLCHAIN_PATH}/bin/ntoaarch64-musl:$CCACHE_PATH export GCC_PATH=${TOOLCHAIN_PATH} export GCC_PREFIX="ntoaarch64-" C_INCLUDE_PATH=${GCC_INCLUDE_PATH}:${TOOLCHAIN_PATH}/ntoaarch64/libc/usr/include:${C_INCLUDE_PATH} CPLUS_INCLUDE_PATH=${GCC_INCLUDE_PATH}:${TOOLCHAIN_PATH}/ntoaarch64/libc/usr/include:${CPLUS_INCLUDE_PATH} LD_LIBRARY_PATH=${TOOLCHAIN_PATH}/ntoaarch64/libc/usr/lib:${LD_LIBRARY_PATH} QNX_BASE=${TOOLCHAIN_PATH%/*/*/*/*} QNX_TARGET=$QNX_BASE/target/qnx7 QNX_HOST=$QNX_BASE/host/linux/x86_64 QNX_CONFIGURATION=$HOME/.qnx MAKEFLAGS=-I$QNX_BASE/target/qnx7/usr/include PATH=$QNX_HOST/usr/bin:$QNX_CONFIGURATION/bin:$QNX_BASE/jre/bin:$PATH export QNX_TARGET QNX_HOST QNX_CONFIGURATION MAKEFLAGS PATH unset PYTHONPATH toolchain_echo_var_yellow QNX_HOST toolchain_echo_var_yellow QNX_TARGET CXX_OPTIONS_0="-D__EXT" fi return } function toolchain_info() { toolchain_echo "-----------------: --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------"; toolchain_echo_var_yellow SCRIPT_NAME toolchain_echo_var_yellow SCRIPT_PATH toolchain_echo_var_yellow GCC_PATH toolchain_echo_var_yellow GCC_PREFIX toolchain_echo_var_yellow GCC_VERSION toolchain_echo_var_yellow GCC_TARGET toolchain_echo_var_yellow GCC_TARGET_TAG toolchain_echo_var_yellow GCC_INCLUDE_PATH toolchain_echo_var_yellow TOOLCHAIN_CMAKE toolchain_echo " :"; # toolchain_echo_var_yellow CC # toolchain_echo_var_yellow CXX # toolchain_echo_var_yellow CPP # toolchain_echo_var_yellow AS # toolchain_echo_var_yellow LD # toolchain_echo_var_yellow GDB # toolchain_echo_var_yellow STRIP # toolchain_echo_var_yellow RANLIB # toolchain_echo_var_yellow OBJCOPY # toolchain_echo_var_yellow OBJDUMP # toolchain_echo_var_yellow READELF # toolchain_echo_var_yellow AR # toolchain_echo_var_yellow NM toolchain_echo_var_yellow ADDR2LINE toolchain_echo_var_yellow AR toolchain_echo_var_yellow AS #toolchain_echo_var_yellow C++ toolchain_echo_var_yellow CXX_FILT toolchain_echo_var_yellow CPP toolchain_echo_var_yellow DWP toolchain_echo_var_yellow ELFEDIT toolchain_echo_var_yellow CXX toolchain_echo_var_yellow CC #toolchain_echo_var_yellow CC-8.3.0 toolchain_echo_var_yellow GCC_AR toolchain_echo_var_yellow GCC_NM toolchain_echo_var_yellow GCC_RANLIB toolchain_echo_var_yellow GCOV toolchain_echo_var_yellow GCOV_DUMP toolchain_echo_var_yellow GCOV_TOOL toolchain_echo_var_yellow GDB toolchain_echo_var_yellow GDB_ADD_INDEX toolchain_echo_var_yellow GFORTRAN toolchain_echo_var_yellow GPROF toolchain_echo_var_yellow LD toolchain_echo_var_yellow LD_BFD toolchain_echo_var_yellow LD_GOLD toolchain_echo_var_yellow NM toolchain_echo_var_yellow OBJCOPY toolchain_echo_var_yellow OBJDUMP toolchain_echo_var_yellow RANLIB toolchain_echo_var_yellow READELF toolchain_echo_var_yellow SIZE toolchain_echo_var_yellow STRINGS toolchain_echo_var_yellow STRIP toolchain_echo "-----------------: --------- --------- --------- --------- --------- --------- --------- --------- --------- ---------"; } if [ "$0" != "${BASH_SOURCE[0]}" ] ; then SEARCH_PATH=${SCRIPT_PATH%/*} unset FINDED_COMPILER unset TOOLCHAIN_CMAKE unset find_info unset CXX_OPTIONS_0 find_aarch64-linux-gnu-gcc find_aarch64-qnx-gnu-gcc if [ -n "$FINDED_COMPILER" ]; then export ADDR2LINE="${GCC_PREFIX}addr2line" export AR="${GCC_PREFIX}ar" export AS="${GCC_PREFIX}as" #export C++="${GCC_PREFIX}c++" export CXX_FILT="${GCC_PREFIX}c++filt" export CPP="${GCC_PREFIX}cpp" export DWP="${GCC_PREFIX}dwp" export ELFEDIT="${GCC_PREFIX}elfedit" export CXX="${GCC_PREFIX}g++" export CC="${GCC_PREFIX}gcc" #export CC-8.3.0="${GCC_PREFIX}gcc-8.3.0" export GCC_AR="${GCC_PREFIX}gcc-ar" export GCC_NM="${GCC_PREFIX}gcc-nm" export GCC_RANLIB="${GCC_PREFIX}gcc-ranlib" export GCOV="${GCC_PREFIX}gcov" export GCOV_DUMP="${GCC_PREFIX}gcov-dump" export GCOV_TOOL="${GCC_PREFIX}gcov-tool" export GDB="${GCC_PREFIX}gdb" export GDB_ADD_INDEX="${GCC_PREFIX}gdb-add-index" export GFORTRAN="${GCC_PREFIX}gfortran" export GPROF="${GCC_PREFIX}gprof" export LD="${GCC_PREFIX}ld" export LD_BFD="${GCC_PREFIX}ld.bfd" export LD_GOLD="${GCC_PREFIX}ld.gold" export NM="${GCC_PREFIX}nm" export OBJCOPY="${GCC_PREFIX}objcopy" export OBJDUMP="${GCC_PREFIX}objdump" export RANLIB="${GCC_PREFIX}ranlib" export READELF="${GCC_PREFIX}readelf" export SIZE="${GCC_PREFIX}size" export STRINGS="${GCC_PREFIX}strings" export STRIP="${GCC_PREFIX}strip" export CC="${GCC_PREFIX}gcc" export CXX="${GCC_PREFIX}g++" export CPP="${GCC_PREFIX}cpp" export AS="${GCC_PREFIX}as" export LD="${GCC_PREFIX}ld" export GDB="${GCC_PREFIX}gdb" export STRIP="${GCC_PREFIX}strip" export RANLIB="${GCC_PREFIX}ranlib" export OBJCOPY="${GCC_PREFIX}objcopy" export OBJDUMP="${GCC_PREFIX}objdump" export READELF="${GCC_PREFIX}readelf" export AR="${GCC_PREFIX}ar" export NM="${GCC_PREFIX}nm" gcc_target=$(${CC} -v 2>&1 | grep Target | cut -d " " -f 2 | sed 's/linux-gnu/linux/g' | sed 's/unknown-nto-qnx/qnx/g') gcc_version=$(${CC} -v 2>&1 | grep "gcc version" | cut -d " " -f 3) gcc_target_tag=${gcc_target}-${gcc_version} export GCC_TARGET=${gcc_target} export GCC_VERSION=${gcc_version} export GCC_TARGET_TAG=${gcc_target_tag} export CXX="${GCC_PREFIX}g++ ${CXX_OPTIONS_0}" toolchain_info else echo -e "\033[1;31m[ERROR](${SCRIPT_NAME}) Toolchain was not found.\033[0m"; fi fi # ---------------------------------------------------------------------------------------------------- SCRIPT_NAME=${SCRIPT_NAME_BAK};SCRIPT_PATH=${SCRIPT_PATH_BAK}