X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=scripts%2Fext-toolchain.sh;h=09390c5e0d51f5195f776507593a29a48d77c614;hp=a53e5dceae6ca3cdf5b707507b20f63b734f8ce4;hb=b9b681c0675067dece47f9067779526b55bcf058;hpb=796231d95c495c4b077235d36f956cd26074a89c diff --git a/scripts/ext-toolchain.sh b/scripts/ext-toolchain.sh index a53e5dceae..09390c5e0d 100755 --- a/scripts/ext-toolchain.sh +++ b/scripts/ext-toolchain.sh @@ -3,7 +3,7 @@ # Script for various external toolchain tasks, refer to # the --help output for more information. # -# Copyright (C) 2012 Jo-Philipp Wich +# Copyright (C) 2012 Jo-Philipp Wich # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -91,7 +91,7 @@ test_uclibc() { local sysroot="$("$CC" $CFLAGS -print-sysroot 2>/dev/null)" if [ -d "${sysroot:-$TOOLCHAIN}" ]; then local lib - for lib in "${sysroot:-$TOOLCHAIN}"/{lib,usr/lib,usr/local/lib}/ld-uClibc*.so*; do + for lib in "${sysroot:-$TOOLCHAIN}"/{lib,usr/lib,usr/local/lib}/ld*-uClibc*.so*; do if [ -f "$lib" ] && [ ! -h "$lib" ]; then return 0 fi @@ -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"'" ${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 @@ -205,28 +246,24 @@ wrap_bins() { for cmd in "${CC%-*}-"*; do if [ -x "$cmd" ]; then local out="$1/${cmd##*/}" + local bin="$cmd" + + if [ -x "$out" ] && ! grep -q STAGING_DIR "$out"; then + mv "$out" "$out.bin" + bin='$(dirname "$0")/'"${out##*/}"'.bin' + fi - echo '#!/bin/sh' > "$out" case "${cmd##*/}" in *-*cc|*-*cc-*|*-*++|*-*++-*|*-cpp) - echo -n 'exec "'"$cmd"'" '"$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 "'"$cmd"'" ${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 '$cmd' \"\$@\"" >> "$out" + wrap_bin_other "$out" "$bin" ;; esac - chmod +x "$out" fi done @@ -308,9 +345,9 @@ print_config() { fi if test_feature "locale"; then - echo "CONFIG_NLS=y" >> "$config" + echo "CONFIG_BUILD_NLS=y" >> "$config" else - echo "# CONFIG_NLS is not set" >> "$config" + echo "# CONFIG_BUILD_NLS is not set" >> "$config" fi echo "CONFIG_DEVEL=y" >> "$config" @@ -319,6 +356,10 @@ print_config() { echo "CONFIG_TOOLCHAIN_PREFIX=\"$prefix\"" >> "$config" echo "CONFIG_TARGET_NAME=\"$target\"" >> "$config" + if [ "$LIBC_TYPE" != glibc ]; then + echo "CONFIG_TOOLCHAIN_LIBC=\"$LIBC_TYPE\"" >> "$config" + fi + local lib for lib in C RT PTHREAD GCC STDCPP SSP GFORTRAN; do local file @@ -520,8 +561,7 @@ while [ -n "$1" ]; do echo -e " $me --toolchain {directory} --config {target}" >&2 echo -e " Analyze the given toolchain and print a suitable" >&2 echo -e " .config for the given target. Omit target " >&2 - echo -e " argument to get a list of names." >&2 - echo -e " suitable to prime .config with.\n" >&2 + echo -e " argument to get a list of names.\n" >&2 echo -e " $me --help" >&2 echo -e " Display this help text and exit.\n\n" >&2 echo -e " Most commands also take a --cflags parameter which " >&2