Project

General

Profile

46 markw
BASE = zpu-elf
CC = $(BASE)-gcc
LD = $(BASE)-gcc
AS = $(BASE)-as
CP = $(BASE)-objcopy
DUMP = $(BASE)-objdump

309 markw
SOCKIT_CC = arm-linux-gnueabihf-gcc
SOCKIT_LD = arm-linux-gnueabihf-gcc

316 markw
SOCKIT_CFLAGS = -g -DLITTLE_ENDIAN -DSOCKIT -O2
309 markw
SOCKIT_CFLAGS+= -W -Wall
SOCKIT_LDFLAGS = -g

183 markw
HOST_CC = gcc
HOST_LD = gcc

HOST_CFLAGS = -g -DLINUX_BUILD -DLITTLE_ENDIAN -fno-builtin
HOST_CFLAGS += -W -Wall
HOST_LDFLAGS = -g

#HOST_CFLAGS += -m32
#HOST_LDFLAGS += -m32

HOST_CFLAGS += $(shell pkg-config --cflags ncurses)
HOST_LDFLAGS += $(shell pkg-config --libs ncurses)

46 markw
# we use mincrt0.s from here
STARTUP_DIR = .

# we fetch ROM prologue / epilogue from here
RTL_DIR = $(ZPUFLEXDIR)/RTL/


BUILD_DIR=zpu_obj

180 markw
AEON_LITE_DIR = aeon_lite
336 markw
PAPILIODUO_DIR = papilioduo
180 markw
DE1_DIR = de1
189 markw
DE1_5200_DIR = de1_5200
180 markw
CHAMELEON_DIR = chameleon
412 markw
ECLAIREXL_DIR = eclairexl
180 markw
MCC_DIR = mcc
287 markw
MCC_5200_DIR = mcc_5200
275 markw
MCCTV_DIR = mcctv
287 markw
MCCTV_5200_DIR = mcctv_5200
180 markw
MIST_DIR = mist
189 markw
MIST_5200_DIR = mist_5200
183 markw
LINUXSIM_DIR = linux
189 markw
LINUXSIM_5200_DIR = linux_5200
309 markw
SOCKIT_DIR = sockit
180 markw
AEON_LITE_BUILD_DIR = $(BUILD_DIR)/$(AEON_LITE_DIR)
336 markw
PAPILIODUO_BUILD_DIR = $(BUILD_DIR)/$(PAPILIODUO_DIR)
180 markw
DE1_BUILD_DIR = $(BUILD_DIR)/$(DE1_DIR)
309 markw
SOCKIT_BUILD_DIR = $(BUILD_DIR)/$(SOCKIT_DIR)
189 markw
DE1_5200_BUILD_DIR = $(BUILD_DIR)/$(DE1_5200_DIR)
180 markw
CHAMELEON_BUILD_DIR = $(BUILD_DIR)/$(CHAMELEON_DIR)
412 markw
ECLAIREXL_BUILD_DIR = $(BUILD_DIR)/$(ECLAIREXL_DIR)
180 markw
MCC_BUILD_DIR = $(BUILD_DIR)/$(MCC_DIR)
287 markw
MCC_5200_BUILD_DIR = $(BUILD_DIR)/$(MCC_5200_DIR)
275 markw
MCCTV_BUILD_DIR = $(BUILD_DIR)/$(MCCTV_DIR)
287 markw
MCCTV_5200_BUILD_DIR = $(BUILD_DIR)/$(MCCTV_5200_DIR)
180 markw
MIST_BUILD_DIR = $(BUILD_DIR)/$(MIST_DIR)
189 markw
MIST_5200_BUILD_DIR = $(BUILD_DIR)/$(MIST_5200_DIR)
183 markw
LINUXSIM_BUILD_DIR = $(BUILD_DIR)/$(LINUXSIM_DIR)
189 markw
LINUXSIM_5200_BUILD_DIR = $(BUILD_DIR)/$(LINUXSIM_5200_DIR)
180 markw
46 markw
#MINSTARTUP_SRC = mincrt0.s
MINSTARTUP_SRC = mycrt0.s
MINSTARTUP_OBJ = $(patsubst $(STARTUP_DIR)/%.s,$(BUILD_DIR)/%.o,$(MINSTARTUP_SRC))

