diff --git a/CrossCompile.sh b/CrossCompile.sh index cb6c0ae..a94e25a 100755 --- a/CrossCompile.sh +++ b/CrossCompile.sh @@ -6,6 +6,50 @@ WRKDIR=`pwd` CMDDIR=`dirname $0` cd $CMDDIR +#=== 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}'` echo $TOOLCHAIN @@ -17,12 +61,14 @@ fi export PATH=$PATH:$SYSROOT -export CROSS_COMPILE=arm-buildroot-linux-gnueabihf- +export CROSS_COMPILE="${_GNU_TARGET_NAME}-" export CROSS=${CROSS_COMPILE} + export ARCH=arm -export KERNELDIR=`pwd`/output/build/linux-7f280334068b7c875ade51f8f3921ab311f0c824 +_KERNELDIR=`grep BR2_LINUX_KERNEL_VERSION\= .config | awk -F\= -F\" '{print $2}'` +export KERNELDIR=${CMDDIR}/output/build/linux-${_KERNELDIR} export BB_KERNEL_SOURCES=$KERNELDIR -export SYSROOTARM=`grep BR2_HOST_DIR .config | awk -F\= -F\" '{print $2}'`/usr/arm-buildroot-linux-gnueabihf/sysroot +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++ diff --git a/MakeSDKInstall.sh b/MakeSDKInstall.sh new file mode 100755 index 0000000..ae7156f --- /dev/null +++ b/MakeSDKInstall.sh @@ -0,0 +1,119 @@ +#!/bin/bash + +#=== 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_DIR=`grep BR2_HOST_DIR .config | awk -F\= -F\" '{print $2}'` +_SDK_TARBALL_NAME="./output/images/${_GNU_TARGET_NAME}_sdk-buildroot.tar.gz" +_TOOLCHAIN_BASE_DIR=`echo ${_TOOLCHAIN_DIR} | awk -F"/" '{ for (i=1; i<= (NF-1); i++) printf "%s/",$i }'` +#============================ +BUILD=`cat ../GfA/board/GfA/Display001/BUILD` +UPDATE_BINARY=${_SDK_TARBALL_NAME} +UPDATE_FILENAME="../InstallSDK_$BUILD.sh" +UPDATE_IN_SCRIPT="InstallSDK.sh.in" + +if [[ ! -f $UPDATE_BINARY ]]; then + echo " UPDATE_BINARY $UPDATE_BINARY doesn't exist!" + exit 1 +fi +#== Build UPDATE_IN_SCRIPT +(\ +cat << EOF +#!/bin/bash + +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 +} + +if [ "\$USER" != "root" ]; then + echo "please run as root:" + echo -e "\t sudo \$0" + exit -1 +fi + +_TOOLCHAIN_DIR="$_TOOLCHAIN_DIR" +_GNU_TARGET_NAME="$_GNU_TARGET_NAME" +_SDK_DIR_NAME="${_GNU_TARGET_NAME}_sdk-buildroot" +_TOOLCHAIN_BASE_DIR="$_TOOLCHAIN_BASE_DIR" + +_TOOLCHAIN_PATH_ORIG="\${_TOOLCHAIN_BASE_DIR}\${_SDK_DIR_NAME}" + +if [ -d "\${_TOOLCHAIN_PATH_ORIG}" ]; then + rm -rf \${_TOOLCHAIN_PATH_ORIG} +fi + +echo "Unpacking Tarball" +mkdir -p \${_TOOLCHAIN_BASE_DIR} +TAR_PARAMETERS="-C \${_TOOLCHAIN_BASE_DIR} --checkpoint=.1000 -xzf -" +#---- untar payload +untar_payload +#------------------- +if [ -d "\${_TOOLCHAIN_DIR}" ]; then + rm -rf \${_TOOLCHAIN_DIR} +fi + +mv \${_TOOLCHAIN_PATH_ORIG} \${_TOOLCHAIN_DIR} +echo "" +echo "chown -R \$SUDO_USER:\$SUDO_USER \${_TOOLCHAIN_DIR} ...." +chown -R \$SUDO_USER:\$SUDO_USER \${_TOOLCHAIN_DIR} + +echo -e "\n\nToolchain \${_TOOLCHAIN_DIR} installed !!!\n" + +exit 0 +EOF +) > $UPDATE_IN_SCRIPT + + + +# Append binary data. +cat $UPDATE_IN_SCRIPT > $UPDATE_FILENAME +echo "PAYLOAD:" >> $UPDATE_FILENAME +cat $UPDATE_BINARY >> $UPDATE_FILENAME + +rm $UPDATE_IN_SCRIPT + +chmod a+x $UPDATE_FILENAME