# Allow us to switch assembler/compiler flags relatively easily Z88DK_LIB := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/../lib/ Z88DK_INCLUDE := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/../include/ Z88DK_LIBSRC := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/../libsrc/ # Directory where the .lst files are located LISTFILE_DIRECTORY=$(Z88DK_LIBSRC) TARGET_DIRECTORY=$(LISTFILE_DIRECTORY)/target # Directory that the .lib files should be placed in, ends in / OUTPUT_DIRECTORY := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) # Make sure there are no double-slashes so that $(subst ...) works NEWLIB_DIRECTORY := $(subst //,/,$(OUTPUT_DIRECTORY)/_DEVELOPMENT/) LIBLINKER = z88dk-z80asm -d -I$(ZCCCFG)/../ LIBLINKER2 = z88dk-z80asm -I$(ZCCCFG)/../ ASSEMBLER = z88dk-z80asm CFLAGS = -O2 -vn -c AFLAGS = # Some targets need special flags TARGET_z80_CFLAGS = -clib=classic Q ?= @ ZCC := $(Q)zcc MAKE := $(Q)$(MAKE) --no-print-directory RM := $(Q)$(RM) # Arg1: sub-library # Arg2: cpu flavor # Arg3: zcc target # Arg4: zcc flags # Arg5: assembler flags define buildbit $(1)/obj/$(2): ifeq ($(1),stdio) @mkdir -p $$@/conio $$@/ansi/generic $$@/ansi/gencon $$@/zsock $$@/inkey else @mkdir -p $$@/8080 $$@/cimpl $$@/z80 $$@/c/sccz80 endif $(1)/obj/$(2)/%.o: $(1)/%.c | $(1)/obj/$(2) $(ZCC) +$(3) $(4) $$(CFLAGS) -I$(1) -c -o $$@ $$< $(1)/obj/$(2)/%.o: $(1)/%.asm | $(1)/obj/$(2) $(Q)$(ASSEMBLER) $(5) -I$(Z88DK_LIB) -I$(1) $(AFLAGS) -D__CLASSIC -o=$$@ $$< #$(1)/obj/$(2)/%.o: $(1)/%.asm | $(1)/obj/$(2) # $(ZCC) +$(3) $(4) $(CFLAGS) -Ca-D__CLASSIC -c -o $$@ $$< endef # Build newlib # Arg1: sub-library # Arg2: cpu flavor # Arg3: z80asm flags # Arg4: Glob # Arg5: Glob expanded define buildnew $(1)/obj/newlib-$(2)-$(subst /,-,$(1)): $(5) @mkdir -p $(1)/obj $(Q)$(ASSEMBLER) -d -O=$(1)/obj/$(2)/x -I$(Z88DK_LIBSRC) $(3) -D__CLASSIC $(4) $(Q)touch $$@ endef obj/z80/%.o: %.c $(ZCC) +test -mz80 $(CFLAGS) -o $@ $^ obj/z80/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -mz80 -D__CLASSIC $(AFLAGS) -Oobj/z80 $^ obj/ez80_z80/%.o: %.c $(ZCC) +test -clib=ez80_z80 $(CFLAGS) -o $@ $^ obj/ez80_z80/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -mez80_z80 -D__CLASSIC $(AFLAGS) -Oobj/ez80_z80 $^ obj/z180/%.o: %.c $(ZCC) +test -clib=z180 $(CFLAGS) -o $@ $^ obj/z180/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -mz180 -D__CLASSIC $(AFLAGS) -Oobj/z180 $^ obj/z80n/%.o: %.c $(ZCC) +test -clib=z80n -custom-copt-rules=$(Z88DK_LIB)/z80n_rules.1 $(CFLAGS) -o $@ $^ obj/z80n/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -mz80n -D__CLASSIC $(AFLAGS) -Oobj/z80n $^ obj/ixiy/%.o: %.c $(ZCC) +test -mz80 -Ca-IXIY -Cl-IXIY $(CFLAGS) -o $@ $^ obj/ixiy/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -IXIY -mz80 -D__CLASSIC $(AFLAGS) -Oobj/ixiy $^ obj/gbz80/%.o: %.c $(ZCC) +test -clib=gbz80 -D__GBZ80__ $(CFLAGS) -o $@ $^ obj/gbz80/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -mgbz80 -D__CLASSIC $(AFLAGS) -Oobj/gbz80 $^ obj/8080/%.o: %.c $(ZCC) +test -clib=8080 $(CFLAGS) -o $@ $^ obj/8080/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -m8080 -D__CLASSIC $(AFLAGS) -Oobj/8080 $^ obj/8080/8080/%.o: 8080/%.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -m8080 -D__CLASSIC $(AFLAGS) -Oobj/8080/8080 $^ obj/8085/%.o: %.c $(ZCC) +test -clib=8085 $(CFLAGS) -o $@ $^ obj/8085/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -m8085 -D__CLASSIC $(AFLAGS) -Oobj/8085 $^ obj/r2ka/%.o: %.c $(ZCC) +test -clib=rabbit $(CFLAGS) -o $@ $^ obj/r2ka/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -mr2ka -D__CLASSIC $(AFLAGS) -Oobj/r2ka $^ obj/r4k/%.o: %.c $(ZCC) +test -clib=rabbit4k $(CFLAGS) -o $@ $^ obj/r4k/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -mr4k -D__CLASSIC $(AFLAGS) -Oobj/r4k $^ obj/kc160/%.o: %.c $(ZCC) +test -clib=kc160 $(CFLAGS) -o $@ $^ obj/kc160/%.o: %.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -I$(Z88DK_LIBSRC) -mkc160 -D__CLASSIC $(AFLAGS) -Oobj/kc160 $^ obj/$(TARGET)/%.o: %.c $(ZCC) +$(TARGET) $(CFLAGS) $(TARGET_$(TARGET)_CFLAGS) -o $@ $^ obj/$(TARGET)/%.o: %.asm $(ZCC) +$(TARGET) $(CFLAGS) $(TARGET_$(TARGET)_CFLAGS) -o $@ $^