309 markw
CORE_SRC = cartridge.c fileutils.c fileselector.c pokey/uart.c hexdump.c common/utils.c printf/printf.c
FAT_SRC = fat/pff_file.c fat/pff.c
COMMON_SRC = ${FAT_SRC} ${CORE_SRC}
180 markw
SDCARD_SRC = sd_direct/diskio_mmc.c sd_direct/spi.c sd_direct/mmc2.c
309 markw
A800_SRC_LIGHT = a800/freeze.c a800/mainmenu.c atari_drive_emulator.c libgcc_divmod.c
A800_SRC = ${A800_SRC_LIGHT} a800/joystick.c
189 markw
5200_SRC_LIGHT = 5200/freeze.c 5200/mainmenu.c
206 markw
5200_SRC = ${5200_SRC_LIGHT} 5200/joystick.c
395 markw
USB_SRC = usb/hid.c usb/hidparser.c usb/hub.c usb/timer.c usb/usb.c usb/debug.c
180 markw
116 markw
AEON_LITE_PRJ = AEON_LITE
189 markw
AEON_LITE_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(A800_SRC) de1/dirs.c
180 markw
AEON_LITE_OBJ = $(patsubst %.c,$(AEON_LITE_BUILD_DIR)/%.o,$(AEON_LITE_SRC))
116 markw
336 markw
PAPILIODUO_PRJ = PAPILIODUO
PAPILIODUO_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(A800_SRC) de1/dirs.c
PAPILIODUO_OBJ = $(patsubst %.c,$(PAPILIODUO_BUILD_DIR)/%.o,$(PAPILIODUO_SRC))

78 markw
DE1_PRJ = DE1
189 markw
DE1_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(A800_SRC) de1/dirs.c
180 markw
DE1_OBJ = $(patsubst %.c,$(DE1_BUILD_DIR)/%.o,$(DE1_SRC))
78 markw
189 markw
DE1_5200_PRJ = DE1_5200
238 markw
DE1_5200_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(5200_SRC) de1_5200/dirs.c
189 markw
DE1_5200_OBJ = $(patsubst %.c,$(DE1_5200_BUILD_DIR)/%.o,$(DE1_5200_SRC))

123 markw
CHAMELEON_PRJ = CHAMELEON
189 markw
CHAMELEON_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(A800_SRC) chameleon/dirs.c
180 markw
CHAMELEON_OBJ = $(patsubst %.c,$(CHAMELEON_BUILD_DIR)/%.o,$(CHAMELEON_SRC))
123 markw
412 markw
ECLAIREXL_PRJ = ECLAIREXL
ECLAIREXL_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(A800_SRC) $(USB_SRC) de1/dirs.c
ECLAIREXL_OBJ = $(patsubst %.c,$(ECLAIREXL_BUILD_DIR)/%.o,$(ECLAIREXL_SRC))

69 markw
MCC_PRJ = MCC216
275 markw
MCC_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(A800_SRC) $(USB_SRC) mcc/dirs.c
#MCC_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(A800_SRC) mcc/dirs.c
180 markw
MCC_OBJ = $(patsubst %.c,$(MCC_BUILD_DIR)/%.o,$(MCC_SRC))
46 markw
287 markw
MCC_5200_PRJ = MCC216_5200
MCC_5200_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(5200_SRC) $(USB_SRC) mcc_5200/dirs.c
MCC_5200_OBJ = $(patsubst %.c,$(MCC_5200_BUILD_DIR)/%.o,$(MCC_5200_SRC))

275 markw
MCCTV_PRJ = MCCTV
MCCTV_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(A800_SRC) $(USB_SRC) mcc/dirs.c
#MCCTV_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(A800_SRC) mcc/dirs.c
MCCTV_OBJ = $(patsubst %.c,$(MCCTV_BUILD_DIR)/%.o,$(MCCTV_SRC))

287 markw
MCCTV_5200_PRJ = MCCTV_5200
MCCTV_5200_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(5200_SRC) $(USB_SRC) mcc_5200/dirs.c
MCCTV_5200_OBJ = $(patsubst %.c,$(MCCTV_5200_BUILD_DIR)/%.o,$(MCCTV_5200_SRC))

69 markw
MIST_PRJ = MIST
215 markw
MIST_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(A800_SRC) mist/dirs.c
180 markw
MIST_OBJ = $(patsubst %.c,$(MIST_BUILD_DIR)/%.o,$(MIST_SRC))
69 markw
189 markw
MIST_5200_PRJ = MIST_5200
238 markw
MIST_5200_SRC = $(COMMON_SRC) $(SDCARD_SRC) $(5200_SRC) mist_5200/dirs.c
189 markw
MIST_5200_OBJ = $(patsubst %.c,$(MIST_5200_BUILD_DIR)/%.o,$(MIST_5200_SRC))

