summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDmitry Pankratov <dp@ubiquitech.com>2016-06-18 14:02:15 (GMT)
committerDmitry Pankratov <dp@ubiquitech.com>2016-06-18 14:02:15 (GMT)
commit91b8280e8c9458e81fc94d1f9983f2a642ebb7a8 (patch)
tree9279482c6f4e8a28420c2f1adf19dcb084dc9f04 /scripts
parentf6d8dc44111c6e96706eed8b0ae0483e2fb63856 (diff)
parent6e7c61650a39a67ee02ed58c11d64c94c436bb33 (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/addToolVersion.sh8
-rw-r--r--scripts/build/arch/alpha.sh11
-rw-r--r--scripts/build/arch/arm.sh11
-rw-r--r--scripts/build/arch/m68k.sh11
-rw-r--r--scripts/build/arch/microblaze.sh11
-rw-r--r--scripts/build/arch/mips.sh11
-rw-r--r--scripts/build/arch/powerpc.sh41
-rw-r--r--scripts/build/arch/s390.sh27
-rw-r--r--scripts/build/arch/sh.sh11
-rw-r--r--scripts/build/arch/sparc.sh24
-rw-r--r--scripts/build/arch/x86.sh47
-rw-r--r--scripts/build/cc/100-gcc.sh21
-rw-r--r--scripts/build/debug/300-gdb.sh34
-rw-r--r--scripts/build/libc/glibc.sh43
-rw-r--r--scripts/crosstool-NG.sh.in2
-rw-r--r--scripts/functions19
16 files changed, 311 insertions, 21 deletions
diff --git a/scripts/addToolVersion.sh b/scripts/addToolVersion.sh
index 3cbf712..806ecca 100755
--- a/scripts/addToolVersion.sh
+++ b/scripts/addToolVersion.sh
@@ -44,7 +44,7 @@ doHelp() {
add experimental obsolete version 2.3.5 and stable current versions 2.6.1
and 2.6.2 to glibc, add stable obsolete version 3.3.3 to gcc:
${myname} --glibc -x -o 2.3.5 -s -c 2.6.1 2.6.2 --gcc -o 3.3.3
- EOF
+EOF
}
# Extract field $3 from version $1 with separator $2
@@ -61,7 +61,7 @@ getVersionField() {
# $tool : tool name
# $tool_prefix : tool directory prefix
# $EXP : set to non empty if experimental, to empty otherwise
-# #OBS : set to non empty if obsolete, to empty otherwise
+# OBS : set to non empty if obsolete, to empty otherwise
# $1 : version string to add
addToolVersion() {
local version="$1"
@@ -124,7 +124,7 @@ addToolVersion() {
ver_p=$(getVersionField "${version}" . 3)
if [ ${ver_M} -eq 2 -a ${ver_m} -eq 26 ]; then
SedExpr1="${SedExpr1}\n select BINUTILS_2_26_or_later"
- if [ ${ver_M} -eq 2 -a ${ver_m} -eq 25 -a ${ver_p} -eq 1 ]; then
+ elif [ ${ver_M} -eq 2 -a ${ver_m} -eq 25 -a ${ver_p} -eq 1 ]; then
SedExpr1="${SedExpr1}\n select BINUTILS_2_25_1_or_later"
elif [ ${ver_M} -eq 2 -a ${ver_m} -eq 25 -a -z ${ver_p} ]; then
SedExpr1="${SedExpr1}\n select BINUTILS_2_25_or_later"
@@ -139,7 +139,7 @@ addToolVersion() {
ver_M=$(getVersionField "${version}" . 1)
ver_m=$(getVersionField "${version}" . 2)
ver_p=$(getVersionField "${version}" . 3)
- elif [ ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -eq 33 ]; then
+ if [ ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -eq 33 ]; then
SedExpr1="${SedExpr1}\n select LIBC_UCLIBC_0_9_33_2_or_later"
fi
;;
diff --git a/scripts/build/arch/alpha.sh b/scripts/build/arch/alpha.sh
index cf6d40d..ffceae3 100644
--- a/scripts/build/arch/alpha.sh
+++ b/scripts/build/arch/alpha.sh
@@ -4,3 +4,14 @@ CT_DoArchTupleValues () {
# The architecture part of the tuple:
CT_TARGET_ARCH="${CT_ARCH}${CT_ARCH_SUFFIX:-${CT_ARCH_ALPHA_VARIANT}}"
}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ echo "${target}"
+}
diff --git a/scripts/build/arch/arm.sh b/scripts/build/arch/arm.sh
index 5f6ce2f..338392c 100644
--- a/scripts/build/arch/arm.sh
+++ b/scripts/build/arch/arm.sh
@@ -39,3 +39,14 @@ CT_DoArchTupleValues() {
CT_TARGET_SYS="${CT_TARGET_SYS}hf"
fi
}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ echo "${target}"
+}
diff --git a/scripts/build/arch/m68k.sh b/scripts/build/arch/m68k.sh
index bf26d1b..a6eb010 100644
--- a/scripts/build/arch/m68k.sh
+++ b/scripts/build/arch/m68k.sh
@@ -3,3 +3,14 @@
CT_DoArchTupleValues() {
:
}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ echo "${target}"
+}
diff --git a/scripts/build/arch/microblaze.sh b/scripts/build/arch/microblaze.sh
index 456a6e3..93ecc9a 100644
--- a/scripts/build/arch/microblaze.sh
+++ b/scripts/build/arch/microblaze.sh
@@ -19,3 +19,14 @@ CT_DoArchTupleValues () {
esac
}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ echo "${target}"
+}
diff --git a/scripts/build/arch/mips.sh b/scripts/build/arch/mips.sh
index 4d732be..68ad4fa 100644
--- a/scripts/build/arch/mips.sh
+++ b/scripts/build/arch/mips.sh
@@ -14,3 +14,14 @@ CT_DoArchTupleValues() {
CT_ARCH_ABI_CFLAG="-mabi=${CT_ARCH_mips_ABI}"
CT_ARCH_WITH_ABI="--with-abi=${CT_ARCH_mips_ABI}"
}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ echo "${target}"
+}
diff --git a/scripts/build/arch/powerpc.sh b/scripts/build/arch/powerpc.sh
index fbc3120..77bbc8a 100644
--- a/scripts/build/arch/powerpc.sh
+++ b/scripts/build/arch/powerpc.sh
@@ -26,3 +26,44 @@ CT_DoArchTupleValues () {
CT_ARCH_CC_EXTRA_CONFIG="--enable-e500_double"
fi
}
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ local m32=false
+ local m64=false
+ local mlittle=false
+ local mbig=false
+
+ for m in "${multi_flags[@]}"; do
+ case "$m" in
+ -m32) m32=true ;;
+ -m64) m64=true ;;
+ -mbig) mbig=true ;;
+ -mlittle) mlittle=true ;;
+ esac
+ done
+
+ # Fix up bitness
+ case "${target}" in
+ powerpc-*) $m64 && target=${target/#powerpc-/powerpc64-} ;;
+ powerpcle-*) $m64 && target=${target/#powerpcle-/powerpc64le-} ;;
+ powerpc64-*) $m32 && target=${target/#powerpc64-/powerpc-} ;;
+ powerpc64le-*) $m32 && target=${target/#powerpc64le-/powerpcle-} ;;
+ esac
+
+ # Fix up endianness
+ case "${target}" in
+ powerpc-*) $mlittle && target=${target/#powerpc-/powerpcle-} ;;
+ powerpcle-*) $mbig && target=${target/#powerpcle-/powerpc-} ;;
+ powerpc64-*) $mlittle && target=${target/#powerpc64-/powerpc64le-} ;;
+ powerpc64le-*) $mbig && target=${target/#powerpc64le-/powerpc64-} ;;
+ esac
+
+ # return the target
+ echo "${target}"
+}
diff --git a/scripts/build/arch/s390.sh b/scripts/build/arch/s390.sh
index b4b8078..e303420 100644
--- a/scripts/build/arch/s390.sh
+++ b/scripts/build/arch/s390.sh
@@ -6,3 +6,30 @@ CT_DoArchTupleValues() {
CT_TARGET_ARCH="s390x${CT_ARCH_SUFFIX}"
fi
}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ local m31=false
+ local m64=false
+
+ for m in "${multi_flags[@]}"; do
+ case "${multi_flags}" in
+ -m64) m64=true ;;
+ -m31) m31=true ;;
+ esac
+ done
+
+ # Fix bitness
+ case "${target}" in
+ s390-*) $m64 && target=${target/#s390-/s390x-} ;;
+ s390x-*) $m31 && target=${target/#s390x-/s390-} ;;
+ esac
+
+ echo "${target}"
+}
diff --git a/scripts/build/arch/sh.sh b/scripts/build/arch/sh.sh
index 7780e40..e7f4f1a 100644
--- a/scripts/build/arch/sh.sh
+++ b/scripts/build/arch/sh.sh
@@ -35,3 +35,14 @@ CT_DoArchTupleValues () {
esac
CT_ARCH_FLOAT_CFLAG=
}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ echo "${target}"
+}
diff --git a/scripts/build/arch/sparc.sh b/scripts/build/arch/sparc.sh
index e3e7491..2d3baa3 100644
--- a/scripts/build/arch/sparc.sh
+++ b/scripts/build/arch/sparc.sh
@@ -2,4 +2,28 @@
CT_DoArchTupleValues() {
# That's the only thing to override
CT_TARGET_ARCH="sparc${target_bits_64}${CT_ARCH_SUFFIX}"
+
+ # By default, sparc64-*-linux is configured with -mcpu=v9. However,
+ # according to https://sourceware.org/ml/libc-alpha/2005-12/msg00027.html,
+ # "There is no Linux sparc64 port that runs on non-UltraSPARC-I+ ISA CPUs."
+ # There is a patch that would change the default to -mcpu=ultrasparc for
+ # sparc64-*-linux configuration: https://patchwork.ozlabs.org/patch/409424/
+ # but that patch has not been integrated (yet). One concern raised about
+ # this patch was that -mcpu=ultrasparc can suboptimally schedule instructions
+ # for newer SPARC CPUs. So, override to -mcpu=ultrasparc and warn the user.
+ if [ "${CT_KERNEL}" = "linux" -a "${CT_ARCH_64}" = "y" -a -z "${CT_ARCH_CPU}" ]; then
+ CT_DoLog WARN "Setting CPU to UltraSPARC-I for sparc64-linux. Set CT_ARCH_CPU if a different CPU is desired."
+ CT_ARCH_WITH_CPU="--with-cpu=ultrasparc"
+ fi
+}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ echo "${target}"
}
diff --git a/scripts/build/arch/x86.sh b/scripts/build/arch/x86.sh
index 69407db..ca0f08b 100644
--- a/scripts/build/arch/x86.sh
+++ b/scripts/build/arch/x86.sh
@@ -20,4 +20,51 @@ CT_DoArchTupleValues() {
esac
fi
CT_TARGET_ARCH="${CT_TARGET_ARCH}${CT_ARCH_SUFFIX}"
+
+ # Shouldn't be possible to specify this (CT_TARGET_SYS is not specified by the user,
+ # it is computed by scripts/functions from libc choices). But trap if such invalid
+ # values ever come from the caller:
+ case "${CT_TARGET_ARCH}-${CT_TARGET_SYS}" in
+ i[34567]86-gnux32)
+ CT_DoLog ERROR "Invalid CT_TARGET: i[34567]86-<vendor>-<os>-gnux32 is invalid."
+ CT_DoLog ERROR "CT_TARGET: ${CT_TARGET}"
+ CT_Abort "Go read: https://wiki.debian.org/Multiarch/Tuples"
+ ;;
+ esac
+}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ local bit32=false
+ local bit64=false
+ local abi_dflt=false
+ local abi_x32=false
+
+ for m in "${multi_flags[@]}"; do
+ case "$m" in
+ -m32) bit32=true; abi_dflt=true;;
+ -m64) bit64=true; abi_dflt=true;;
+ -mx32) bit64=true; abi_x32=true;;
+ esac
+ done
+
+ # Fix up architecture.
+ case "${target}" in
+ x86_64-*) $bit32 && target=${target/#x86_64-/i386-} ;;
+ i[34567]86-*) $bit64 && target=${target/#i[34567]86-/x86_64-} ;;
+ esac
+
+ # Fix up the ABI part.
+ case "${target}" in
+ *x32) $abi_dflt && target=${target/%x32} ;;
+ *) $abi_x32 && target=${target}x32 ;;
+ esac
+
+ echo "${target}"
}
diff --git a/scripts/build/cc/100-gcc.sh b/scripts/build/cc/100-gcc.sh
index 7085a90..7bb3610 100644
--- a/scripts/build/cc/100-gcc.sh
+++ b/scripts/build/cc/100-gcc.sh
@@ -403,10 +403,20 @@ do_gcc_core_backend() {
extra_config+=("--with-system-zlib")
fi
- # Some versions of gcc have a deffective --enable-multilib.
- # Since that's the default, only pass --disable-multilib.
+ # Some versions of gcc have a defective --enable-multilib.
+ # Since that's the default, only pass --disable-multilib. For multilib,
+ # also enable multiarch. Without explicit --enable-multiarch, pass-1
+ # compiler is configured as multilib/no-multiarch and pass-2/final
+ # are multilib/multiarch (because gcc autodetects multiarch based on
+ # multiple instances of crt*.o in the install directory - which do
+ # not exist in pass-1).
if [ "${CT_MULTILIB}" != "y" ]; then
extra_config+=("--disable-multilib")
+ else
+ extra_config+=("--enable-multiarch")
+ if [ -n "${CT_CC_GCC_MULTILIB_LIST}" ]; then
+ extra_config+=("--with-multilib-list=${CT_CC_GCC_MULTILIB_LIST}")
+ fi
fi
CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
@@ -880,10 +890,15 @@ do_gcc_backend() {
extra_config+=("--with-system-zlib")
fi
- # Some versions of gcc have a deffective --enable-multilib.
+ # Some versions of gcc have a defective --enable-multilib.
# Since that's the default, only pass --disable-multilib.
if [ "${CT_MULTILIB}" != "y" ]; then
extra_config+=("--disable-multilib")
+ else
+ extra_config+=("--enable-multiarch")
+ if [ -n "${CT_CC_GCC_MULTILIB_LIST}" ]; then
+ extra_config+=("--with-multilib-list=${CT_CC_GCC_MULTILIB_LIST}")
+ fi
fi
CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
diff --git a/scripts/build/debug/300-gdb.sh b/scripts/build/debug/300-gdb.sh
index 418e85c..ee4753e 100644
--- a/scripts/build/debug/300-gdb.sh
+++ b/scripts/build/debug/300-gdb.sh
@@ -69,7 +69,11 @@ do_debug_gdb_build() {
cross_extra_config=("${extra_config[@]}")
cross_extra_config+=("--with-expat")
- cross_extra_config+=("--with-libexpat-prefix=${CT_HOST_COMPLIBS_DIR}")
+ # NOTE: DO NOT USE --with-libexpat-prefix (until GDB configure is smarter)!!!
+ # It conflicts with a static build: GDB's configure script will find the shared
+ # version of expat and will attempt to link that, despite the -static flag.
+ # The link will fail, and configure will abort with "expat missing or unusable"
+ # message.
case "${CT_THREADS}" in
none) cross_extra_config+=("--disable-threads");;
*) cross_extra_config+=("--enable-threads");;
@@ -88,17 +92,24 @@ do_debug_gdb_build() {
cross_extra_config+=("--disable-nls")
fi
- CC_for_gdb=
- LD_for_gdb=
+ CC_for_gdb="${CT_HOST}-gcc ${CT_CFLAGS_FOR_HOST} ${CT_LDFLAGS_FOR_HOST}"
+ LD_for_gdb="${CT_HOST}-ld ${CT_LDFLAGS_FOR_HOST}"
if [ "${CT_GDB_CROSS_STATIC}" = "y" ]; then
- CC_for_gdb="${CT_HOST}-gcc -static"
- LD_for_gdb="${CT_HOST}-ld -static"
+ CC_for_gdb+=" -static"
+ LD_for_gdb+=" -static"
fi
- # Disable binutils options when building from the binutils-gdb repo.
- cross_extra_config+=("--disable-binutils")
- cross_extra_config+=("--disable-ld")
- cross_extra_config+=("--disable-gas")
+ # Fix up whitespace. Some older GDB releases (e.g. 6.8a) get confused if there
+ # are multiple consecutive spaces: sub-configure scripts replace them with a
+ # single space and then complain that $CC value changed from that in
+ # the master directory.
+ CC_for_gdb=`echo $CC_for_gdb`
+ LD_for_gdb=`echo $LD_for_gdb`
+
+ # Disable binutils options when building from the binutils-gdb repo.
+ cross_extra_config+=("--disable-binutils")
+ cross_extra_config+=("--disable-ld")
+ cross_extra_config+=("--disable-gas")
CT_DoLog DEBUG "Extra config passed: '${cross_extra_config[*]}'"
@@ -162,6 +173,11 @@ do_debug_gdb_build() {
fi
native_extra_config+=("--with-expat")
+ # NOTE: DO NOT USE --with-libexpat-prefix (until GDB configure is smarter)!!!
+ # It conflicts with a static build: GDB's configure script will find the shared
+ # version of expat and will attempt to link that, despite the -static flag.
+ # The link will fail, and configure will abort with "expat missing or unusable"
+ # message.
CT_DoLog EXTRA "Configuring native gdb"
diff --git a/scripts/build/libc/glibc.sh b/scripts/build/libc/glibc.sh
index 0a09cbd..472acad 100644
--- a/scripts/build/libc/glibc.sh
+++ b/scripts/build/libc/glibc.sh
@@ -73,6 +73,7 @@ do_libc_backend() {
local multi_dir
local multi_flags
local extra_dir
+ local target
local libc_headers libc_startfiles libc_full
local hdr
local arg
@@ -136,11 +137,36 @@ do_libc_backend() {
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libc-${libc_mode}${extra_dir//\//_}"
+ target=$( CT_DoMultilibTarget "${CT_TARGET}" ${extra_flags} )
+ case "${target}" in
+ # SPARC quirk: glibc 2.23 and newer dropped support for SPARCv8 and
+ # earlier (corresponding pthread barrier code is missing). Until this
+ # support is reintroduced, configure as sparcv9.
+ sparc-*)
+ if [ "${CT_LIBC_GLIBC_2_23_or_later}" = y ]; then
+ target=${target/#sparc-/sparcv9-}
+ fi
+ ;;
+ # x86 quirk: architecture name is i386, but glibc expects i[4567]86 - to
+ # indicate the desired optimization. If it was a multilib variant of x86_64,
+ # then it targets at least NetBurst a.k.a. i786, but we'll follow arch/x86.sh
+ # and set the optimization to i686. Otherwise, replace with the most
+ # conservative choice, i486.
+ i386-*)
+ if [ "${CT_TARGET_ARCH}" = "x86_64" ]; then
+ target=${target/#i386-/i686-}
+ else
+ target=${target/#i386-/i486-}
+ fi
+ ;;
+ esac
+
do_libc_backend_once extra_dir="${extra_dir}" \
extra_flags="${extra_flags}" \
libc_headers="${libc_headers}" \
libc_startfiles="${libc_startfiles}" \
- libc_full="${libc_full}"
+ libc_full="${libc_full}" \
+ target="${target}"
CT_Popd
@@ -179,6 +205,7 @@ do_libc_backend() {
# libc_full : Build full libc : bool : n
# extra_flags : Extra CFLAGS to use (for multilib) : string : (empty)
# extra_dir : Extra subdir for multilib : string : (empty)
+# target : Build libc using this target (for multilib) : string : ${CT_TARGET}
do_libc_backend_once() {
local libc_headers
local libc_startfiles
@@ -192,12 +219,17 @@ do_libc_backend_once() {
local glibc_cflags
local float_extra
local endian_extra
+ local target
local arg
for arg in "$@"; do
eval "${arg// /\\ }"
done
+ if [ "${target}" = "" ]; then
+ target="${CT_TARGET}"
+ fi
+
CT_DoLog EXTRA "Configuring C library"
case "${CT_LIBC}" in
@@ -273,12 +305,12 @@ do_libc_backend_once() {
|${sed} -r -e '/^(.*[[:space:]])?-(E[BL]|m((big|little)(-endian)?|e?[bl]))([[:space:]].*)?$/!d;' \
-e 's//\2/;' \
)"
+ # If extra_flags contained an endianness option, no need to add it again. Otherwise,
+ # add the option from the configuration.
case "${endian_extra}" in
EB|mbig-endian|mbig|meb|mb)
- extra_cc_args="${extra_cc_args} ${endian_extra}"
;;
EL|mlittle-endian|mlittle|mel|ml)
- extra_cc_args="${extra_cc_args} ${endian_extra}"
;;
"") extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
;;
@@ -341,7 +373,7 @@ do_libc_backend_once() {
"${src_dir}/configure" \
--prefix=/usr \
--build=${CT_BUILD} \
- --host=${CT_TARGET} \
+ --host=${target} \
--cache-file="$(pwd)/config.cache" \
--without-cvs \
--disable-profile \
@@ -443,7 +475,8 @@ do_libc_backend_once() {
# However, since we will never actually execute its code,
# it doesn't matter what it contains. So, treating '/dev/null'
# as a C source file, we produce a dummy 'libc.so' in one step
- CT_DoExecLog ALL "${cross_cc}" -nostdlib \
+ CT_DoExecLog ALL "${cross_cc}" ${extra_flags} \
+ -nostdlib \
-nostartfiles \
-shared \
-x c /dev/null \
diff --git a/scripts/crosstool-NG.sh.in b/scripts/crosstool-NG.sh.in
index 9297e3b..3c193c3 100644
--- a/scripts/crosstool-NG.sh.in
+++ b/scripts/crosstool-NG.sh.in
@@ -509,6 +509,8 @@ if [ -z "${CT_RESTART}" ]; then
CT_CFLAGS_FOR_HOST+=" ${CT_EXTRA_CFLAGS_FOR_HOST}"
CT_LDFLAGS_FOR_HOST=
CT_LDFLAGS_FOR_HOST+=" ${CT_EXTRA_LDFLAGS_FOR_HOST}"
+ CT_CFLAGS_FOR_HOST+=" -I${CT_HOST_COMPLIBS_DIR}/include"
+ CT_LDFLAGS_FOR_HOST+=" -L${CT_HOST_COMPLIBS_DIR}/lib"
CT_DoLog DEBUG "CFLAGS for host compiler: '${CT_CFLAGS_FOR_HOST}'"
CT_DoLog DEBUG "LDFLAGS for host compiler: '${CT_LDFLAGS_FOR_HOST}'"
diff --git a/scripts/functions b/scripts/functions
index 70c1ba6..62d264e 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -1305,6 +1305,25 @@ CT_DoBuildTargetTuple() {
CT_ARCH_TARGET_LDFLAGS="${CT_ARCH_TARGET_LDFLAGS} ${CT_ARCH_ENDIAN_LDFLAG}"
}
+# This function determines the target tuple for a given set of compiler
+# flags, using either GCC's multiarch feature (if supported; if not,
+# GCC prints nothing and exits with status 0), falling back to calling
+# the architecture-specific functions.
+CT_DoMultilibTarget() {
+ local target="$1"; shift
+ local -a multi_flags=( "$@" )
+ local gcc_multiarch
+
+ gcc_multiarch=$( "${CT_TARGET}-gcc" -print-multiarch "${multi_flags[@]}" )
+ if [ -n "${gcc_multiarch}" ]; then
+ echo "${gcc_multiarch}"
+ return
+ fi
+
+ # Fall back to arch-specific guesswork
+ CT_DoArchMultilibTarget "${target}" "${multi_flags[@]}"
+}
+
# This function does pause the build until the user strikes "Return"
# Usage: CT_DoPause [optional_message]
CT_DoPause() {