link objects in as archives so only what we need gets linked.

Add an option to build objects without space resevered for rom calls.
This commit is contained in:
Mariano Alvira 2010-03-02 14:32:34 -05:00
parent 4a61c10879
commit 8bd9f182d4
3 changed files with 19 additions and 39 deletions

View File

@ -13,7 +13,7 @@ include $(LIBMC1322X)/Makefile.lib
CFLAGS += -I$(MC1322X)/src -I.
ifdef USE_ROM_VARS
ifdef TARGET_ROM_VARS
START = $(MC1322X)/src/start-romvars.o
endif
@ -24,7 +24,7 @@ endif
ifndef ISR
ISR = $(MC1322X)/src/isr.o
endif
SRCOBJS += $(MC1322X)/src/default_lowlevel.o
SRCOBJS += $(MC1322X)/src/default_lowlevel.o $(ISR) $(START)
BOARDOBJS := $(addprefix $(OBJDIR)/,$(COBJS))
ARCH = arm
@ -49,15 +49,20 @@ endef
$(START): $(START:.o=.s)
$(CC) $(AFLAGS) -c -o $@ $<
$(MC1322X)/src/start-romvars.s: $(MC1322X)/src/start.S
$(CPP) $(AFLAGS) -DUSE_ROM_VARS -o $@ $<
$(CPP) $(AFLAGS) -DUSE_INTS -DUSE_ROM_VECTS -DUSE_ROM_VARS -o $@ $<
$(MC1322X)/src/start-romvects.s: $(MC1322X)/src/start.S
$(CPP) $(AFLAGS) -DUSE_INTS -DUSE_ROM_VECTS -o $@ $<
$(ISR): $(ISR:.o=.c)
$(CC) $(CFLAGS) $(ARM_FLAGS) -MMD $< -c -o $@
@$(FINALIZE_DEPENDENCY)
%_$(BOARD).elf: $(START) $(ISR) $(SRCOBJS) $(OBJDIR)/%.o $(BOARDOBJS) $(LINKERSCRIPT) $(LIBMC1322X)/libmc1322x.a
$(CC) $(LDFLAGS) $(AOBJS) \
$(filter %.o %.a,$+) -o $@
$(OBJDIR)/board.a: $(OBJDIR)/board.a($(OBJDIR)/$(COBJS))
$(MC1322X)/src/src.a: $(MC1322X)/src/src.a($(SRCOBJS))
%_$(BOARD).elf: $(OBJDIR)/%.o $(START) $(ISR) $(SRCOBJS) $(LINKERSCRIPT) $(LIBMC1322X)/libmc1322x.a $(OBJDIR)/board.a $(MC1322X)/src/src.a
$(CC) $(LDFLAGS) \
-L $(LIBMC1322X) -L $(MC1322X)/src -L $(OBJDIR) $< -o $@ $(START) $(MC1322X)/src/src.a $(LIBMC1322X)/libmc1322x.a $(OBJDIR)/board.a
%.srec: %.elf
$(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
@ -117,7 +122,7 @@ endif
all: $(OBJDIR)/board.h
for target in $(TARGETS); do make $$target\_$(BOARD).bin; done
for target in $(TARGETS_WITH_ROM_VARS); do make USE_ROM_VARS=1 $$target\_$(BOARD).bin; done
for target in $(TARGETS_WITH_ROM_VARS); do make TARGET_ROM_VARS=1 $$target\_$(BOARD).bin; done
allboards:
for board in $(BOARDS); do make BOARD=$$board all; done

View File

@ -57,7 +57,6 @@
.set base, .
.set _rom_data_init, 0x108d0
.globl _start
_start: b _begin
ldr pc, _undefined_instruction
@ -67,7 +66,8 @@ _start: b _begin
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
#ifdef USE_ROM_VARS
/* these vectors are used for rom patching */
.org 0x20
.code 16
@ -85,13 +85,13 @@ _RPTV_2_START:
.org 0xe0
_RPTV_3_START:
bx lr /* do nothing */
#ifdef USE_ROM_VARS
.org 0x120
ROM_var_start: .word 0
.org 0x7ff
ROM_var_end: .word 0
#endif
#endif /*USE_ROM_VARS*/
.code 32
.align
@ -129,6 +129,7 @@ _begin:
// mov sp,r1
b main
_undefined_instruction: .word undefined_instruction
_software_interrupt: .word software_interrupt
@ -177,29 +178,6 @@ _bss_end:
_start_armboot: .word main
/*
*************************************************************************
*
* CPU_init_critical registers
*
*************************************************************************
*/
cpu_init_crit:
# actually do nothing for now!
mov pc, lr
/*
*************************************************************************
*
* Interrupt handling
*
*************************************************************************
*/
/*
* exception handlers
*/
@ -233,4 +211,3 @@ fiq:
.globl reset_cpu
reset_cpu:
mov pc, r0

View File

@ -8,15 +8,13 @@ COBJS := tests.o
# all of the target programs to build
TARGETS := blink-red blink-green blink-blue blink-white blink-allio \
uart1-loopback \
nvm-read nvm-write romimg flasher \
tmr tmr-ints \
sleep \
rftest-rx rftest-tx \
printf
printf
# these targets are built with space reserved for variables needed by ROM services
# this space is initialized with a rom call to rom_data_init
TARGETS_WITH_ROM_VARS :=
TARGETS_WITH_ROM_VARS := nvm-read nvm-write romimg flasher rftest-rx rftest-tx
include $(MC1322X)/Makefile.include