Make linking against libgcc configurable
authorWolfgang Denk <wd@denx.de>
Thu, 23 Jul 2009 11:15:59 +0000 (13:15 +0200)
committerWolfgang Denk <wd@denx.de>
Sun, 26 Jul 2009 22:11:32 +0000 (00:11 +0200)
Many (especially ARM) tool chains seem to come with broken or
otherwise unusable (for the purposes of builing U-Boot) run-time
support libraries `libgcc.a'. By using the "USE_PRIVATE_LIBGCC"
setting we allow to use alternative libraries instead.

"USE_PRIVATE_LIBGCC" can either be set as an environment variable in
the shell, or as a command line argument when running "make", i. e.
$ make USE_PRIVATE_LIBGCC=yes
or
$ USE_PRIVATE_LIBGCC=yes
$ export USE_PRIVATE_LIBGCC
$ make

The value of "USE_PRIVATE_LIBGCC" is the name of the directory which
contains the alternative run-time support library `libgcc.a'. The
special value "yes" selects the directory $(OBJTREE)/lib_$(ARCH) .

Note that not all architectures provide an alternative `libgcc.a' in
their lib_$(ARCH) directories - so far, only ARM does.

Signed-off-by: Wolfgang Denk <wd@denx.de>
Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: Prafulla Wadaskar <prafulla@marvell.com>
cc: Stefan Roese <sr@denx.de>

Makefile
board/trab/Makefile
lib_arm/Makefile

index 17605d46b1d463cc0456cad76b69eb1a0f8c8e2a..22bfeebc25597896fbb4c12f64aac3cc7b2dc001 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -254,7 +254,17 @@ LIBBOARD = board/$(BOARDDIR)/lib$(BOARD).a
 LIBBOARD := $(addprefix $(obj),$(LIBBOARD))
 
 # Add GCC lib
-PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
+ifdef USE_PRIVATE_LIBGCC
+ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
+PLATFORM_LIBGCC = -L $(OBJTREE)/lib_$(ARCH) -lgcc
+else
+PLATFORM_LIBGCC = -L $(USE_PRIVATE_LIBGCC) -lgcc
+endif
+else
+PLATFORM_LIBGCC = -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
+endif
+PLATFORM_LIBS += $(PLATFORM_LIBGCC)
+export PLATFORM_LIBS
 
 ifeq ($(CONFIG_NAND_U_BOOT),y)
 NAND_SPL = nand_spl
index 3a92c0d95f920e5dc48f0b4c095abd572309d6c3..2afad888d1dabeb243b594661e7740ad553ac764 100644 (file)
@@ -36,8 +36,6 @@ SOBJS := $(addprefix $(obj),$(SOBJS))
 
 OBJS_FKT := $(addprefix $(obj),$(COBJS_FKT))
 
-gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`)
-
 LOAD_ADDR = 0xc100000
 
 #########################################################################
@@ -52,7 +50,7 @@ $(obj)trab_fkt.srec:  $(OBJS_FKT) $(LIB)
                -L$(obj)../../examples/standalone -lstubs \
                -L$(obj)../../lib_generic -lgeneric \
                $(obj)../../lib_arm/div0.o \
-               $(obj)../../lib_arm/_*.o
+               $(PLATFORM_LIBS)
        $(OBJCOPY) -O srec $(<:.o=) $@
 
 $(obj)trab_fkt.bin:    $(obj)trab_fkt.srec
index 4469361a8aca1a21ab541579fc251d330fd93f78..241782c177a3164bbef5d44a49cfef19976530de 100644 (file)
 include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(ARCH).a
+LIBGCC = $(obj)libgcc.a
 
-SOBJS-y        += _ashldi3.o
-SOBJS-y        += _ashrdi3.o
-SOBJS-y        += _divsi3.o
-SOBJS-y        += _modsi3.o
-SOBJS-y        += _udivsi3.o
-SOBJS-y        += _umodsi3.o
+GLSOBJS        += _ashldi3.o
+GLSOBJS        += _ashrdi3.o
+GLSOBJS        += _divsi3.o
+GLSOBJS        += _modsi3.o
+GLSOBJS        += _udivsi3.o
+GLSOBJS        += _umodsi3.o
+
+GLCOBJS        += div0.o
 
 COBJS-y        += board.o
 COBJS-y        += bootm.o
@@ -38,16 +41,27 @@ COBJS-y     += cache.o
 ifndef CONFIG_SYS_NO_CP15_CACHE
 COBJS-y        += cache-cp15.o
 endif
-COBJS-y        += div0.o
 COBJS-y        += interrupts.o
 COBJS-y        += reset.o
 
-SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
+SRCS   := $(GLSOBJS:.o=.S) $(GLCOBJS:.o=.c) \
+          $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
+LGOBJS := $(addprefix $(obj),$(GLSOBJS)) \
+          $(addprefix $(obj),$(GLCOBJS))
+
+ifdef USE_PRIVATE_LIBGCC
+all:   $(LIB) $(LIBGCC)
+else
+all:   $(LIB)
+endif
 
 $(LIB):        $(obj).depend $(OBJS)
        $(AR) $(ARFLAGS) $@ $(OBJS)
 
+$(LIBGCC): $(obj).depend $(LGOBJS)
+       $(AR) $(ARFLAGS) $@ $(LGOBJS)
+
 #########################################################################
 
 # defines $(obj).depend target