From 7704756b72b98d021f9ac51715aaf8beb53346cd Mon Sep 17 00:00:00 2001 From: gered Date: Sun, 2 Feb 2025 15:32:05 -0500 Subject: [PATCH] add new Makefile i am really not a big fan of the current "Makefile in each directory" build system in this project. sorry. i don't have any C256 devices, so i've not kept anything for them in this new Makefile. to the best of my knowledge, you can't get any of these devices anymore anyway, so i don't particular care. sorry again. --- Makefile | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4b1cf55 --- /dev/null +++ b/Makefile @@ -0,0 +1,135 @@ +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) + +