summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--toolchain/helpers.mk15
-rw-r--r--toolchain/toolchain-external/ext-tool.mk5
2 files changed, 19 insertions, 1 deletions
diff --git a/toolchain/helpers.mk b/toolchain/helpers.mk
index 764c795d8..4c988a5c9 100644
--- a/toolchain/helpers.mk
+++ b/toolchain/helpers.mk
@@ -279,10 +279,25 @@ check_uclibc = \
#
check_arm_abi = \
__CROSS_CC=$(strip $1) ; \
+ __CROSS_READELF=$(strip $2) ; \
EXT_TOOLCHAIN_TARGET=`LANG=C $${__CROSS_CC} -v 2>&1 | grep ^Target | cut -f2 -d ' '` ; \
if ! echo $${EXT_TOOLCHAIN_TARGET} | grep -qE 'eabi(hf)?$$' ; then \
echo "External toolchain uses the unsuported OABI" ; \
exit 1 ; \
+ fi ; \
+ EXT_TOOLCHAIN_CRT1=`LANG=C $${__CROSS_CC} -print-file-name=crt1.o` ; \
+ if $${__CROSS_READELF} -A $${EXT_TOOLCHAIN_CRT1} | grep -q "Tag_ABI_VFP_args:" ; then \
+ EXT_TOOLCHAIN_ABI="eabihf" ; \
+ else \
+ EXT_TOOLCHAIN_ABI="eabi" ; \
+ fi ; \
+ if [ "$(BR2_ARM_EABI)" = "y" -a "$${EXT_TOOLCHAIN_ABI}" = "eabihf" ] ; then \
+ echo "Incorrect ABI setting: EABI selected, but toolchain uses EABIhf" ; \
+ exit 1 ; \
+ fi ; \
+ if [ "$(BR2_ARM_EABIHF)" = "y" -a "$${EXT_TOOLCHAIN_ABI}" = "eabi" ] ; then \
+ echo "Incorrect ABI setting: EABIhf selected, but toolchain uses EABI" ; \
+ exit 1 ; \
fi
#
diff --git a/toolchain/toolchain-external/ext-tool.mk b/toolchain/toolchain-external/ext-tool.mk
index b9ae68f0a..80e03b980 100644
--- a/toolchain/toolchain-external/ext-tool.mk
+++ b/toolchain/toolchain-external/ext-tool.mk
@@ -125,6 +125,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_READELF=$(TOOLCHAIN_EXTERNAL_CROSS)readelf
TOOLCHAIN_EXTERNAL_WRAPPER_ARGS = -DBR_SYSROOT='"$(STAGING_SUBDIR)"'
ifeq ($(filter $(HOST_DIR)/%,$(TOOLCHAIN_EXTERNAL_BIN)),)
@@ -368,7 +369,9 @@ $(STAMP_DIR)/ext-toolchain-checked: $(TOOLCHAIN_EXTERNAL_DEPENDENCIES)
exit 1 ; \
fi ; \
if test x$(BR2_arm) == x"y" ; then \
- $(call check_arm_abi,$(TOOLCHAIN_EXTERNAL_CC)) ; \
+ $(call check_arm_abi,\
+ "$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS)",\
+ $(TOOLCHAIN_EXTERNAL_READELF)) ; \
fi ; \
if test x$(BR2_INSTALL_LIBSTDCPP) == x"y" ; then \
$(call check_cplusplus,$(TOOLCHAIN_EXTERNAL_CXX)) ; \