309 markw
SOCKIT_PRJ = SOCKIT
SOCKIT_SRC = $(CORE_SRC) a800/freeze.c a800/mainmenu.c atari_drive_emulator.c a800/joystick.c sockit/dirs.c sockit/linuxfile.c sockit/linuxdir.c sockit/memory.c
SOCKIT_OBJ = $(patsubst %.c,$(SOCKIT_BUILD_DIR)/%.o,$(SOCKIT_SRC))

46 markw
LINKMAP = ./standalone_simple.ld
275 markw
LINKMAP_LARGE = ./standalone_simple_large.ld
46 markw
183 markw
LINUXSIM_EXE = linuxsim
275 markw
LINUXSIM_SRC = $(COMMON_SRC) $(A800_SRC_LIGHT) $(USB_SRC) linux/main.c linux/mmc.c \
183 markw
sd_direct/diskio_mmc.c linux/dirs.c linux/linux_memory.c linux/curses_screen.c \
275 markw
linux/linux_helper.c linux/emulate_usb.c
183 markw
189 markw
LINUXSIM_5200_EXE = linuxsim_5200
LINUXSIM_5200_SRC = $(COMMON_SRC) $(5200_SRC_LIGHT) linux/main.c linux/mmc.c \
sd_direct/diskio_mmc.c linux/dirs.c linux/linux_memory.c linux/curses_screen.c \
linux/linux_helper.c

183 markw
LINUXSIM_OBJ = $(patsubst %.c,$(LINUXSIM_BUILD_DIR)/%.o,$(LINUXSIM_SRC))
189 markw
LINUXSIM_5200_OBJ = $(patsubst %.c,$(LINUXSIM_5200_BUILD_DIR)/%.o,$(LINUXSIM_5200_SRC))
183 markw
46 markw
# Commandline options for each tool.

#ZPUOPTS= -mno-poppcrel -mno-pushspadd -mno-callpcrel -mno-shortop -mno-neg # No-neg requires bugfixed toolchain
#Include everything -> need to include emulation rom...
ZPUOPTS =
336 markw
CFLAGS = -I. -Isd_direct -Iprintf -Ifat -Icommon -Isdram_common -c -g -Os $(ZPUOPTS) -DDISABLE_UART_RX -DMAX_RAM_SELECT=6
CFLAGS_AEON = -I. -Isd_direct -Iprintf -Ifat -Icommon -Iaeon_lite -c -g -Os $(ZPUOPTS) -DDISABLE_UART_RX -DMAX_RAM_SELECT=5
CFLAGS_PAPILIODUO = -I. -Isd_direct -Iprintf -Ifat -Icommon -Ipapilioduo -c -g -Os $(ZPUOPTS) -DDISABLE_UART_RX -DMAX_RAM_SELECT=3
46 markw
336 markw
SOCKIT_CFLAGS += -I. -Icommon -Isockit -Iprintf -DMAX_RAM_SELECT=6
309 markw
360 markw
HOST_CFLAGS += -I. -Isd_direct -Iprintf -Ifat -Icommon -Isdram_common -DDISABLE_UART_RX -DUSB -Iusb -DMAX_RAM_SELECT=6
183 markw
206 markw
LFLAGS = -nostartfiles -nostdlib -Wl,--relax -g -Os -Wl,-Map=out.map
LFLAGS_5200 = -nostartfiles -Wl,--relax -g -Os -Wl,-Map=out.map
46 markw
#LFLAGS = -nostartfiles -Os

275 markw
CFLAGS_USB = $(CFLAGS) -DUSB -Iusb
CFLAGS_USB2 = $(CFLAGS) -DUSB -DUSB2 -Iusb
206 markw
CFLAGS_5200 = $(CFLAGS) -DFIRMWARE_5200
287 markw
CFLAGS_5200_USB = $(CFLAGS) -DFIRMWARE_5200 -DUSB -Iusb
CFLAGS_5200_USB2 = $(CFLAGS) -DFIRMWARE_5200 -DUSB -DUSB2 -Iusb
206 markw
HOST_CFLAGS_5200 = $(HOST_CFLAGS) -DFIRMWARE_5200
46 markw
# Our target.
412 markw
all: eclairexl mcc mcctv mist de1 aeon_lite chameleon de1_5200 mist_5200 mcc_5200 mcctv_5200 sockit papilioduo
46 markw
69 markw
install:
cd ../common/romgen && ./createall && cd ../../firmware

116 markw
aeon_lite: $(BUILD_DIR) $(AEON_LITE_PRJ).bin $(AEON_LITE_PRJ).rpt

336 markw
papilioduo: $(BUILD_DIR) $(PAPILIODUO_PRJ).bin $(PAPILIODUO_PRJ).rpt

