TARGET := monitor BUILDDIR := build METAL_C_SRCFILES := $(wildcard *.c) METAL_ASM_SRCFILES := $(wildcard *.asm) METAL_RELFILES := $(METAL_ASM_SRCFILES:%.asm=$(BUILDDIR)/metal/%.rel) \ $(METAL_C_SRCFILES:%.c=$(BUILDDIR)/metal/%.rel) METAL_CC := sdcc METAL_AS := sdasz80 METAL_MAKEBIN := makebin METAL_FLAGS := -mz80 --no-std-crt0 --code-loc 0x0080 --data-loc 0x8000 METAL_CPPFLAGS := -I src -I $(BUILDDIR)/metal/generated --disable-warning 283 METAL_BIN_SIZE := 32768 METAL_RAM_SIZE := 32768 .DEFAULT_GOAL := metal .PHONY: all metal clean all: metal metal: $(BUILDDIR)/metal/$(TARGET).ihx $(BUILDDIR)/metal/$(TARGET).bin $(BUILDDIR)/metal/$(TARGET).prog.bin @awk -v rom_capacity=$(METAL_BIN_SIZE) -v ram_capacity=$(METAL_RAM_SIZE) '\ $$1 ~ /^_(CODE|HOME|GSINIT|GSFINAL|INITIALIZER|ITABLE[0-7]*)$$/ { rom += $$5 } \ $$1 ~ /^_(DATA|INITIALIZED|BSEG|BSS|HEAP|STACK)$$/ { ram += $$5 } \ END { \ printf "\nMemory usage:\n"; \ printf " ROM: %5u / %5u bytes (%5.1f%%), %5u bytes free\n", rom, rom_capacity, 100 * rom / rom_capacity, rom_capacity - rom; \ printf " RAM: %5u / %5u bytes (%5.1f%%), %5u bytes free\n", ram, ram_capacity, 100 * ram / ram_capacity, ram_capacity - ram; \ }' $(BUILDDIR)/metal/$(TARGET).map $(BUILDDIR)/metal/$(TARGET).ihx: $(METAL_RELFILES) @mkdir -p $(@D) $(METAL_CC) $(METAL_FLAGS) -o $@ $(METAL_RELFILES) $(BUILDDIR)/metal/$(TARGET).bin: $(BUILDDIR)/metal/$(TARGET).ihx $(METAL_MAKEBIN) -s $(METAL_BIN_SIZE) $< $@ $(BUILDDIR)/metal/$(TARGET).prog.bin: $(BUILDDIR)/metal/$(TARGET).ihx $(METAL_MAKEBIN) -p $< $@ $(BUILDDIR)/metal/%.rel: %.c @mkdir -p $(@D) $(METAL_CC) $(METAL_FLAGS) $(METAL_CPPFLAGS) -o $@ -c $< $(BUILDDIR)/metal/%.rel: %.asm @mkdir -p $(@D) $(METAL_AS) -plosgff -o $@ $< clean: rm -rf $(BUILDDIR) -include $(EMU_DEPFILES)