aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2012-01-29 18:53:12 +0000
committerJo-Philipp Wich <jow@openwrt.org>2012-01-29 18:53:12 +0000
commitc21b5cc34ab2b8f28b914ed9318b4f6f046a5b7b (patch)
tree62994113a33f0c5aa34c619f9f3ae741a9955821
parentd5cf09642c9ecb23029627707ff908d2fce70eea (diff)
downloadupstream-c21b5cc34ab2b8f28b914ed9318b4f6f046a5b7b.tar.gz
upstream-c21b5cc34ab2b8f28b914ed9318b4f6f046a5b7b.tar.bz2
upstream-c21b5cc34ab2b8f28b914ed9318b4f6f046a5b7b.zip
ext-toolchain.sh: rework generated gcc wrapper Only append -L and -Wl,-rpath-link flags if the command line contains -l, -L, -shared or -static flags; this is needed to suppress "-rpath-link: linker input file unused because linking not done" on each cc invocation.
SVN-Revision: 29946
-rwxr-xr-xscripts/ext-toolchain.sh57
1 files changed, 44 insertions, 13 deletions
diff --git a/scripts/ext-toolchain.sh b/scripts/ext-toolchain.sh
index 23d14a7483..a34ef06773 100755
--- a/scripts/ext-toolchain.sh
+++ b/scripts/ext-toolchain.sh
@@ -197,6 +197,47 @@ find_bins() {
}
+wrap_bin_cc() {
+ local out="$1"
+ local bin="$2"
+
+ echo '#!/bin/sh' > "$out"
+ echo 'for arg in "$@"; do' >> "$out"
+ echo ' case "$arg" in -l*|-L*|-shared|-static)' >> "$out"
+ echo -n ' exec "'"$bin"'" '"$CFLAGS"' ${STAGING_DIR:+' >> "$out"
+ echo -n '-idirafter "$STAGING_DIR/usr/include" ' >> "$out"
+ echo -n '-L "$STAGING_DIR/usr/lib" ' >> "$out"
+ echo '-Wl,-rpath-link,"$STAGING_DIR/usr/lib"} "$@" ;;' >> "$out"
+ echo ' esac' >> "$out"
+ echo 'done' >> "$out"
+ echo -n 'exec "'"$bin"'" '"$CFLAGS"' ${STAGING_DIR:+' >> "$out"
+ echo '-idirafter "$STAGING_DIR/usr/include"} "$@"' >> "$out"
+
+ chmod +x "$out"
+}
+
+wrap_bin_ld() {
+ local out="$1"
+ local bin="$2"
+
+ echo '#!/bin/sh' > "$out"
+ echo -n 'exec "'"$bin"'" '"$CFLAGS"' ${STAGING_DIR:+' >> "$out"
+ echo -n '-L "$STAGING_DIR/usr/lib" ' >> "$out"
+ echo '-rpath-link "$STAGING_DIR/usr/lib"} "$@"' >> "$out"
+
+ chmod +x "$out"
+}
+
+wrap_bin_other() {
+ local out="$1"
+ local bin="$2"
+
+ echo '#!/bin/sh' > "$out"
+ echo 'exec "'"$bin"'" "$@"' >> "$out"
+
+ chmod +x "$out"
+}
+
wrap_bins() {
if probe_cc; then
mkdir -p "$1" || return 1
@@ -212,27 +253,17 @@ wrap_bins() {
bin='$(dirname "$0")/'"${out##*/}"'.bin'
fi
- echo '#!/bin/sh' > "$out"
case "${cmd##*/}" in
*-*cc|*-*cc-*|*-*++|*-*++-*|*-cpp)
- echo -n 'exec "'"$bin"'" '"$CFLAGS"' ' >> "$out"
- echo -n '${STAGING_DIR:+-idirafter ' >> "$out"
- echo -n '"$STAGING_DIR/usr/include" ' >> "$out"
- echo -n '-L "$STAGING_DIR/usr/lib" ' >> "$out"
- echo -n '-Wl,-rpath-link,' >> "$out"
- echo '"$STAGING_DIR/usr/lib"} "$@"' >> "$out"
+ wrap_bin_cc "$out" "$bin"
;;
*-ld)
- echo -n 'exec "'"$bin"'" ${STAGING_DIR:+' >> "$out"
- echo -n '-L "$STAGING_DIR/usr/lib" ' >> "$out"
- echo -n '-rpath-link ' >> "$out"
- echo '"$STAGING_DIR/usr/lib"} "$@"' >> "$out"
+ wrap_bin_ld "$out" "$bin"
;;
*)
- echo 'exec "'"$bin"'" "$@"' >> "$out"
+ wrap_bin_other "$out" "$bin"
;;
esac
- chmod +x "$out"
fi
done