78 markw
de1: $(BUILD_DIR) $(DE1_PRJ).bin $(DE1_PRJ).rpt

189 markw
de1_5200: $(BUILD_DIR) $(DE1_5200_PRJ).bin $(DE1_5200_PRJ).rpt

123 markw
chameleon: $(BUILD_DIR) $(CHAMELEON_PRJ).bin $(CHAMELEON_PRJ).rpt

412 markw
eclairexl: $(BUILD_DIR) $(ECLAIREXL_PRJ).bin $(ECLAIREXL_PRJ).rpt

69 markw
mcc: $(BUILD_DIR) $(MCC_PRJ).bin $(MCC_PRJ).rpt

287 markw
mcc_5200: $(BUILD_DIR) $(MCC_5200_PRJ).bin $(MCC_5200_PRJ).rpt

275 markw
mcctv: $(BUILD_DIR) $(MCCTV_PRJ).bin $(MCCTV_PRJ).rpt

287 markw
mcctv_5200: $(BUILD_DIR) $(MCCTV_5200_PRJ).bin $(MCCTV_5200_PRJ).rpt

69 markw
mist: $(BUILD_DIR) $(MIST_PRJ).bin $(MIST_PRJ).rpt

189 markw
mist_5200: $(BUILD_DIR) $(MIST_5200_PRJ).bin $(MIST_5200_PRJ).rpt

309 markw
sockit: $(BUILD_DIR) $(SOCKIT_PRJ).elf

183 markw
.PHONY: linux
linux: $(BUILD_DIR) $(LINUXSIM_EXE)

189 markw
.PHONY: linux_5200
linux_5200: $(BUILD_DIR) $(LINUXSIM_5200_EXE)

