external-toolchain: fix support
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sun, 8 May 2011 16:52:27 +0000 (18:52 +0200)
committerPeter Korsgaard <jacmet@sunsite.dk>
Sun, 8 May 2011 19:56:10 +0000 (21:56 +0200)
The recent commit adding the external toolchain wrapper has broken the
support for external toolchain. The check_arm_eabi, check_cplusplus
and check_cross_compiler_exists functions were using TARGET_CC, which
points to the toolchain wrapper, but at the moment those functions are
called, the wrapper hasn't been generated yet.

We fix this by passing to these functions the path to the C or C++
compiler they should use for their tests.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
toolchain/helpers.mk
toolchain/toolchain-external/ext-tool.mk

index db7c7f1c5fbb7a9d8ce489b6452c523d694c65a0..13dbebbee8145d04b699f59b30aa428c9e79b4c9 100644 (file)
@@ -201,8 +201,11 @@ check_uclibc = \
 # Check that the Buildroot configuration of the ABI matches the
 # configuration of the external toolchain.
 #
+# $1: cross-gcc path
+#
 check_arm_abi = \
-       EXT_TOOLCHAIN_TARGET=$(shell LANG=C $(TARGET_CC) -v 2>&1 | grep ^Target | cut -f2 -d ' ') ; \
+       __CROSS_CC=$(strip $1) ; \
+       EXT_TOOLCHAIN_TARGET=`LANG=C $${__CROSS_CC} -v 2>&1 | grep ^Target | cut -f2 -d ' '` ; \
        if echo $${EXT_TOOLCHAIN_TARGET} | grep -q 'eabi$$' ; then \
                EXT_TOOLCHAIN_ABI="eabi" ; \
        else \
@@ -220,8 +223,11 @@ check_arm_abi = \
 #
 # Check that the external toolchain supports C++
 #
+# $1: cross-g++ path
+#
 check_cplusplus = \
-       $(TARGET_CXX) -v > /dev/null 2>&1 ; \
+       __CROSS_CXX=$(strip $1) ; \
+       $${__CROSS_CXX} -v > /dev/null 2>&1 ; \
        if test $$? -ne 0 ; then \
                echo "C++ support is selected but is not available in external toolchain" ; \
                exit 1 ; \
@@ -230,9 +236,12 @@ check_cplusplus = \
 #
 # Check that the cross-compiler given in the configuration exists
 #
+# $1: cross-gcc path
+#
 check_cross_compiler_exists = \
-       $(TARGET_CC) -v > /dev/null 2>&1 ; \
+       __CROSS_CC=$(strip $1) ; \
+       $${__CROSS_CC} -v > /dev/null 2>&1 ; \
        if test $$? -ne 0 ; then \
-               echo "Cannot execute cross-compiler '$(TARGET_CC)'" ; \
+               echo "Cannot execute cross-compiler '$${__CROSS_CC}'" ; \
                exit 1 ; \
        fi
index 328f9088fab8de6924332faa37e78b02686bfb73..6f5de81ebb98843012769772fe4c57fd9967f2fb 100644 (file)
@@ -122,6 +122,7 @@ endif
 
 TOOLCHAIN_EXTERNAL_CROSS=$(TOOLCHAIN_EXTERNAL_BIN)/$(TOOLCHAIN_EXTERNAL_PREFIX)-
 TOOLCHAIN_EXTERNAL_CC=$(TOOLCHAIN_EXTERNAL_CROSS)gcc
+TOOLCHAIN_EXTERNAL_CXX=$(TOOLCHAIN_EXTERNAL_CROSS)g++
 TOOLCHAIN_EXTERNAL_WRAPPER_ARGS = \
        -DBR_CROSS_PATH='"$(TOOLCHAIN_EXTERNAL_BIN)/"' \
        -DBR_SYSROOT='"$(STAGING_DIR)"'
@@ -201,7 +202,7 @@ $(TOOLCHAIN_EXTERNAL_DIR)/.extracted: $(DL_DIR)/$(TOOLCHAIN_EXTERNAL_SOURCE)
 # type of C library and all C library features.
 $(STAMP_DIR)/ext-toolchain-checked:
        @echo "Checking external toolchain settings"
-       $(Q)$(call check_cross_compiler_exists)
+       $(Q)$(call check_cross_compiler_exists,$(TOOLCHAIN_EXTERNAL_CC))
        $(Q)SYSROOT_DIR=`$(TOOLCHAIN_EXTERNAL_CC) -print-sysroot 2>/dev/null` ; \
        if test -z "$${SYSROOT_DIR}" ; then \
                SYSROOT_DIR=`readlink -f $$(LANG=C $(TOOLCHAIN_EXTERNAL_CC) -print-file-name=libc.a) |sed -r -e 's:usr/lib/libc\.a::;'` ; \
@@ -211,10 +212,10 @@ $(STAMP_DIR)/ext-toolchain-checked:
                exit 1 ; \
        fi ; \
        if test x$(BR2_arm) == x"y" ; then \
-               $(call check_arm_abi) ; \
+               $(call check_arm_abi,$(TOOLCHAIN_EXTERNAL_CC)) ; \
        fi ; \
        if test x$(BR2_INSTALL_LIBSTDCPP) == x"y" ; then \
-               $(call check_cplusplus) ; \
+               $(call check_cplusplus,$(TOOLCHAIN_EXTERNAL_CXX)) ; \
        fi ; \
        if test x$(BR2_TOOLCHAIN_EXTERNAL_UCLIBC) == x"y" ; then \
                $(call check_uclibc,$${SYSROOT_DIR}) ; \