Files
BaS_gcc/Makefile
2013-11-01 06:29:14 +00:00

187 lines
5.2 KiB
Makefile

#
# Makefile for Firebee BaS
#
# This Makefile is meant for cross compiling the BaS with Vincent Riviere's cross compilers.
# If you want to compile native on an Atari (you will need at least GCC 4.6.3), set
# TCPREFIX to be empty.
# If you want to compile with the m68k-elf- toolchain, set TCPREFIX accordingly. Requires an extra
# installation, but allows source level debugging over BDM with a recent gdb (tested with 7.5),
# the m68k BDM tools from sourceforge (http://bdm.sourceforge.net) and a BDM pod (TBLCF and P&E tested).
# can be either "Y" or "N" (without quotes). "Y" for using the m68k-elf-, "N" for using the m68k-atari-mint
# toolchain
COMPILE_ELF=Y
ifeq (Y,$(COMPILE_ELF))
TCPREFIX=m68k-elf-
EXE=elf
FORMAT=elf32-m68k
else
TCPREFIX=m68k-atari-mint-
EXE=s19
FORMAT=srec
endif
CC=$(TCPREFIX)gcc
LD=$(TCPREFIX)ld
CPP=$(TCPREFIX)cpp
OBJCOPY=$(TCPREFIX)objcopy
AR=$(TCPREFIX)ar
RANLIB=$(TCPREFIX)ranlib
INCLUDE=-Iinclude -Imcdapi
CFLAGS=-mcpu=5474\
-Wall\
-g\
-Winline\
-O \
-fomit-frame-pointer\
-ffreestanding\
-fleading-underscore\
-Wa,--register-prefix-optional
SRCDIR=sources
MCDSRC=mcdapi
OBJDIR=objs
# Linker control file. The final $(LDCFILE) is intermediate only (preprocessed version of $(LDCSRC)
LDCFILE=bas.lk
LDRFILE=ram.lk
LDCSRC=bas.lk.in
LDCBSRC=basflash.lk.in
LDCBFS=bashflash.lk
# this Makefile can create the BaS to flash or an arbitrary ram address (for BDM debugging). See
# below for the definition of TARGET_ADDRESS
FLASH_EXEC=bas.m5484lite.$(EXE) bas.firebee.$(EXE)
RAM_EXEC=ram.m5484lite.$(EXE) ram.firebee.$(EXE)
BASFLASH_EXEC=basflash.m5484lite.$(EXE) basflash.firebee.$(EXE)
CSRCS= \
$(SRCDIR)/sysinit.c \
$(SRCDIR)/init_fpga.c \
$(SRCDIR)/fault_vectors.c \
$(SRCDIR)/interrupts.c \
$(SRCDIR)/bas_printf.c \
$(SRCDIR)/bas_string.c \
$(SRCDIR)/BaS.c \
$(SRCDIR)/cache.c \
$(SRCDIR)/mmc.c \
$(SRCDIR)/unicode.c \
$(SRCDIR)/ff.c \
$(SRCDIR)/sd_card.c \
$(SRCDIR)/wait.c \
$(SRCDIR)/s19reader.c \
$(SRCDIR)/flash.c \
$(SRCDIR)/dma.c \
$(SRCDIR)/xhdi_sd.c \
$(SRCDIR)/xhdi_interface.c \
$(SRCDIR)/pci.c \
$(SRCDIR)/dspi.c \
$(SRCDIR)/driver_vec.c
ASRCS= \
$(SRCDIR)/startcf.S \
$(SRCDIR)/mmu.S \
$(SRCDIR)/printf_helper.S \
$(SRCDIR)/exceptions.S \
$(SRCDIR)/supervisor.S \
$(SRCDIR)/illegal_instruction.S \
$(SRCDIR)/xhdi_vec.S
MCDSRCS=\
$(MCDSRC)/MCD_dmaApi.c \
$(MCDSRC)/MCD_tasks.c \
$(MCDSRC)/MCD_tasksInit.c
COBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.c,%.o,$(CSRCS)))
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
all: fls ram bfl lib
fls: $(FLASH_EXEC)
ram: $(RAM_EXEC)
bfl: $(BASFLASH_EXEC)
lib: $(LIBBAS)
.PHONY clean:
@ rm -f $(FLASH_EXEC) $(patsubst %.elf, %.s19, $(FLASH_EXEC)) \
$(RAM_EXEC) $(patsubst %.elf, %.s19, $(RAM_EXEC)) \
$(BASFLASH_EXEC) $(patsubst %.elf, %.s19, $(BASFLASH_EXEC)) $(OBJDIR)/basflash.o $(OBJDIR)/basflash_start.o \
$(OBJS) $(LIBBAS) \
bas.lk bas.map ram.lk ram.map basflash.lk basflash.map depend
bas.m5484l.$(EXE): MACHINE=MACHINE_M5484LITE
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
ram.firebee.$(EXE): MACHINE=MACHINE_FIREBEE
$(RAM_EXEC): CFLAGS += -D$(MACHINE)
$(RAM_EXEC): LDCFILE=ram.lk
$(RAM_EXEC): MAPFILE=ram.map
basflash.m5484l.$(EXE): MACHINE=MACHINE_M5484LITE
basflash.firebee.$(EXE): MACHINE=MACHINE_FIREBEE
$(BASFLASH_EXEC): CFLAGS += -D$(MACHINE)
$(BASFLASH_EXEC): LDCFILE=basflash.lk
$(BASFLASH_EXEC): MAPFILE=basflash.map
# 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
objcopy -I srec -O elf32-big --alt-machine-code 4 $@ $(basename $@).elf
endif
# the basflash (SD-card executable called from BaS) final link stage
$(BASFLASH_EXEC): $(OBJDIR)/basflash.o $(OBJDIR)/basflash_start.o $(LIBBAS) $(LDCBFL)
$(CPP) $(INCLUDE) -P -DFORMAT=$(FORMAT) -D$(MACHINE) $(LDCBSRC) -o $(LDCFILE)
$(LD) --oformat $(FORMAT) -Map $(MAPFILE) --cref -T $(LDCFILE) -L. -lbas -o $@
ifeq ($(COMPILE_ELF),Y)
$(OBJCOPY) -O srec $@ $(basename $@).s19
else
objcopy -I srec -O elf32-big --alt-machine-code 4 $@ $(basename $@).elf
endif
# (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)
$(CC) $(CFLAGS) $(INCLUDE) -M $(ASRCS) $(CSRCS) | sed -e 's/^\(.*\).o:/$(OBJDIR)\/\1.o:/' > depend
ifneq (clean,$(MAKECMDGOALS))
-include depend
endif
.PHONY: printvars
printvars:
@$(foreach V,$(.VARIABLES), $(if $(filter-out environment% default automatic, $(origin $V)),$(warning $V=$($V))))
ifeq (MACHINE_M5484LITE,$$(MACHINE))
MNAME=m5484lite
else ifeq (MACHINE_FIREBEE,$(MACHINE))
MNAME=firebee
endif