TARGET = toolbox TARGET_RAM = $(TARGET)_ram TARGET_ROM = $(TARGET)_rom UNIT = F256K SRCS_BASE = boot.c \ log.c \ memory.c \ proc.c \ ring_buffer.c \ simpleio.c \ sys_general.c \ timers.c \ toolbox.c \ utilities.c \ dev/block.c \ dev/channel.c \ dev/console.c \ dev/fsys.c \ dev/sprites.c \ dev/tiles.c \ dev/txt_screen.c \ dev/rtc.c \ dev/uart.c \ snd/codec_c256.c \ snd/psg.c \ snd/sid.c \ fatfs/ff.c \ fatfs/ffsystem.c \ fatfs/ffunicode.c SRCS_BASE_F256 = cartridge.c \ dev/txt_f256.c \ dev/kbd_f256.c \ dev/indicators_c256.c \ dev/interrupts_f256.c \ dev/sdc_f256.c \ dev/iec.c \ fatfs/toolbox_bdev.c \ C256/extras.s \ C256/f256-cstartup.s \ C256/iecll.s \ C256/interrupts.s \ C256/io_stubs.c \ C256/jumptable.s ifeq ($(UNIT),F256) TOOLCHAIN = 65816 SRCS_FOR_UNIT = $(SRCS_BASE_F256) dev/kbd_f256jr.c CFLAGS_FOR_UNIT = -DMODEL=2 -DCPU=255 --target=f256 LDFLAGS_FOR_UNIT_ROM = src/C256/f256-flash.scm --cstartup=f256 LDFLAGS_FOR_UNIT_RAM = src/C256/f256-ld_lc.scm --cstartup=f256 else ifeq ($(UNIT),F256JR2) TOOLCHAIN = 65816 SRCS_FOR_UNIT = $(SRCS_BASE_F256) dev/kbd_f256jr.c CFLAGS_FOR_UNIT = -DMODEL=35 -DCPU=255 --target=f256 LDFLAGS_FOR_UNIT_ROM = src/C256/f256k2-flash.scm --cstartup=f256 LDFLAGS_FOR_UNIT_RAM = src/C256/f256-ld_lc.scm --cstartup=f256 else ifeq ($(UNIT),F256K) TOOLCHAIN = 65816 SRCS_FOR_UNIT = $(SRCS_BASE_F256) dev/kbd_f256k.c CFLAGS_FOR_UNIT = -DMODEL=18 -DCPU=255 --target=f256 LDFLAGS_FOR_UNIT_ROM = src/C256/f256-flash.scm --cstartup=f256 LDFLAGS_FOR_UNIT_RAM = src/C256/f256-ld_lc.scm --cstartup=f256 else ifeq ($(UNIT),F256K2) TOOLCHAIN = 65816 SRCS_FOR_UNIT = $(SRCS_BASE_F256) dev/kbd_f256k.c CFLAGS_FOR_UNIT = -DMODEL=17 -DCPU=255 --target=f256 LDFLAGS_FOR_UNIT_ROM = src/C256/f256k2-flash.scm --cstartup=f256 LDFLAGS_FOR_UNIT_RAM = src/C256/f256-ld_lc.scm --cstartup=f256 else $(error "Unrecognized UNIT: $(UNIT)") endif ifeq ($(TOOLCHAIN),65816) ifeq ($(strip $(CALYPSI_65816_ROOT)),) $(error "Please set CALYPSI_65816_ROOT in your environment!") endif CC = cc65816 AS = as65816 LD = ln65816 TOOLCHAIN_ROOT = $(CALYPSI_65816_ROOT) else $(error "Unrecognized TOOLCHAIN: $(TOOLCHAIN)") endif SRC_DIR = src SRC_FILES = $(addprefix $(SRC_DIR)/, $(SRCS_BASE) $(SRCS_FOR_UNIT)) INCLUDE_DIRS = $(SRC_DIR) $(SRC_DIR)/include $(TOOLCHAIN_ROOT)/include INCLUDES = $(foreach dir,$(INCLUDE_DIRS),-I$(dir)) OBJ_DIR = obj OBJ_FILES = $(addprefix $(OBJ_DIR)/, $(addsuffix .o, $(SRC_FILES))) DEPS_DIR = $(OBJ_DIR) DEPENDS = $(OBJ_FILES:.o=.d) CFLAGS = --code-model=large --data-model=large --list-file=$@.lst $(INCLUDES) $(CFLAGS_FOR_UNIT) AFLAGS = --code-model=large --data-model=large $(INCLUDES) LDFLAGS_FOR_ROM = --rom-code $(LDFLAGS_FOR_UNIT_ROM) LDFLAGS_FOR_RAM = $(LDFLAGS_FOR_UNIT_RAM) .PHONY: clean all: rom ram rom: $(TARGET_ROM).s37 ram: $(TARGET_RAM).s37 clean: rm -f *.s37 rm -f *.lst rm -rf $(OBJ_DIR) $(TARGET_ROM).s37: $(OBJ_FILES) $(LD) -o $@ $^ $(LDFLAGS_FOR_ROM) --output-format=s37 --list-file=$@.lst $(TARGET_RAM).s37: $(OBJ_FILES) $(LD) -o $@ $^ $(LDFLAGS_FOR_RAM) --output-format=s37 --list-file=$@.lst $(OBJ_DIR)/%.c.o: %.c @mkdir -p $(dir $@) $(CC) -MMD -MP -MF$(DEPS_DIR)/$*.d $(CFLAGS) -o $@ $< $(OBJ_DIR)/%.s.o: %.s @mkdir -p $(dir $@) $(AS) $(AFLAGS) -o $@ $< -include $(DEPENDS)