diff mbox

[U-Boot,v2] examples: select libgcc for non-default architecture

Message ID 1400222167-22402-1-git-send-email-abrodkin@synopsys.com
State Superseded
Delegated to: Tom Rini
Headers show

Commit Message

Alexey Brodkin May 16, 2014, 6:36 a.m. UTC
In case of multilib-enabled toolchains if default architecture differ from
the one examples are being built for linker will fail to link example object
files with libgcc of another (non-compatible) architecture.

Interesting enough for years in main Makefile we used CFLAGS/c_flags for this
but not for examples.

So fixing it now.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>

Cc: Masahiro Yamada <yamada.m@jp.panasonic.com>
Cc: Tom Rini <trini@ti.com>
Cc: Wolfgang Denx <wd@denx.de>

---
v2 copies functoinality for libgcc selection from main Makefile.
This takes care of CONFIG_USE_PRIVATE_LIBGCC if one is used.

 examples/standalone/Makefile | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

Comments

Masahiro Yamada May 16, 2014, 7:05 a.m. UTC | #1
Hi Alexey, Wolfgang,


> --- a/examples/standalone/Makefile
> +++ b/examples/standalone/Makefile
> @@ -38,7 +38,17 @@ targets += $(patsubst $(obj)/%,%,$(LIB)) $(COBJS) $(LIBOBJS-y)
>  LIBOBJS	:= $(addprefix $(obj)/,$(LIBOBJS-y))
>  ELF	:= $(addprefix $(obj)/,$(ELF))
>  
> -gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`)
> +# Add GCC lib
> +ifdef CONFIG_USE_PRIVATE_LIBGCC
> +ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
> +PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a
> +else
> +PLATFORM_LIBGCC = -L $(CONFIG_USE_PRIVATE_LIBGCC) -lgcc
> +endif
> +else
> +PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(PLATFORM_CPPFLAGS) \
> +				       -print-libgcc-file-name`) -lgcc
> +endif

This is duplicating the code.

I think you should export PLATFORM_LIBGCC from the top Makefile
and use it.


Best Regards
Masahiro Yamada
Wolfgang Denk May 16, 2014, 7:36 a.m. UTC | #2
Dear Masahiro,

In message <20140516160556.E1A8.AA925319@jp.panasonic.com> you wrote:
> 
> > +# Add GCC lib
> > +ifdef CONFIG_USE_PRIVATE_LIBGCC
> > +ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
> > +PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a
> > +else
> > +PLATFORM_LIBGCC = -L $(CONFIG_USE_PRIVATE_LIBGCC) -lgcc
> > +endif
> > +else
> > +PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(PLATFORM_CPPFLAGS) \
> > +				       -print-libgcc-file-name`) -lgcc
> > +endif
> 
> This is duplicating the code.
> 
> I think you should export PLATFORM_LIBGCC from the top Makefile
> and use it.

Yes, this is what I head in mind, too.  we already have this setting,
so there should be no need to redo it.

Best regards,

Wolfgang Denk
diff mbox

Patch

diff --git a/examples/standalone/Makefile b/examples/standalone/Makefile
index 9ab5446..2c13c07 100644
--- a/examples/standalone/Makefile
+++ b/examples/standalone/Makefile
@@ -38,7 +38,17 @@  targets += $(patsubst $(obj)/%,%,$(LIB)) $(COBJS) $(LIBOBJS-y)
 LIBOBJS	:= $(addprefix $(obj)/,$(LIBOBJS-y))
 ELF	:= $(addprefix $(obj)/,$(ELF))
 
-gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`)
+# Add GCC lib
+ifdef CONFIG_USE_PRIVATE_LIBGCC
+ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
+PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a
+else
+PLATFORM_LIBGCC = -L $(CONFIG_USE_PRIVATE_LIBGCC) -lgcc
+endif
+else
+PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(PLATFORM_CPPFLAGS) \
+				       -print-libgcc-file-name`) -lgcc
+endif
 
 # For PowerPC there's no need to compile standalone applications as a
 # relocatable executable.  The relocation data is not needed, and
@@ -63,7 +73,7 @@  $(LIB):	$(LIBOBJS) FORCE
 
 quiet_cmd_link_elf = LD      $@
       cmd_link_elf = $(LD) $(LDFLAGS) -g -Ttext $(CONFIG_STANDALONE_LOAD_ADDR) \
-		     -o $@ -e $(SYM_PREFIX)$(@F) $< $(LIB) -L$(gcclibdir) -lgcc
+		     -o $@ -e $(SYM_PREFIX)$(@F) $< $(LIB) $(PLATFORM_LIBGCC)
 
 $(ELF): $(obj)/%: $(obj)/%.o $(LIB) FORCE
 	$(call if_changed,link_elf)