From: Felix Fietkau Date: Thu, 19 Nov 2009 17:23:31 +0000 (+0000) Subject: do not use the wrapper scripts for exportable toolchains internally. on some systems... X-Git-Tag: reboot~21854 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=60a4353fdd5bb91d209a6fe970c70361b15a0ea5;p=openwrt%2Fstaging%2Flynxis.git do not use the wrapper scripts for exportable toolchains internally. on some systems the wrapper scripts are broken, and their use should be opt-in SVN-Revision: 18454 --- diff --git a/target/toolchain/Makefile b/target/toolchain/Makefile index e9b452ec7f..fa9405f6cc 100644 --- a/target/toolchain/Makefile +++ b/target/toolchain/Makefile @@ -26,6 +26,8 @@ EXCLUDE_DIRS:=*/ccache \ all: compile +TOOLCHAIN_PREFIX:=$(TOOLCHAIN_BUILD_DIR)/toolchain-$(ARCH)_gcc-$(GCCV)_$(LIBC)-$(LIBCV) + $(BIN_DIR)/$(TOOLCHAIN_NAME).tar.bz2: clean mkdir -p $(TOOLCHAIN_BUILD_DIR) $(TAR) -cf - -C $(TOPDIR)/staging_dir/ \ @@ -36,6 +38,14 @@ $(BIN_DIR)/$(TOOLCHAIN_NAME).tar.bz2: clean $(CP) $(TOPDIR)/LICENSE ./files/README.TOOLCHAIN \ $(TOOLCHAIN_BUILD_DIR)/ + $(CP) ./files/wrapper.sh $(TOOLCHAIN_PREFIX)/usr/bin/$(REAL_GNU_TARGET_NAME)-wrapper.sh + chmod +x $(TOOLCHAIN_PREFIX)/usr/bin/$(REAL_GNU_TARGET_NAME)-wrapper.sh + (cd $(TOOLCHAIN_PREFIX)/usr/bin; \ + for app in cc gcc g++ c++ cpp ld as ; do \ + [ -f $(REAL_GNU_TARGET_NAME)-$${app} ] && mv $(REAL_GNU_TARGET_NAME)-$${app} $(REAL_GNU_TARGET_NAME)-$${app}.bin ; \ + ln -sf $(REAL_GNU_TARGET_NAME)-wrapper.sh $(REAL_GNU_TARGET_NAME)-$${app} ; \ + done; \ + ) echo REVISION:="$(REVISION)" > $(TOOLCHAIN_BUILD_DIR)/version.mk find $(TOOLCHAIN_BUILD_DIR) -name .git | $(XARGS) rm -rf find $(TOOLCHAIN_BUILD_DIR) -name .svn | $(XARGS) rm -rf diff --git a/target/toolchain/files/wrapper.sh b/target/toolchain/files/wrapper.sh new file mode 100755 index 0000000000..19e1863c27 --- /dev/null +++ b/target/toolchain/files/wrapper.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +# 2009 (C) Copyright Industrie Dial Face S.p.A. +# Luigi 'Comio' Mantellini +# +# Based on original idea from WindRiver +# +# Toolchain wrapper script. +# +# This script allows us to use a small number of GCC / binutils cross-tools +# (one toolchain per instruction set architecture) to implement a larger +# number of processor- or board-specific tools. The wrapper script is +# configured at install time with information covering basic CFLAGS, +# LD options and the toolchain triplet name. +# + +PROGNAME=$0 +REALNAME=`readlink -f $0` + +REALNAME_BASE=`basename $REALNAME` +REALNAME_DIR=`dirname $REALNAME` + +TARGET_FUNDAMENTAL_ASFLAGS='' +TARGET_FUNDAMENTAL_CFLAGS='' +TARGET_ROOTFS_CFLAGS='' +TARGET_FUNDAMENTAL_LDFLAGS='' +TARGET_TOOLCHAIN_TRIPLET=${REALNAME_BASE%-*} + +# Parse our tool name, splitting it at '-' characters. +BINARY=${PROGNAME##*-} + +# Parse our tool name, splitting it at '-' characters. +IFS=- read TOOLCHAIN_ARCH TOOLCHAIN_BUILDROOT TOOLCHAIN_OS TOOLCHAIN_PLATFORM PROGNAME << EOF +$REALNAME_BASE +EOF + +# +# We add the directory this was executed from to the PATH +# The toolchains (links) should be in this directory or in the users +# PATH. +# +TOOLCHAIN_BIN_DIR="$REALNAME_DIR/" + +# Set the PATH so that our run-time location is first +# (get_feature is run from the path, so this has to be set) +export PATH="$TOOLCHAIN_BIN_DIR":$PATH +export GCC_HONOUR_COPTS + +TOOLCHAIN_SYSROOT="$TOOLCHAIN_BIN_DIR/../.." +if [ ! -d "$TOOLCHAIN_SYSROOT" ]; then + echo "Error: Unable to determine sysroot (looking for $TOOLCHAIN_SYSROOT)!" >&2 + exit 1 +fi + +# -Wl,--dynamic-linker=$TOOLCHAIN_SYSROOT/lib/ld-uClibc.so.0 +# --dynamic-linker=$TOOLCHAIN_SYSROOT/lib/ld-uClibc.so.0 + +case $TOOLCHAIN_PLATFORM in + gnu|glibc|eglibc) + GCC_SYSROOT_FLAGS="--sysroot=$TOOLCHAIN_SYSROOT -Wl,-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib" + LD_SYSROOT_FLAGS="-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib" + ;; + uclibc) + GCC_SYSROOT_FLAGS="--sysroot=$TOOLCHAIN_SYSROOT -Wl,-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib" + LD_SYSROOT_FLAGS="-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib" + ;; + *) + GCC_SYSROOT_FLAGS="" + LD_SYSROOT_FLAGS="" + ;; +esac + +# +# Run the cross-tool. +# +case $BINARY in + cc|gcc|g++|c++|cpp) + exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin $GCC_SYSROOT_FLAGS $TARGET_FUNDAMENTAL_CFLAGS $TARGET_ROOTFS_CFLAGS "$@" + ;; + ld) + exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin $LD_SYSROOT_FLAGS $TARGET_FUNDAMENTAL_LDFLAGS "$@" + ;; + as) + exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin $TARGET_FUNDAMENTAL_ASFLAGS "$@" + ;; + *) + exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin "$@" + ;; +esac + +exit 0 diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile index 955248e81d..ea103c4539 100644 --- a/toolchain/gcc/Makefile +++ b/toolchain/gcc/Makefile @@ -246,8 +246,6 @@ define Stage2/Install $(GCC_MAKE) -C $(HOST_BUILD_DIR2) install # Set up the symlinks to enable lying about target name. set -e; \ - $(CP) ./files/wrapper.sh $(TOOLCHAIN_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-wrapper.sh - chmod +x $(TOOLCHAIN_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-wrapper.sh (cd $(TOOLCHAIN_DIR)/usr; \ ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \ cd bin; \ @@ -255,10 +253,6 @@ define Stage2/Install ln -sf $$$${app} \ $(GNU_TARGET_NAME)$$$${app##$(REAL_GNU_TARGET_NAME)}; \ done; \ - for app in cc gcc g++ c++ cpp ld as ; do \ - [ -f $(REAL_GNU_TARGET_NAME)-$$$${app} ] && mv $(REAL_GNU_TARGET_NAME)-$$$${app} $(REAL_GNU_TARGET_NAME)-$$$${app}.bin ; \ - ln -sf $(REAL_GNU_TARGET_NAME)-wrapper.sh $(REAL_GNU_TARGET_NAME)-$$$${app} ; \ - done; \ ); $(if $(CONFIG_EXTRA_TARGET_ARCH),$(call SetupExtraArch)) endef diff --git a/toolchain/gcc/files/wrapper.sh b/toolchain/gcc/files/wrapper.sh deleted file mode 100755 index 19e1863c27..0000000000 --- a/toolchain/gcc/files/wrapper.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/bash - -# 2009 (C) Copyright Industrie Dial Face S.p.A. -# Luigi 'Comio' Mantellini -# -# Based on original idea from WindRiver -# -# Toolchain wrapper script. -# -# This script allows us to use a small number of GCC / binutils cross-tools -# (one toolchain per instruction set architecture) to implement a larger -# number of processor- or board-specific tools. The wrapper script is -# configured at install time with information covering basic CFLAGS, -# LD options and the toolchain triplet name. -# - -PROGNAME=$0 -REALNAME=`readlink -f $0` - -REALNAME_BASE=`basename $REALNAME` -REALNAME_DIR=`dirname $REALNAME` - -TARGET_FUNDAMENTAL_ASFLAGS='' -TARGET_FUNDAMENTAL_CFLAGS='' -TARGET_ROOTFS_CFLAGS='' -TARGET_FUNDAMENTAL_LDFLAGS='' -TARGET_TOOLCHAIN_TRIPLET=${REALNAME_BASE%-*} - -# Parse our tool name, splitting it at '-' characters. -BINARY=${PROGNAME##*-} - -# Parse our tool name, splitting it at '-' characters. -IFS=- read TOOLCHAIN_ARCH TOOLCHAIN_BUILDROOT TOOLCHAIN_OS TOOLCHAIN_PLATFORM PROGNAME << EOF -$REALNAME_BASE -EOF - -# -# We add the directory this was executed from to the PATH -# The toolchains (links) should be in this directory or in the users -# PATH. -# -TOOLCHAIN_BIN_DIR="$REALNAME_DIR/" - -# Set the PATH so that our run-time location is first -# (get_feature is run from the path, so this has to be set) -export PATH="$TOOLCHAIN_BIN_DIR":$PATH -export GCC_HONOUR_COPTS - -TOOLCHAIN_SYSROOT="$TOOLCHAIN_BIN_DIR/../.." -if [ ! -d "$TOOLCHAIN_SYSROOT" ]; then - echo "Error: Unable to determine sysroot (looking for $TOOLCHAIN_SYSROOT)!" >&2 - exit 1 -fi - -# -Wl,--dynamic-linker=$TOOLCHAIN_SYSROOT/lib/ld-uClibc.so.0 -# --dynamic-linker=$TOOLCHAIN_SYSROOT/lib/ld-uClibc.so.0 - -case $TOOLCHAIN_PLATFORM in - gnu|glibc|eglibc) - GCC_SYSROOT_FLAGS="--sysroot=$TOOLCHAIN_SYSROOT -Wl,-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib" - LD_SYSROOT_FLAGS="-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib" - ;; - uclibc) - GCC_SYSROOT_FLAGS="--sysroot=$TOOLCHAIN_SYSROOT -Wl,-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib" - LD_SYSROOT_FLAGS="-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib" - ;; - *) - GCC_SYSROOT_FLAGS="" - LD_SYSROOT_FLAGS="" - ;; -esac - -# -# Run the cross-tool. -# -case $BINARY in - cc|gcc|g++|c++|cpp) - exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin $GCC_SYSROOT_FLAGS $TARGET_FUNDAMENTAL_CFLAGS $TARGET_ROOTFS_CFLAGS "$@" - ;; - ld) - exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin $LD_SYSROOT_FLAGS $TARGET_FUNDAMENTAL_LDFLAGS "$@" - ;; - as) - exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin $TARGET_FUNDAMENTAL_ASFLAGS "$@" - ;; - *) - exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin "$@" - ;; -esac - -exit 0