diff --git a/MakeTOOLCHAIN.sh b/MakeTOOLCHAIN.sh new file mode 100755 index 0000000..1c964ea --- /dev/null +++ b/MakeTOOLCHAIN.sh @@ -0,0 +1,141 @@ +#!/bin/bash +echo "====== Build Toolchain INSTALL Script ====" +SHWRKDIR=/tmp/XXXMakeTOOLCHAIN +##BUILD=`cat ../PSG/board/PSG/iot2000/BUILD` +BUILD=IOT2000 +UPDATE_BINARY=$SHWRKDIR/dest/toolchain.tar.Z +UPDATE_FILENAME="../Install-TOOLCHAIN-$BUILD.sh" +TOOLCHAIN_DIR="/opt/PSG" +UPDATE_IN_SCRIPT="MakeTOOLCHAIN.sh.in" + +rm -rf $SHWRKDIR +mkdir -p $SHWRKDIR/dest +mkdir -p $SHWRKDIR/Kernel-$BUILD +#==================================== +WRKDIR=`pwd` +CMDDIR=`pwd` +#=== Asssign GNU_TARGET_NAME from .config +_ARCH=`grep BR2_ARCH\= .config | awk -F\= -F\" '{print $2}'` +_TARGET_VENDOR=`grep BR2_TOOLCHAIN_BUILDROOT_VENDOR\= .config | awk -F\= -F\" '{print $2}'` + +# -- get target os +_BR2_BINFMT_FLAT=`grep BR2_BINFMT_FLAT\= .config | awk -F\= '{print $2}'` +if [ "$_BR2_BINFMT_FLAT" = "y" ]; then + _TARGET_OS="uclinux" + else + _TARGET_OS="linux" +fi + +# -- get libc +_BR2_TOOLCHAIN_USES_UCLIBC=`grep BR2_TOOLCHAIN_USES_UCLIBC\= .config | awk -F\= '{print $2}'` +_BR2_TOOLCHAIN_USES_MUSL=`grep BR2_TOOLCHAIN_USES_MUSL\= .config | awk -F\= '{print $2}'` + +if [ "$_BR2_TOOLCHAIN_USES_UCLIBC" = "y" ]; then + _LIBC="uclibc" + else + if [ "$_BR2_TOOLCHAIN_USES_MUSL" = "y" ]; then + _LIBC="musl" + else + _LIBC="gnu" + fi +fi + +# -- ABI +_BR2_arm=`grep BR2_arm\= .config | awk -F\= '{print $2}'` +_BR2_armeb=`grep BR2_armeb\= .config | awk -F\= '{print $2}'` +_BR2_ARM_EABIHF=`grep BR2_ARM_EABIHF\= .config | awk -F\= '{print $2}'` +if [ "$_BR2_arm" = "y" ] || [ "$_BR2_armeb" = "y" ]; then + if [ "$_LIBC" = "uclibc" ]; then + _ABI="gnueabi" + else + _ABI="eabi" + fi + if [ "$_BR2_ARM_EABIHF" = "y" ]; then + _ABI="${_ABI}hf" + fi +fi + +_GNU_TARGET_NAME="${_ARCH}-${_TARGET_VENDOR}-${_TARGET_OS}-${_LIBC}${_ABI}" +#=============================================================== +TOOLCHAIN=`grep BR2_HOST_DIR .config | awk -F\= -F\" '{print $2}'` +if [[ $TOOLCHAIN = *\$\(BASE_DIR\)* ]]; then + SYSROOT=`readlink -f $CMDDIR`/output/host/usr/bin/ +else + SYSROOT=$TOOLCHAIN/usr/bin +fi +CROSS_COMPILE="${_GNU_TARGET_NAME}-" +CROSS=${CROSS_COMPILE} +_KERNELDIR=`grep BR2_LINUX_KERNEL_VERSION\= .config | awk -F\= -F\" '{print $2}'` +KERNELDIR=${CMDDIR}/output/build/linux-${_KERNELDIR} +#==================================== +echo $TOOLCHAIN +echo "packing Toolchain ... pls be patient" +rsync -a $TOOLCHAIN $SHWRKDIR/ +echo "packing Kernel ... pls be patient" +rsync -a $KERNELDIR $SHWRKDIR/Kernel-$BUILD/ + +(\ +cat << EOF +#!/bin/sh + +export SYSROOT=$SYSROOT +export PATH=\$PATH:$SYSROOT +export KERNELDIR=$TOOLCHAIN_DIR/Kernel-$BUILD/linux-${_KERNELDIR} +export CROSS_COMPILE=${CROSS_COMPILE} +export CROSS=${CROSS_COMPILE} + +export ARCH=arm +export SYSROOTARM=`grep BR2_HOST_DIR .config | awk -F\= -F\" '{print $2}'`/usr/${_GNU_TARGET_NAME}/sysroot +export CC_FULLPATH="${SYSROOT}/${CROSS_COMPILE}" +export CC=${CROSS_COMPILE}gcc +export CXX=${CROSS_COMPILE}g++ + +if [ \$# -eq "0" ] +then +PROMPT_COMMAND='PS1="\[\033[0;31m\]CROSS CC:\[\033[0;32m\]\$PS1";unset PROMPT_COMMAND' bash ; reset +else +\$1 +fi + +EOF +) > $SHWRKDIR/CrossCompile-${BUILD}.sh + +chmod a+x $SHWRKDIR/CrossCompile-${BUILD}.sh + +echo "packing Binaries to Tarball ... pls be patient" +tar -C $SHWRKDIR --exclude=./dest -czf $SHWRKDIR/dest/toolchain.tar.Z ./ +echo "--------------------- DONE -----------------------" +# update script +(\ +cat << EOF +#!/bin/sh + +TOOLCHAIN_DIR=$TOOLCHAIN_DIR +TAR_PARAMETERS="-C \$TOOLCHAIN_DIR -xzvf -" + +untar_payload () +{ + match=\$(grep -a -n -m 1 '^PAYLOAD:$' \$0 | cut -d ':' -f 1) + payload_start=\$((match + 1)) + tail -n +\$payload_start \$0 | tar \$TAR_PARAMETERS +} + +## --- Kommandos zum Installieren + +#--- Toolchain-Tarball entpacken + +if [ ! -d \${TOOLCHAIN_DIR} ]; then + sudo mkdir -p \${TOOLCHAIN_DIR} +fi +sudo chown -Rv \$USER:\$USER \${TOOLCHAIN_DIR} + +untar_payload + +exit 0 +EOF +) > $UPDATE_FILENAME + +echo "PAYLOAD:" >> $UPDATE_FILENAME +cat $UPDATE_BINARY >> $UPDATE_FILENAME + +chmod a+x $UPDATE_FILENAME