toolchain: fix using external toolchains built with buildroot
authorYann E. MORIN <yann.morin.1998@anciens.enib.fr>
Tue, 6 Apr 2010 22:50:10 +0000 (00:50 +0200)
committerPeter Korsgaard <jacmet@sunsite.dk>
Wed, 7 Apr 2010 07:49:20 +0000 (09:49 +0200)
The toolchains built with buildroot use specially crafted paths for their
sysroot and prefix. Fix that by asking gcc where it finds a file we
know by relative path to the sysroot.

This has the side effect of greatly simplifying the sysroot detection
in every cases tested so far (BR toolchains, CT-NG toolchains, and
CodeSourcery toolchains).

Fixes bug #851.

Thanks Thomas Petazzoni for the hint and some testings.
Thanks Grant Edwards for the report and the comments.

Signed-off-by: Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
Acked-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
CHANGES
toolchain/external-toolchain/ext-tool.mk

diff --git a/CHANGES b/CHANGES
index 34f47a0019b01e7f4c9cf9e62c07246a0847e04d..2ffd6727defd72149999a59c83694a26159b8a3a 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,7 +4,7 @@
 
        Toolchain: uClibc 0.9.30.3 / 0.9.31, older 0.9.30.x removed.
        2.6.33 kernel headers, binutils 2.20.1, removed broken nios2
-       support.
+       support, improved external toolchain support.
 
        X.org updated to 7.5.
 
@@ -23,6 +23,7 @@
        #800: [PATCH] iperf update to 2.0.4
        #805: [PATCH] mdadm - version update
        #817: integrator926_defconfig uses unsupported uboot board name
+       #851: Add option to specify --sysroot value for external toolchain
        #1105: Add new netperf package
        #1111: Bump wget to 1.12 and migrate to Makefile.autotools.in
        #1117: Bump nano to 2.2.3 and migrate to Makefile.autotools.in
index 80bdae63b5cb2fd1f90058da403fd519c3aacf27..4493281319e211a0cdfbd971a4efb89033843b50 100644 (file)
@@ -205,14 +205,7 @@ ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
 EXTERNAL_LIBS+=libstdc++.so
 endif
 
-# This dance is needed because the toolchain may have been relocated, so the
-# configured paths may no longer match; fortunately, the sysroot moves along
-# the toolchain, so is always at the same place relative to the toolchain's
-# current location.
-CFG_PREFIX_DIR=$(shell LANG=C $(TARGET_CC) -v 2>&1 | grep ^Configured | tr " " "\n" | grep -- "--prefix=" | cut -f2 -d=)
-CFG_SYSROOT_DIR=$(shell LANG=C $(TARGET_CC) -v 2>&1 | grep ^Configured | tr " " "\n" | grep -- "--with-sysroot=" | cut -f2 -d=)
-REL_SYSROOT_DIR=$(shell echo "$(CFG_SYSROOT_DIR)" |sed -r -e 's:^$(CFG_PREFIX_DIR)::;')
-SYSROOT_DIR=$(TOOLCHAIN_EXTERNAL_PATH)/$(REL_SYSROOT_DIR)
+SYSROOT_DIR=$(shell readlink -f $$(LANG=C $(TARGET_CC) -print-file-name=libc.a |sed -r -e 's:usr/lib/libc\.a::;'))
 
 $(STAMP_DIR)/ext-toolchain-installed:
        @echo "Checking external toolchain settings"