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
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

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18454 3c298f89-4303-0410-b956-a3cf2f4a3e73

--- a/target/toolchain/Makefile
+++ b/target/toolchain/Makefile
@@ -26,6 +26,8 @@
 
 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 @@
 	$(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

--- /dev/null
+++ b/target/toolchain/files/wrapper.sh
@@ -1,1 +1,92 @@
+#!/bin/bash
 
+# 2009 (C) Copyright Industrie Dial Face S.p.A.
+#          Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
+#
+# 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
+

--- a/toolchain/gcc/Makefile
+++ b/toolchain/gcc/Makefile
@@ -246,18 +246,12 @@
 	$(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; \
 		for app in $(REAL_GNU_TARGET_NAME)-* ; do \
 			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))

--- a/toolchain/gcc/files/wrapper.sh
+++ /dev/null
@@ -1,92 +1,1 @@
-#!/bin/bash
 
-# 2009 (C) Copyright Industrie Dial Face S.p.A.
-#          Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
-#
-# 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
-

comments