# 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)))) # Directory where the .lst files are located LISTFILE_DIRECTORY=$(Z88DK_LIBSRC)/classic TARGET_DIRECTORY=$(Z88DK_LIBSRC)/target # Directory that the .lib files should be placed in, ends in / OUTPUT_DIRECTORY := $(Z88DK_LIBSRC) 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 ZX0 := $(Q)z88dk-zx0 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),classic/stdio) mkdir -p $$@/conio $$@/ansi/generic $$@/ansi/gencon $$@/zsock $$@/inkey else mkdir -p $$@/8080 $$@/cimpl $$@/z80 $$@/c/sccz80 $$@/c/smallc 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 _DEVELOPMENT-,,$(subst /,-,$(1))): $(5) $(Q)mkdir -p $(1)/obj $(Q)$(ASSEMBLER) -d -O=$(1)/obj/$(2)/x -I$(Z88DK_LIBSRC)/classic $(3) -D__CLASSIC $(4) $(Q)touch $$@ endef # Build target # Arg1: sub-library # Arg2: cpu flavor # Arg3: target # Arg4: z80asm flags # Arg5: Glob # Arg6: Glob expanded define buildtargetasm $(1)/obj/$(subst /,-,$(1))-$(3): $(6) @mkdir -p $(1)/obj/$(3) $(Q)$(ASSEMBLER) -d -O=$(1)/obj/$(3)/x -m4=-I$(Z88DK_LIB)/../src/m4 -m4=-I$(Z88DK_LIBSRC)/target/$(3) -I$(Z88DK_LIB) -I$(Z88DK_LIB)/target/$(3)/def -Itarget/$(3) -I$(1)/obj/$(3) -I$(Z88DK_LIBSRC)/classic $(4) -I$(Z88DK_LIB) -D__CLASSIC -DFOR$(3) $(5) $(Q)touch $$@ endef # Build target # Arg1: sub-library # Arg2: target # Arg3: CFLAGS define buildtargetc $(1)/obj/$(2)/%.o: %.c @mkdir -p $(1)/obj/$(2)/$$(dir $$^) $(ZCC) +$(2) $(3) -c -o $$@ $$^ 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/8085/8085/%.o: 8085/%.asm $(Q)$(ASSEMBLER) -I../ -I$(Z88DK_LIB) -m8085 -D__CLASSIC $(AFLAGS) -Oobj/8085/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 $@ $^