Makefile fixed to support m5484 LITE
This commit is contained in:
155
Makefile
155
Makefile
@@ -29,7 +29,7 @@ OBJCOPY=$(TCPREFIX)objcopy
|
|||||||
AR=$(TCPREFIX)ar
|
AR=$(TCPREFIX)ar
|
||||||
RANLIB=$(TCPREFIX)ranlib
|
RANLIB=$(TCPREFIX)ranlib
|
||||||
|
|
||||||
INCLUDE=-Iinclude -Imcdapi
|
INCLUDE=-Iinclude
|
||||||
CFLAGS=-mcpu=5474\
|
CFLAGS=-mcpu=5474\
|
||||||
-Wall\
|
-Wall\
|
||||||
-g\
|
-g\
|
||||||
@@ -41,8 +41,8 @@ CFLAGS=-mcpu=5474\
|
|||||||
-Wa,--register-prefix-optional
|
-Wa,--register-prefix-optional
|
||||||
|
|
||||||
SRCDIR=sources
|
SRCDIR=sources
|
||||||
MCDSRC=mcdapi
|
TRGTDIRS= ./firebee ./m5484lite
|
||||||
OBJDIR=objs
|
OBJDIRS=$(patsubst %, %/objs,$(TRGTDIRS))
|
||||||
|
|
||||||
# Linker control file. The final $(LDCFILE) is intermediate only (preprocessed version of $(LDCSRC)
|
# Linker control file. The final $(LDCFILE) is intermediate only (preprocessed version of $(LDCSRC)
|
||||||
LDCFILE=bas.lk
|
LDCFILE=bas.lk
|
||||||
@@ -53,9 +53,9 @@ LDCBFS=bashflash.lk
|
|||||||
|
|
||||||
# this Makefile can create the BaS to flash or an arbitrary ram address (for BDM debugging). See
|
# this Makefile can create the BaS to flash or an arbitrary ram address (for BDM debugging). See
|
||||||
# below for the definition of TARGET_ADDRESS
|
# below for the definition of TARGET_ADDRESS
|
||||||
FLASH_EXEC=bas.m5484lite.$(EXE) bas.firebee.$(EXE)
|
FLASH_EXEC=bas.$(EXE)
|
||||||
RAM_EXEC=ram.m5484lite.$(EXE) ram.firebee.$(EXE)
|
RAM_EXEC=ram.$(EXE)
|
||||||
BASFLASH_EXEC=basflash.m5484lite.$(EXE) basflash.firebee.$(EXE)
|
BASFLASH_EXEC=basflash.$(EXE)
|
||||||
|
|
||||||
CSRCS= \
|
CSRCS= \
|
||||||
$(SRCDIR)/sysinit.c \
|
$(SRCDIR)/sysinit.c \
|
||||||
@@ -78,7 +78,13 @@ CSRCS= \
|
|||||||
$(SRCDIR)/xhdi_interface.c \
|
$(SRCDIR)/xhdi_interface.c \
|
||||||
$(SRCDIR)/pci.c \
|
$(SRCDIR)/pci.c \
|
||||||
$(SRCDIR)/dspi.c \
|
$(SRCDIR)/dspi.c \
|
||||||
$(SRCDIR)/driver_vec.c
|
$(SRCDIR)/driver_vec.c \
|
||||||
|
$(SRCDIR)/MCD_dmaApi.c \
|
||||||
|
$(SRCDIR)/MCD_tasks.c \
|
||||||
|
$(SRCDIR)/MCD_tasksInit.c \
|
||||||
|
\
|
||||||
|
$(SRCDIR)/basflash.c \
|
||||||
|
$(SRCDIR)/basflash_start.c
|
||||||
|
|
||||||
ASRCS= \
|
ASRCS= \
|
||||||
$(SRCDIR)/startcf.S \
|
$(SRCDIR)/startcf.S \
|
||||||
@@ -89,86 +95,99 @@ ASRCS= \
|
|||||||
$(SRCDIR)/illegal_instruction.S \
|
$(SRCDIR)/illegal_instruction.S \
|
||||||
$(SRCDIR)/xhdi_vec.S
|
$(SRCDIR)/xhdi_vec.S
|
||||||
|
|
||||||
MCDSRCS=\
|
COBJS=$(patsubst $(SRCDIR)/%.o,%.o,$(patsubst %.c,%.o,$(CSRCS)))
|
||||||
$(MCDSRC)/MCD_dmaApi.c \
|
AOBJS=$(patsubst $(SRCDIR)/%.o,%.o,$(patsubst %.S,%.o,$(ASRCS)))
|
||||||
$(MCDSRC)/MCD_tasks.c \
|
|
||||||
$(MCDSRC)/MCD_tasksInit.c
|
|
||||||
|
|
||||||
COBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.c,%.o,$(CSRCS)))
|
OBJS=$(COBJS) $(AOBJS)
|
||||||
AOBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.S,%.o,$(ASRCS)))
|
|
||||||
MCDOBJS=$(patsubst $(MCDSRCS)/%.o,$(OBJDIR)/%.o,$(patsubst %.c,%.o,$(MCDSRCS)))
|
|
||||||
|
|
||||||
OBJS=$(COBJS) $(AOBJS) $(MCDOBJS)
|
|
||||||
LIBBAS=libbas.a
|
LIBBAS=libbas.a
|
||||||
|
|
||||||
|
LIBS=$(patsubst %,%/$(LIBBAS),$(TRGTDIRS))
|
||||||
|
|
||||||
all: fls ram bfl lib
|
all: fls ram bfl lib
|
||||||
fls: $(FLASH_EXEC)
|
fls: $(patsubst %,%/$(FLASH_EXEC),$(TRGTDIRS))
|
||||||
ram: $(RAM_EXEC)
|
ram: $(patsubst %,%/$(RAM_EXEC),$(TRGTDIRS))
|
||||||
bfl: $(BASFLASH_EXEC)
|
bfl: $(patsubst %,%/$(BASFLASH_EXEC),$(TRGTDIRS))
|
||||||
lib: $(LIBBAS)
|
lib: $(LIBS)
|
||||||
|
|
||||||
|
|
||||||
.PHONY clean:
|
.PHONY clean:
|
||||||
@ rm -f $(FLASH_EXEC) $(patsubst %.elf, %.s19, $(FLASH_EXEC)) \
|
for d in $(TRGTDIRS);\
|
||||||
$(RAM_EXEC) $(patsubst %.elf, %.s19, $(RAM_EXEC)) \
|
do rm -f $$d/$(FLASH_EXEC) $(patsubst %.elf, %.s19, $$d/$(FLASH_EXEC)) \
|
||||||
$(BASFLASH_EXEC) $(patsubst %.elf, %.s19, $(BASFLASH_EXEC)) $(OBJDIR)/basflash.o $(OBJDIR)/basflash_start.o \
|
$$d/$(RAM_EXEC) $(patsubst %.elf, %.s19, $$d/$(RAM_EXEC)) \
|
||||||
$(OBJS) $(LIBBAS) \
|
$d$/$(BASFLASH_EXEC) $(patsubst %.elf, %.s19, $$d/$(BASFLASH_EXEC)) $$d/$(OBJDIR)/basflash.o $$d/$(OBJDIR)/basflash_start.o \
|
||||||
bas.lk bas.map ram.lk ram.map basflash.lk basflash.map depend
|
$$d/objs/* $$d/$(LIBBAS) \
|
||||||
|
$$d/bas.lk $$d/bas.map $$d/ram.lk $$d/ram.map $$d/basflash.lk $$d/basflash.map depend; \
|
||||||
bas.m5484l.$(EXE): MACHINE=MACHINE_M5484LITE
|
done
|
||||||
bas.firebee.$(EXE): MACHINE=MACHINE_FIREBEE
|
|
||||||
$(FLASH_EXEC): CFLAGS += -D$(MACHINE)
|
|
||||||
$(FLASH_EXEC): LDCFILE=bas.lk
|
|
||||||
$(FLASH_EXEC): MAPFILE=bas.map
|
|
||||||
|
|
||||||
|
|
||||||
ram.m5484l.$(EXE): MACHINE=MACHINE_M5484LITE
|
# flags for targets
|
||||||
ram.firebee.$(EXE): MACHINE=MACHINE_FIREBEE
|
m5484lite/bas.$(EXE): MACHINE=MACHINE_M5484LITE
|
||||||
$(RAM_EXEC): CFLAGS += -D$(MACHINE)
|
firebee/bas.$(EXE): MACHINE=MACHINE_FIREBEE
|
||||||
$(RAM_EXEC): LDCFILE=ram.lk
|
m5484lite/ram.$(EXE): MACHINE=MACHINE_M5484LITE
|
||||||
$(RAM_EXEC): MAPFILE=ram.map
|
firebee/ram.$(EXE): MACHINE=MACHINE_FIREBEE
|
||||||
|
m5484lite/basflash.$(EXE): MACHINE=MACHINE_M5484LITE
|
||||||
|
firebee/basflash.$(EXE): MACHINE=MACHINE_FIREBEE
|
||||||
|
|
||||||
|
#
|
||||||
basflash.m5484l.$(EXE): MACHINE=MACHINE_M5484LITE
|
# generate pattern rules for different object files
|
||||||
basflash.firebee.$(EXE): MACHINE=MACHINE_FIREBEE
|
#
|
||||||
$(BASFLASH_EXEC): CFLAGS += -D$(MACHINE)
|
define CC_TEMPLATE
|
||||||
$(BASFLASH_EXEC): LDCFILE=basflash.lk
|
ifeq (firebee,$(1))
|
||||||
$(BASFLASH_EXEC): MAPFILE=basflash.map
|
MACHINE=MACHINE_FIREBEE
|
||||||
|
|
||||||
|
|
||||||
# the final link stage (BaS in RAM and BaS in flash)
|
|
||||||
$(FLASH_EXEC) $(RAM_EXEC): $(LIBBAS) $(LDCSRC)
|
|
||||||
$(CPP) $(INCLUDE) -P -DFORMAT=$(FORMAT) -D$(MACHINE) $(LDCSRC) -o $(LDCFILE)
|
|
||||||
$(LD) --oformat $(FORMAT) -Map $(MAPFILE) --cref -T $(LDCFILE) -o $@
|
|
||||||
ifeq ($(COMPILE_ELF),Y)
|
|
||||||
$(OBJCOPY) -O srec $@ $(basename $@).s19
|
|
||||||
else
|
else
|
||||||
objcopy -I srec -O elf32-big --alt-machine-code 4 $@ $(basename $@).elf
|
MACHINE=MACHINE_M5484LITE
|
||||||
|
endif
|
||||||
|
$(1)/objs/%.o:$(SRCDIR)/%.c
|
||||||
|
$(CC) $$(CFLAGS) -D$$(MACHINE) $(INCLUDE) -c $$< -o $$@
|
||||||
|
|
||||||
|
$(1)/objs/%.o:$(SRCDIR)/%.S
|
||||||
|
$(CC) $$(CFLAGS) -Wa,--bitwise-or -D$$(MACHINE) $(INCLUDE) -c $$< -o $$@
|
||||||
|
endef
|
||||||
|
$(foreach DIR,$(TRGTDIRS),$(eval $(call CC_TEMPLATE,$(DIR))))
|
||||||
|
|
||||||
|
#
|
||||||
|
# generate pattern rules for libraries
|
||||||
|
#
|
||||||
|
define AR_TEMPLATE
|
||||||
|
$(1)_OBJS=$(patsubst %,$(1)/objs/%,$(OBJS))
|
||||||
|
$(1)/$(LIBBAS): $$($(1)_OBJS)
|
||||||
|
$(AR) rv $$@ $$?
|
||||||
|
$(RANLIB) $$@
|
||||||
|
endef
|
||||||
|
$(foreach DIR,$(TRGTDIRS),$(eval $(call AR_TEMPLATE,$(DIR))))
|
||||||
|
|
||||||
|
#
|
||||||
|
# define pattern rules for binaries
|
||||||
|
#
|
||||||
|
define EX_TEMPLATE
|
||||||
|
$(1)_MAPFILE=$(1)/$$(basename $$FLASH_EXEC).map
|
||||||
|
$(1)/$$(FLASH_EXEC) $(1)/$$(RAM_EXEC): $(1)/$(LIBBAS) $(LDCSRC)
|
||||||
|
$(CPP) $(INCLUDE) -DOBJDIR=$(1)/objs -P -DFORMAT=$$(FORMAT) -D$$(MACHINE) $(LDCSRC) -o $(1)/$$(LDCFILE)
|
||||||
|
$(LD) --oformat $$(FORMAT) -Map $(1)_MAPFILE --cref -T $(1)/$$(LDCFILE) -o $$@
|
||||||
|
ifeq ($(COMPILE_ELF),Y)
|
||||||
|
$(OBJCOPY) -O srec $$@ $(basename $$@).s19
|
||||||
|
else
|
||||||
|
objcopy -I srec -O elf32big --alt-machine-code 4 $$@ $(basename $$@).elf
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# the basflash (SD-card executable called from BaS) final link stage
|
$(1)_MAPFILE_BFL=$(1)/$$(basename $$(BASFLASH_EXEC)).map
|
||||||
$(BASFLASH_EXEC): $(OBJDIR)/basflash.o $(OBJDIR)/basflash_start.o $(LIBBAS) $(LDCBFL)
|
$(1)/$$(BASFLASH_EXEC): $(1)/objs/basflash.o $(1)/objs/basflash_start.o $(1)/$(LIBBAS) $(LDCBFL)
|
||||||
$(CPP) $(INCLUDE) -P -DFORMAT=$(FORMAT) -D$(MACHINE) $(LDCBSRC) -o $(LDCFILE)
|
$(CPP) $(INCLUDE) -P -DOBJDIR=$(1)/objs -DFORMAT=$$(FORMAT) -D$$(MACHINE) $(LDCBSRC) -o $(1)/$$(LDCFILE)
|
||||||
$(LD) --oformat $(FORMAT) -Map $(MAPFILE) --cref -T $(LDCFILE) -L. -lbas -o $@
|
$(LD) --oformat $$(FORMAT) -Map $(1)_MAPFILE_BFL --cref -T $(1)/$$(LDCFILE) -L$(1) -lbas -o $$@
|
||||||
ifeq ($(COMPILE_ELF),Y)
|
ifeq ($(COMPILE_ELF),Y)
|
||||||
$(OBJCOPY) -O srec $@ $(basename $@).s19
|
$(OBJCOPY) -O srec $$@ $(basename $$@).s19
|
||||||
else
|
else
|
||||||
objcopy -I srec -O elf32-big --alt-machine-code 4 $@ $(basename $@).elf
|
objcopy -I srec -O elf32big --alt-machine-code 4 $$@ $(basename $$@).elf
|
||||||
endif
|
endif
|
||||||
|
endef
|
||||||
|
$(foreach DIR,$(TRGTDIRS),$(eval $(call EX_TEMPLATE,$(DIR))))
|
||||||
|
|
||||||
# (re)create library. Currently suboptimal because it rewrites the whole lib even if only a single object changed
|
|
||||||
$(LIBBAS): $(OBJS)
|
|
||||||
$(AR) rv $@ $(OBJS)
|
|
||||||
$(RANLIB) $@
|
|
||||||
|
|
||||||
$(OBJDIR)/%.o:$(SRCDIR)/%.c
|
|
||||||
$(CC) -c $(CFLAGS) $(INCLUDE) $< -o $@
|
|
||||||
|
|
||||||
$(OBJDIR)/%.o:$(SRCDIR)/%.S
|
|
||||||
$(CC) -c $(CFLAGS) -Wa,--bitwise-or $(INCLUDE) $< -o $@
|
|
||||||
|
|
||||||
depend: $(ASRCS) $(CSRCS)
|
depend: $(ASRCS) $(CSRCS)
|
||||||
$(CC) $(CFLAGS) $(INCLUDE) -M $(ASRCS) $(CSRCS) | sed -e 's/^\(.*\).o:/$(OBJDIR)\/\1.o:/' > depend
|
- rm -f depend
|
||||||
|
for d in $(TRGTDIRS);\
|
||||||
|
do $(CC) $(CFLAGS) $(INCLUDE) -M $(ASRCS) $(CSRCS) | sed -e "s#^\(.*\).o:#$$d/objs/\1.o:#" >> depend; \
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
ifneq (clean,$(MAKECMDGOALS))
|
ifneq (clean,$(MAKECMDGOALS))
|
||||||
|
|||||||
56
bas.lk.in
56
bas.lk.in
@@ -21,40 +21,40 @@ SECTIONS
|
|||||||
/* BaS in ROM */
|
/* BaS in ROM */
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
objs/startcf.o(.text) /* this one is the entry point so it must be the first */
|
OBJDIR/startcf.o(.text) /* this one is the entry point so it must be the first */
|
||||||
|
|
||||||
objs/sysinit.o(.text)
|
OBJDIR/sysinit.o(.text)
|
||||||
objs/fault_vectors.o(.text)
|
OBJDIR/fault_vectors.o(.text)
|
||||||
#ifdef MACHINE_FIREBEE
|
#ifdef MACHINE_FIREBEE
|
||||||
objs/init_fpga.o(.text)
|
OBJDIR/init_fpga.o(.text)
|
||||||
#endif /* MACHINE_FIREBEE */
|
#endif /* MACHINE_FIREBEE */
|
||||||
objs/wait.o(.text)
|
OBJDIR/wait.o(.text)
|
||||||
objs/exceptions.o(.text)
|
OBJDIR/exceptions.o(.text)
|
||||||
objs/illegal_instruction.o(.text)
|
OBJDIR/illegal_instruction.o(.text)
|
||||||
objs/supervisor.o(.text)
|
OBJDIR/supervisor.o(.text)
|
||||||
objs/mmu.o(.text)
|
OBJDIR/mmu.o(.text)
|
||||||
objs/pci.o(.text)
|
OBJDIR/pci.o(.text)
|
||||||
|
|
||||||
objs/BaS.o(.text)
|
OBJDIR/BaS.o(.text)
|
||||||
objs/wait.o(.text)
|
OBJDIR/wait.o(.text)
|
||||||
|
|
||||||
/* put other routines into the same segment (RAM) as BaS.o */
|
/* put other routines into the same segment (RAM) as BaS.o */
|
||||||
objs/unicode.o(.text)
|
OBJDIR/unicode.o(.text)
|
||||||
objs/mmc.o(.text)
|
OBJDIR/mmc.o(.text)
|
||||||
objs/ff.o(.text)
|
OBJDIR/ff.o(.text)
|
||||||
objs/sd_card.o(.text)
|
OBJDIR/sd_card.o(.text)
|
||||||
objs/s19reader.o(.text)
|
OBJDIR/s19reader.o(.text)
|
||||||
objs/bas_printf.o(.text)
|
OBJDIR/bas_printf.o(.text)
|
||||||
objs/bas_string.o(.text)
|
OBJDIR/bas_string.o(.text)
|
||||||
objs/printf_helper.o(.text)
|
OBJDIR/printf_helper.o(.text)
|
||||||
objs/cache.o(.text)
|
OBJDIR/cache.o(.text)
|
||||||
objs/dma.o(.text)
|
OBJDIR/dma.o(.text)
|
||||||
mcdapi/MCD_dmaApi.o(.text)
|
OBJDIR/MCD_dmaApi.o(.text)
|
||||||
mcdapi/MCD_tasks.o(.text)
|
OBJDIR/MCD_tasks.o(.text)
|
||||||
mcdapi/MCD_tasksInit.o(.text)
|
OBJDIR/MCD_tasksInit.o(.text)
|
||||||
objs/xhdi_sd.o(.text)
|
OBJDIR/xhdi_sd.o(.text)
|
||||||
objs/xhdi_interface.o(.text)
|
OBJDIR/xhdi_interface.o(.text)
|
||||||
objs/xhdi_vec.o(.text)
|
OBJDIR/xhdi_vec.o(.text)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if we compile to RAM anyway, there is no need to copy anything
|
* if we compile to RAM anyway, there is no need to copy anything
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
objs/basflash_start.o(.text)
|
OBJDIR/basflash_start.o(.text)
|
||||||
objs/basflash.o(.text)
|
OBJDIR/basflash.o(.text)
|
||||||
|
|
||||||
*(.data)
|
*(.data)
|
||||||
*(.bss)
|
*(.bss)
|
||||||
|
|||||||
Reference in New Issue
Block a user