46 markw
clean:
189 markw
rm -rf $(BUILD_DIR)/* *.hex *.elf *.map *.lst *.srec *.bin *.rpt $(LINUXSIM_EXE) $(LINUXSIM_5200_EXE)
46 markw

# Convert ELF binary to bin file.
%.bin: %.elf
$(CP) -O binary $< $@

%.rpt: %.elf
echo >$@ -n "End of code:\t"
$(DUMP) -x $< | grep >>$@ _romend
echo >>$@ -n "Start of BSS:\t"
$(DUMP) -x $< | grep >>$@ __bss_start__
echo >>$@ -n "End of BSS:\t"
$(DUMP) -x $< | grep >>$@ __bss_end__
cat $@

# Link - this produces an ELF binary.

116 markw
$(AEON_LITE_PRJ).elf: $(MINSTARTUP_OBJ) $(AEON_LITE_OBJ)
$(LD) $(LFLAGS) -T $(LINKMAP) -o $@ $+ $(LIBS)

336 markw
$(PAPILIODUO_PRJ).elf: $(MINSTARTUP_OBJ) $(PAPILIODUO_OBJ)
$(LD) $(LFLAGS) -T $(LINKMAP) -o $@ $+ $(LIBS)

78 markw
$(DE1_PRJ).elf: $(MINSTARTUP_OBJ) $(DE1_OBJ)
$(LD) $(LFLAGS) -T $(LINKMAP) -o $@ $+ $(LIBS)

189 markw
$(DE1_5200_PRJ).elf: $(MINSTARTUP_OBJ) $(DE1_5200_OBJ)
206 markw
$(LD) $(LFLAGS_5200) -T $(LINKMAP) -o $@ $+ $(LIBS)
189 markw
123 markw
$(CHAMELEON_PRJ).elf: $(MINSTARTUP_OBJ) $(CHAMELEON_OBJ)
$(LD) $(LFLAGS) -T $(LINKMAP) -o $@ $+ $(LIBS)

412 markw
$(ECLAIREXL_PRJ).elf: $(MINSTARTUP_OBJ) $(ECLAIREXL_OBJ)
$(LD) $(LFLAGS) -T $(LINKMAP_LARGE) -o $@ $+ $(LIBS)

69 markw
$(MCC_PRJ).elf: $(MINSTARTUP_OBJ) $(MCC_OBJ)
275 markw
$(LD) $(LFLAGS) -T $(LINKMAP_LARGE) -o $@ $+ $(LIBS)
# $(LD) $(LFLAGS) -T $(LINKMAP) -o $@ $+ $(LIBS)
46 markw
287 markw
$(MCC_5200_PRJ).elf: $(MINSTARTUP_OBJ) $(MCC_5200_OBJ)
$(LD) $(LFLAGS_5200) -T $(LINKMAP_LARGE) -o $@ $+ $(LIBS)

275 markw
$(MCCTV_PRJ).elf: $(MINSTARTUP_OBJ) $(MCCTV_OBJ)
$(LD) $(LFLAGS) -T $(LINKMAP_LARGE) -o $@ $+ $(LIBS)

287 markw
$(MCCTV_5200_PRJ).elf: $(MINSTARTUP_OBJ) $(MCCTV_5200_OBJ)
$(LD) $(LFLAGS_5200) -T $(LINKMAP_LARGE) -o $@ $+ $(LIBS)

69 markw
$(MIST_PRJ).elf: $(MINSTARTUP_OBJ) $(MIST_OBJ)
$(LD) $(LFLAGS) -T $(LINKMAP) -o $@ $+ $(LIBS)

189 markw
$(MIST_5200_PRJ).elf: $(MINSTARTUP_OBJ) $(MIST_5200_OBJ)
206 markw
$(LD) $(LFLAGS_5200) -T $(LINKMAP) -o $@ $+ $(LIBS)
189 markw
309 markw
$(SOCKIT_PRJ).elf: $(SOCKIT_OBJ)
$(SOCKIT_LD) $(SOCKIT_LDFLAGS) -o $@ $+

183 markw
$(LINUXSIM_EXE): $(LINUXSIM_OBJ)
$(HOST_LD) $(HOST_LDFLAGS) -o $@ $+

189 markw
$(LINUXSIM_5200_EXE): $(LINUXSIM_5200_OBJ)
$(HOST_LD) $(HOST_LDFLAGS) -o $@ $+

180 markw
$(AEON_LITE_BUILD_DIR)/%.o: %.c Makefile
46 markw
mkdir -p `dirname $@`
336 markw
$(CC) -I$(AEON_LITE_DIR) $(CFLAGS_AEON) -o $@ -c $<
46 markw
336 markw
$(PAPILIODUO_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
$(CC) -I$(PAPILIODUO_DIR) $(CFLAGS_PAPILIODUO) -o $@ -c $<

180 markw
$(CHAMELEON_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
$(CC) -I$(CHAMELEON_DIR) $(CFLAGS) -o $@ -c $<

$(DE1_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
$(CC) -I$(DE1_DIR) $(CFLAGS) -o $@ -c $<

189 markw
$(DE1_5200_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
206 markw
$(CC) -I$(DE1_5200_DIR) $(CFLAGS_5200) -o $@ -c $<
189 markw
412 markw
$(ECLAIREXL_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
$(CC) -I$(ECLAIREXL_DIR) $(CFLAGS_USB2) -o $@ -c $<

180 markw
$(MCC_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
275 markw
$(CC) -I$(MCC_DIR) $(CFLAGS_USB) -o $@ -c $<
180 markw
287 markw
$(MCC_5200_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
$(CC) -I$(MCC_5200_DIR) $(CFLAGS_5200_USB) -o $@ -c $<

275 markw
$(MCCTV_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
$(CC) -I$(MCCTV_DIR) $(CFLAGS_USB2) -o $@ -c $<

287 markw
$(MCCTV_5200_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
$(CC) -I$(MCCTV_5200_DIR) $(CFLAGS_5200_USB2) -o $@ -c $<

180 markw
$(MIST_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
$(CC) -I$(MIST_DIR) $(CFLAGS) -o $@ -c $<

189 markw
$(MIST_5200_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
206 markw
$(CC) -I$(MIST_5200_DIR) $(CFLAGS_5200) -o $@ -c $<
189 markw
309 markw
$(SOCKIT_BUILD_DIR)/%.o: %.c Makefile
mkdir -p `dirname $@`
$(SOCKIT_CC) -I$(SOCKIT_DIR) $(SOCKIT_CFLAGS) -o $@ -c $<

183 markw
$(LINUXSIM_BUILD_DIR)/%.o: %.c Makefile
@mkdir -p `dirname $@`
$(HOST_CC) -I$(LINUXSIM_DIR) $(HOST_CFLAGS) -o $@ -c $<

189 markw
$(LINUXSIM_5200_BUILD_DIR)/%.o: %.c Makefile
@mkdir -p `dirname $@`
206 markw
$(HOST_CC) -I$(LINUXSIM_DIR) $(HOST_CFLAGS_5200) -o $@ -c $<
189 markw
46 markw
$(BUILD_DIR)/%.o: %.s
$(AS) -o $@ $<

$(BUILD_DIR)/%.o: $(STARTUP_DIR)/%.s
$(AS) -o $@ $<

$(BUILD_DIR):
mkdir $(BUILD_DIR)