[scripts] ext-toolchain.sh: rework generated gcc wrapper
authorJo-Philipp Wich <jow@openwrt.org>
Sun, 29 Jan 2012 18:53:12 +0000 (18:53 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sun, 29 Jan 2012 18:53:12 +0000 (18:53 +0000)
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

scripts/ext-toolchain.sh

index 23d14a7483b0abf2bf08cdda8879ce6f2fcde578..a34ef0677335cc9e5a3bd52e011444fff9754292 100755 (executable)
@@ -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
 wrap_bins() {
        if probe_cc; then
                mkdir -p "$1" || return 1
@@ -212,27 +253,17 @@ wrap_bins() {
                                        bin='$(dirname "$0")/'"${out##*/}"'.bin'
                                fi
 
                                        bin='$(dirname "$0")/'"${out##*/}"'.bin'
                                fi
 
-                               echo '#!/bin/sh' > "$out"
                                case "${cmd##*/}" in
                                        *-*cc|*-*cc-*|*-*++|*-*++-*|*-cpp)
                                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)
                                        ;;
                                        *-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
                                        ;;
                                esac
-                               chmod +x "$out"
                        fi
                done
 
                        fi
                done