From: Jo-Philipp Wich Date: Sun, 29 Jan 2012 18:53:12 +0000 (+0000) Subject: [scripts] ext-toolchain.sh: rework generated gcc wrapper X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=commitdiff_plain;h=44a382aa440e44db7f17631a5e10c31afa11f111 [scripts] 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 --- 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