toolchain: fix using external toolchains built with buildroot

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>
This commit is contained in:
Yann E. MORIN 2010-04-07 00:50:10 +02:00 committed by Peter Korsgaard
parent 3e7de2af67
commit 6db57c6936
2 changed files with 3 additions and 9 deletions

View File

@ -4,7 +4,7 @@
Toolchain: uClibc 0.9.30.3 / 0.9.31, older 0.9.30.x removed. 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 2.6.33 kernel headers, binutils 2.20.1, removed broken nios2
support. support, improved external toolchain support.
X.org updated to 7.5. X.org updated to 7.5.
@ -23,6 +23,7 @@
#800: [PATCH] iperf update to 2.0.4 #800: [PATCH] iperf update to 2.0.4
#805: [PATCH] mdadm - version update #805: [PATCH] mdadm - version update
#817: integrator926_defconfig uses unsupported uboot board name #817: integrator926_defconfig uses unsupported uboot board name
#851: Add option to specify --sysroot value for external toolchain
#1105: Add new netperf package #1105: Add new netperf package
#1111: Bump wget to 1.12 and migrate to Makefile.autotools.in #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 #1117: Bump nano to 2.2.3 and migrate to Makefile.autotools.in

View File

@ -205,14 +205,7 @@ ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
EXTERNAL_LIBS+=libstdc++.so EXTERNAL_LIBS+=libstdc++.so
endif endif
# This dance is needed because the toolchain may have been relocated, so the SYSROOT_DIR=$(shell readlink -f $$(LANG=C $(TARGET_CC) -print-file-name=libc.a |sed -r -e 's:usr/lib/libc\.a::;'))
# 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)
$(STAMP_DIR)/ext-toolchain-installed: $(STAMP_DIR)/ext-toolchain-installed:
@echo "Checking external toolchain settings" @echo "Checking external toolchain settings"