Fix a makefile dependency with libraries

Using the implicit rules for libraries leads to problems if one of the
objects fails to build, but the others are still OK.  Just make all
library rules explicit to avoid this.
This commit is contained in:
Jim Paris 2010-09-28 15:48:57 -04:00
parent 6b4d6a9ade
commit 03293b60ad
4 changed files with 19 additions and 8 deletions

View file

@ -109,10 +109,6 @@ $(foreach t, $(TARGETS_WITH_ROM_VARS), $(eval $(call build_elf_rule,$(t))))
$Q$(CC) $(AFLAGS) -MMD -c -o $@ $<
@$(FINALIZE_DEPENDENCY)
(%): %
$(call pretty,AR,$@($<))
@$(AR) $(ARFLAGS) $@ $<
# Fix the dependencies generated for a particular target .o
# See http://make.paulandlesley.org/autodep.html#advanced
define FINALIZE_DEPENDENCY

View file

@ -5,6 +5,8 @@ ALL_BOARDS = redbee-dev redbee-r1 redbee-usb redbee-econotag quahogcon freescale
OBJDIR = obj_$(BOARD)
CFLAGS += -I. -I$(OBJDIR) -I$(MC1322X)/board -DBOARD=$(BOARD)
OBJDIR_COBJS = $(addprefix $(OBJDIR)/, $(COBJS))
# Create directory and board.h include
$(OBJDIR)/board.h:
$(call pretty,GEN,$@)
@ -14,10 +16,14 @@ $(OBJDIR)/board.h:
# $(OBJDIR)/board.a contains all the objects defined in COBJS
ifdef COBJS
$(OBJDIR)/board.a: $(OBJDIR)/board.h $(OBJDIR)/board.a($(addprefix $(OBJDIR)/, $(COBJS)))
$(OBJDIR)/board.a: $(OBJDIR)/board.h $(OBJDIR_COBJS)
$(call pretty,AR,$@)
@rm -f $@
$Q$(AR) $(ARFLAGS) $@ $(OBJDIR_COBJS)
else
$(OBJDIR)/board.a: $(OBJDIR)/board.h
$(call pretty,AR (empty),$@)
@rm -f $@
$Q$(AR) $(ARFLAGS) $@
endif

View file

@ -5,7 +5,10 @@ CFLAGS += -I$(MC1322X)/lib/include
# By default, link all objects
LIBOBJS ?= $(patsubst %.c,%.o,$(wildcard $(MC1322X)/lib/*.c))
$(MC1322X)/lib/libmc1322x.a: $(MC1322X)/lib/libmc1322x.a($(LIBOBJS))
$(MC1322X)/lib/libmc1322x.a: $(LIBOBJS)
$(call pretty,AR,$@)
@rm -f $@
$Q$(AR) $(ARFLAGS) $@ $^
TARGET_OBJ += $(MC1322X)/lib/libmc1322x.a

View file

@ -8,11 +8,17 @@ SRC_OBJS += $(MC1322X)/src/default_lowlevel.o $(ISR)
# Two libraries, one with ROM variable space reserved, one without
START_ROMVARS ?= $(MC1322X)/src/start-romvars.o
SRCLIB_ROMVARS = $(MC1322X)/src/src-romvars.a
$(SRCLIB_ROMVARS): $(SRCLIB_ROMVARS)($(SRC_OBJS) $(START_ROMVARS))
$(SRCLIB_ROMVARS): $(SRC_OBJS) $(START_ROMVARS)
$(call pretty,AR,$@)
@rm -f $@
$Q$(AR) $(ARFLAGS) $@ $^
START ?= $(MC1322X)/src/start.o
SRCLIB = $(MC1322X)/src/src.a
$(SRCLIB): $(SRCLIB)($(SRC_OBJS) $(START))
$(SRCLIB): $(SRC_OBJS) $(START)
$(call pretty,AR,$@)
@rm -f $@
$Q$(AR) $(ARFLAGS) $@ $^
# ISR is built without thumb
$(ISR): $(ISR:.o=.c)