aboutsummaryrefslogtreecommitdiffstats
path: root/target/toolchain/files
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2009-11-19 17:23:31 +0000
committerFelix Fietkau <nbd@openwrt.org>2009-11-19 17:23:31 +0000
commit60a4353fdd5bb91d209a6fe970c70361b15a0ea5 (patch)
tree7a9124f7292dfcb53aa68c89a6831aec3f49ea22 /target/toolchain/files
parent1f88eb26acc9cacae5467e48f53caf88fc7d2507 (diff)
downloadupstream-60a4353fdd5bb91d209a6fe970c70361b15a0ea5.tar.gz
upstream-60a4353fdd5bb91d209a6fe970c70361b15a0ea5.tar.bz2
upstream-60a4353fdd5bb91d209a6fe970c70361b15a0ea5.zip
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
Diffstat (limited to 'target/toolchain/files')
-rwxr-xr-xtarget/toolchain/files/wrapper.sh91
1 files changed, 91 insertions, 0 deletions
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 <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