* [U-Boot] [PATCH] Makefile: Introduce ARCH_PLATFORM_LIBGCC variable
@ 2013-10-11 20:13 Tom Rini
2013-10-11 21:01 ` Tom Rini
2013-10-12 7:43 ` Albert ARIBAUD
0 siblings, 2 replies; 5+ messages in thread
From: Tom Rini @ 2013-10-11 20:13 UTC (permalink / raw)
To: u-boot
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 <albert.u.boot@aribaud.net>
Signed-off-by: Tom Rini <trini@ti.com>
---
Makefile | 4 ++++
arch/arm/config.mk | 11 +++++++++++
2 files changed, 15 insertions(+)
diff --git a/Makefile b/Makefile
index b09bfcc..13b396f 100644
--- a/Makefile
+++ b/Makefile
@@ -357,8 +357,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 d0cf43f..e1d0dec 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
--
1.7.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH] Makefile: Introduce ARCH_PLATFORM_LIBGCC variable
2013-10-11 20:13 [U-Boot] [PATCH] Makefile: Introduce ARCH_PLATFORM_LIBGCC variable Tom Rini
@ 2013-10-11 21:01 ` Tom Rini
2013-10-12 7:43 ` Albert ARIBAUD
1 sibling, 0 replies; 5+ messages in thread
From: Tom Rini @ 2013-10-11 21:01 UTC (permalink / raw)
To: u-boot
On Fri, Oct 11, 2013 at 04:13:03PM -0400, Tom Rini wrote:
> 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 <albert.u.boot@aribaud.net>
> Signed-off-by: Tom Rini <trini@ti.com>
For the record, build-tested with ELDKs for arm, powerpc and mips,
and other toolchains for nds32 m68k x86 and sandbox.
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20131011/76e15dd8/attachment.pgp>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH] Makefile: Introduce ARCH_PLATFORM_LIBGCC variable
2013-10-11 20:13 [U-Boot] [PATCH] Makefile: Introduce ARCH_PLATFORM_LIBGCC variable Tom Rini
2013-10-11 21:01 ` Tom Rini
@ 2013-10-12 7:43 ` Albert ARIBAUD
2013-10-14 15:16 ` Tom Rini
1 sibling, 1 reply; 5+ messages in thread
From: Albert ARIBAUD @ 2013-10-12 7:43 UTC (permalink / raw)
To: u-boot
Hi Tom,
On Fri, 11 Oct 2013 16:13:03 -0400, Tom Rini <trini@ti.com> wrote:
> 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 <albert.u.boot@aribaud.net>
> Signed-off-by: Tom Rini <trini@ti.com>
> ---
> Makefile | 4 ++++
> arch/arm/config.mk | 11 +++++++++++
> 2 files changed, 15 insertions(+)
>
> diff --git a/Makefile b/Makefile
> index b09bfcc..13b396f 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -357,8 +357,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 d0cf43f..e1d0dec 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.
What does this last sentence mean exactly?
> +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
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH] Makefile: Introduce ARCH_PLATFORM_LIBGCC variable
2013-10-12 7:43 ` Albert ARIBAUD
@ 2013-10-14 15:16 ` Tom Rini
2013-10-14 17:06 ` Albert ARIBAUD
0 siblings, 1 reply; 5+ messages in thread
From: Tom Rini @ 2013-10-14 15:16 UTC (permalink / raw)
To: u-boot
On Sat, Oct 12, 2013 at 09:43:33AM +0200, Albert ARIBAUD wrote:
> Hi Tom,
>
> On Fri, 11 Oct 2013 16:13:03 -0400, Tom Rini <trini@ti.com> wrote:
>
> > 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 <albert.u.boot@aribaud.net>
> > Signed-off-by: Tom Rini <trini@ti.com>
> > ---
> > Makefile | 4 ++++
> > arch/arm/config.mk | 11 +++++++++++
> > 2 files changed, 15 insertions(+)
> >
> > diff --git a/Makefile b/Makefile
> > index b09bfcc..13b396f 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -357,8 +357,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 d0cf43f..e1d0dec 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.
>
> What does this last sentence mean exactly?
What it says. If a hardfp only toolchain is used certain targets shall
not link. I had Marek confirm this as well. I don't have the exact
logs handy, but today there's a few targets that will fail, and the nand
flash patchset introduces another because we enforce -msoft-float on
U-Boot, and rely on libgcc from the toolchain for certain functions
(__udivdi3 for example).
I don't know how you weren't making this fail on ELDK 5.x armv7a-fp, but
I was and the Linaro 2013.03 toolchain also will show this problem.
Once I push the nand PR (shortly), building for am3517_crane for example
will fail without this patch.
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20131014/7071935f/attachment.pgp>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH] Makefile: Introduce ARCH_PLATFORM_LIBGCC variable
2013-10-14 15:16 ` Tom Rini
@ 2013-10-14 17:06 ` Albert ARIBAUD
0 siblings, 0 replies; 5+ messages in thread
From: Albert ARIBAUD @ 2013-10-14 17:06 UTC (permalink / raw)
To: u-boot
Hi Tom,
On Mon, 14 Oct 2013 11:16:37 -0400, Tom Rini <trini@ti.com> wrote:
> On Sat, Oct 12, 2013 at 09:43:33AM +0200, Albert ARIBAUD wrote:
> > Hi Tom,
> >
> > On Fri, 11 Oct 2013 16:13:03 -0400, Tom Rini <trini@ti.com> wrote:
> >
> > > 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 <albert.u.boot@aribaud.net>
> > > Signed-off-by: Tom Rini <trini@ti.com>
> > > ---
> > > Makefile | 4 ++++
> > > arch/arm/config.mk | 11 +++++++++++
> > > 2 files changed, 15 insertions(+)
> > >
> > > diff --git a/Makefile b/Makefile
> > > index b09bfcc..13b396f 100644
> > > --- a/Makefile
> > > +++ b/Makefile
> > > @@ -357,8 +357,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 d0cf43f..e1d0dec 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.
> >
> > What does this last sentence mean exactly?
>
> What it says. If a hardfp only toolchain is used certain targets shall
> not link. I had Marek confirm this as well. I don't have the exact
> logs handy, but today there's a few targets that will fail, and the nand
> flash patchset introduces another because we enforce -msoft-float on
> U-Boot, and rely on libgcc from the toolchain for certain functions
> (__udivdi3 for example).
I was wondering if the sentence meant this, or if it meant "there is no
way we can ensure that we'll always build with a hardfp-only
toolchain".
Maybe the ambiguity would be lifted by saying "Building with a
hardfp-only toolchain will fail [for some targets]"?
> I don't know how you weren't making this fail on ELDK 5.x armv7a-fp, but
> I was and the Linaro 2013.03 toolchain also will show this problem.
> Once I push the nand PR (shortly), building for am3517_crane for example
> will fail without this patch.
That may be because I have several toolchains installed, one of which
is in the standard path (/usr/bin, /usr/lib, etc).
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-10-14 17:06 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-11 20:13 [U-Boot] [PATCH] Makefile: Introduce ARCH_PLATFORM_LIBGCC variable Tom Rini
2013-10-11 21:01 ` Tom Rini
2013-10-12 7:43 ` Albert ARIBAUD
2013-10-14 15:16 ` Tom Rini
2013-10-14 17:06 ` Albert ARIBAUD
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox