diff options
author | Ingo Albrecht <prom@berlin.ccc.de> | 2010-03-07 01:41:32 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2010-03-07 11:47:09 +0100 |
commit | 41abd7e50055e69993d5e9c8acd9852aee51da1f (patch) | |
tree | 4f65fbe8f2f7be78262cf664be4a09933b8e19b3 /src/target/firmware/Makefile.inc | |
parent | 60bbc89c30cb0cfd88ad46640f50e35d197a0053 (diff) |
New build system.
Diffstat (limited to 'src/target/firmware/Makefile.inc')
-rw-r--r-- | src/target/firmware/Makefile.inc | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/src/target/firmware/Makefile.inc b/src/target/firmware/Makefile.inc index a130cd79..a4eeb7f6 100644 --- a/src/target/firmware/Makefile.inc +++ b/src/target/firmware/Makefile.inc @@ -1,6 +1,11 @@ + +#### TOOLCHAIN CONFIGURATION #### + CROSS_COMPILE?=arm-elf- + CC=gcc LD=ld +AR=ar SIZE=size OBJCOPY=objcopy @@ -22,3 +27,120 @@ CFLAGS += -g$(DEBUGF) ASFLAGS=-Wa,-adhlns=$(<:.S=.lst) $(INCLUDES) -D__ASSEMBLY__ LDFLAGS = -nostartfiles -nostdlib -nodefaultlibs --gc-sections #-Wl,-Map=$(TARGET).map,--cref + + +#### GLOBAL DATA #### + +ALL_OBJS= +ALL_DEPS= + +#### APPLICATION DATA #### + +ALL_APPS= + +ALL_APP_TARGETS=$(ALL_APPS) $(ALL_APPS:.elf=.bin) $(ALL_APPS:.elf=.map) $(ALL_APPS:.elf=.size) + +#### LIBRARY DATA #### + +ALL_LIB_ARS= + +ALL_LIB_TARGETS=$(ALL_LIB_ARS) + + +#### DEFAULT RULE #### + +.PHONY: default +default: all + + +#### APPLICATION RULES #### + +ALL_OBJS+=$(ANY_APP_OBJS) +ALL_DEPS+=$(ANY_APP_OBJS:.o=.P) + +# template for application rules +define APPLICATION_template + +$(1)_SRCS_REL=$$(patsubst %,$$($(1)_DIR)/%,$$($(1)_SRCS)) +$(1)_OBJS:=$$($(1)_SRCS_REL:.c=.o) +$(1)_OBJS:=$$($(1)_OBJS:.S=.o) + +$(1).elf $(1).map $(1).size: apps/$(1)/main.o $(ANY_APP_OBJS) $(ANY_APP_LIBS) + $(CROSS_COMPILE)$(LD) $(LDFLAGS) -T $(LDS) -Bstatic -Map $$(@:.elf=.map) -o $$@ --start-group $$^ --end-group + $(CROSS_COMPILE)$(SIZE) $$@ | tee $(1).size + +ALL_APPS+=$(1).elf + +ALL_OBJS+=$$($(1)_OBJS) apps/$(1)/main.o +ALL_DEPS+=$$($(1)_OBJS:.o=.P) apps/$(1)/main.P + +endef + +# define rules for all defined applications +$(foreach app,$(APPLICATIONS),$(eval $(call APPLICATION_template,$(app)))) + + +#### LIBRARY RULES #### + +# template for library rules +define LIBRARY_template + +$(1)_SRCS_REL=$$(patsubst %,$$($(1)_DIR)/%,$$($(1)_SRCS)) +$(1)_OBJS:=$$($(1)_SRCS_REL:.c=.o) +$(1)_OBJS:=$$($(1)_OBJS:.S=.o) + +$$($(1)_DIR)/lib$(1).a: $$($(1)_OBJS) + $(AR) cru $$($(1)_DIR)/lib$(1).a $$($(1)_OBJS) + +ALL_LIB_ARS+=$$($(1)_DIR)/lib$(1).a + +ALL_OBJS+=$$($(1)_OBJS) +ALL_DEPS+=$$($(1)_OBJS:.o=.P) + +endef + +# define rules for all defined libraries +$(foreach lbr,$(LIBRARIES),$(eval $(call LIBRARY_template,$(lbr)))) + + +#### TOPLEVEL RULES #### + +.PHONY: all +all: $(ALL_DEPS) $(ALL_APP_TARGETS) $(ALL_LIB_TARGETS) + +.PHONY: depend +depend: $(ALL_DEPS) + + +#### COMPILATION RULES #### + +%.P: %.c + @$(CROSS_COMPILE)$(CC) $(CFLAGS) -M -o $(*).d $(<) + @sed 's|\($*)\)\.o[ :]*|\1.o $@ : |g' < $*.d > $@; \ + rm -f $*.d; [ -s $@ ] || rm -f $@ + +%.P: %.S + @$(CROSS_COMPILE)$(CC) $(ASFLAGS) -M -o $(*).d $(<) + @sed 's|\($*)\)\.o[ :]*|\1.o $@ : |g' < $*.d > $@; \ + rm -f $*.d; [ -s $@ ] || rm -f $@ + +%.o: %.c + $(CROSS_COMPILE)$(CC) $(CFLAGS) -c -o $@ $^ + +%.o: %.S + $(CROSS_COMPILE)$(CC) $(ASFLAGS) -c -o $@ $^ + + +%.bin: %.elf + $(CROSS_COMPILE)objcopy --gap-fill=0xff -O binary $^ $@ + + +#### CLEANUP RULES #### + +clean: + rm -f $(ALL_APP_TARGETS) $(ALL_LIB_TARGETS) $(ALL_OBJS) $(ALL_DEPS) + + +#### DEPENDENCY LOAD #### + +-include $(ALL_DEPS) |