diff --git a/toolchain/helpers.mk b/toolchain/helpers.mk index 1cd7494fdb..24c482923a 100644 --- a/toolchain/helpers.mk +++ b/toolchain/helpers.mk @@ -422,12 +422,16 @@ check_cross_compiler_exists = \ # the host tuple. # - Exclude distro-class toolchains which are not relocatable. # - Exclude broken toolchains which return "libc.a" with -print-file-name. +# - Exclude toolchains used with wrong toolchain cflags or broken toolchains +# which return "libc.a" with -print-file-name and toolchain cflags. # - Exclude toolchains which doesn't support --sysroot option. # # $1: cross-gcc path +# $1: toolchain cflags # check_unusable_toolchain = \ __CROSS_CC=$(strip $1) ; \ + __TOOLCHAIN_CFLAGS=$(strip $2) ; \ vendor=`$${__CROSS_CC} -dumpmachine | cut -f2 -d'-'` ; \ if test "$${vendor}" = "angstrom" ; then \ echo "Angstrom toolchains are not pure toolchains: they contain" ; \ @@ -449,6 +453,13 @@ check_unusable_toolchain = \ echo "Unable to detect the toolchain sysroot, Buildroot cannot use this toolchain." ; \ exit 1 ; \ fi ; \ + libc_a_archsysroot_path=`$${__CROSS_CC} $${__TOOLCHAIN_CFLAGS} -print-file-name=libc.a` ; \ + if test "$${libc_a_archsysroot_path}" = "libc.a" ; then \ + echo "Unable to detect the toolchain architecture sysroot." ; \ + echo "Please check the Target Architecture Variant selected, the toolchains may not support it." ; \ + echo "Buildroot cannot use this toolchain." ; \ + exit 1 ; \ + fi; \ sysroot_dir="$(call toolchain_find_sysroot,$${__CROSS_CC})" ; \ if test -z "$${sysroot_dir}" ; then \ echo "External toolchain doesn't support --sysroot. Cannot use." ; \ diff --git a/toolchain/toolchain-external/pkg-toolchain-external.mk b/toolchain/toolchain-external/pkg-toolchain-external.mk index 299b6008aa..c37f3500d9 100644 --- a/toolchain/toolchain-external/pkg-toolchain-external.mk +++ b/toolchain/toolchain-external/pkg-toolchain-external.mk @@ -563,7 +563,7 @@ endif # kernel headers version, type of C library and all C library features. define $(2)_CONFIGURE_CMDS $$(Q)$$(call check_cross_compiler_exists,$$(TOOLCHAIN_EXTERNAL_CC)) - $$(Q)$$(call check_unusable_toolchain,$$(TOOLCHAIN_EXTERNAL_CC)) + $$(Q)$$(call check_unusable_toolchain,$$(TOOLCHAIN_EXTERNAL_CC),"$$(TOOLCHAIN_EXTERNAL_CFLAGS)") $$(Q)SYSROOT_DIR="$$(call toolchain_find_sysroot,$$(TOOLCHAIN_EXTERNAL_CC))" ; \ $$(call check_kernel_headers_version,\ $$(BUILD_DIR),\