From 070127ecc9a5e0019b7a80e83fed09e0d2895928 Mon Sep 17 00:00:00 2001 From: Tom Rini Date: Fri, 11 Oct 2013 16:13:03 -0400 Subject: [PATCH] Makefile: Introduce ARCH_PLATFORM_LIBGCC variable In some cases, such as arm multi-lib hardfloat (hf) toolchains, we will have multiple libgcc.a's available, and the arch needs to provide additional logic to determine the right file to use (-print-libgcc-file-name contains no CFLAG parsing logic). Cc: Albert Aribaud Signed-off-by: Tom Rini --- Makefile | 4 ++++ arch/arm/config.mk | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/Makefile b/Makefile index dc0417914e..3933a8e27a 100644 --- a/Makefile +++ b/Makefile @@ -358,8 +358,12 @@ else PLATFORM_LIBGCC = -L $(USE_PRIVATE_LIBGCC) -lgcc endif else +ifneq ("$(ARCH_PLATFORM_LIBGCC)","") +PLATFORM_LIBGCC := -L $(shell dirname $(ARCH_PLATFORM_LIBGCC)) -lgcc +else PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc endif +endif PLATFORM_LIBS += $(PLATFORM_LIBGCC) export PLATFORM_LIBS diff --git a/arch/arm/config.mk b/arch/arm/config.mk index bdabcf407e..1c098ae4ea 100644 --- a/arch/arm/config.mk +++ b/arch/arm/config.mk @@ -19,6 +19,17 @@ LDFLAGS_FINAL += --gc-sections PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections \ -fno-common -ffixed-r9 -msoft-float +# +# When we use a hardfp toolchain if there are both 'libgcc.a' (hardfp) and +# 'arm-linux-gnueabi/libgcc.a' (softfp) we need to use the latter. We +# cannot always build with a hardfp-only toolchain. +# +ARCH_PLATFORM_LIBGCC := $(shell \ + X=`$(CC) -print-file-name=arm-linux-gnueabi/libgcc.a`; \ + if [ -f $$X ]; then echo $$X ; \ + else $(CC) -print-file-name=libgcc.a ; \ + fi) + # Support generic board on ARM __HAVE_ARCH_GENERIC_BOARD := y