-
-# top-level makefile for the regression tests
+# top-level Makefile for the regression tests
# You can comment this special target when you debug the regression tests.
# Then, make will give you more progress reports.
.SILENT:
ifneq ($(shell echo),)
- CMD_EXE := 1
+ CMD_EXE = 1
endif
ifdef CMD_EXE
- EXE := .exe
- MKDIR = mkdir $(subst /,\,$1)
RMDIR = -rmdir /s /q $(subst /,\,$1)
else
- EXE :=
- MKDIR = mkdir $1
RMDIR = $(RM) -r $1
endif
-WORKDIR := ../testwrk
-
-CC := gcc
+WORKDIR = ../testwrk
.PHONY: all dotests continue mostlyclean clean
all: dotests
-$(WORKDIR):
- $(call MKDIR,$(WORKDIR))
-
-$(WORKDIR)/bdiff$(EXE): bdiff.c | $(WORKDIR)
- $(CC) -O2 -o $@ $<
-
.NOTPARALLEL:
dotests: mostlyclean continue
-continue: $(WORKDIR)/bdiff$(EXE)
+continue:
@$(MAKE) -C assembler all
@$(MAKE) -C disassembler all
@$(MAKE) -C val all
@$(MAKE) -C misc all
mostlyclean:
+ @$(MAKE) -C assembler clean
+ @$(MAKE) -C disassembler clean
@$(MAKE) -C val clean
@$(MAKE) -C ref clean
@$(MAKE) -C err clean
+++ /dev/null
-*.o
-*.bin
-*.lst
+# Makefile for the assembler regression tests
-# makefile for the assembler regression tests
+ifneq ($(shell echo),)
+ CMD_EXE = 1
+endif
-BINDIR = ../../bin
-WORKDIR := ../../testwrk
+ifdef CMD_EXE
+ EXE = .exe
+ MKDIR = mkdir $(subst /,\,$1)
+ RMDIR = -rmdir /s /q $(subst /,\,$1)
+ DEL = del /f $(subst /,\,$1)
+else
+ EXE =
+ MKDIR = mkdir -p $1
+ RMDIR = $(RM) -r $1
+ DEL = $(RM) $1
+endif
-BASE_TARGETS = 6502 6502x 65sc02 65c02
-BASE_TARGETS += 4510 huc6280
+CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
-OPCODE_TARGETS = $(BASE_TARGETS)
-CPUDETECT_TARGETS = $(BASE_TARGETS)
+WORKDIR = ../../testwrk/asm
-CPUDETECT_TARGETS += 65816
+DIFF = $(WORKDIR)/bdiff$(EXE)
-# default target defined later
-all:
+CC = gcc
+CFLAGS = -O2
-# generate opcode targets and expand target list
-define opcode
-OPCODE_TARGETLIST += $$(WORKDIR)/$(1)-opcodes.bin
-$$(WORKDIR)/$(1)-opcodes.bin: $(1)-opcodes.s
- @$$(BINDIR)/cl65 --cpu $(1) -t none -l $$(WORKDIR)/$(1)-opcodes.lst --obj-path $$(WORKDIR) -o $$@ $$<
- @diff -q $(1)-opcodes.ref $$@ || (cat $$(WORKDIR)/$(1)-opcodes.lst ; exit 1)
- @echo ca65 --cpu $(1) opcodes ok
- @rm -f $(1)-opcodes.o #workaround for #168
-endef
-$(foreach target,$(OPCODE_TARGETS),$(eval $(call opcode,$(target))))
+.PHONY: all clean
-# generate cpudetect targets and expand target list
-define cpudetect
-CPUDETECT_TARGETLIST += $$(WORKDIR)/$(1)-cpudetect.bin
-$$(WORKDIR)/$(1)-cpudetect.bin: cpudetect.s
- @$$(BINDIR)/cl65 --cpu $(1) -t none -l $$(WORKDIR)/$(1)-cpudetect.lst --obj-path $$(WORKDIR) -o $$@ $$<
- @diff -q $(1)-cpudetect.ref $$@ || (cat $$(WORKDIR)/$(1)-cpudetect.lst ; exit 1)
- @echo ca65 --cpu $(1) cpudetect ok
- @rm -f cpudetect.o #workaround for #168
-endef
-$(foreach target,$(CPUDETECT_TARGETS),$(eval $(call cpudetect,$(target))))
+OPCODE_REFS := $(wildcard *-opcodes.ref)
+OPCODE_CPUS = $(foreach ref,$(OPCODE_REFS),$(ref:%-opcodes.ref=%))
+OPCODE_BINS = $(foreach cpu,$(OPCODE_CPUS),$(WORKDIR)/$(cpu)-opcodes.bin)
-# now that all targets have been generated, get to the manual ones
-all: $(OPCODE_TARGETLIST) $(CPUDETECT_TARGETLIST)
- @#
+CPUDETECT_REFS := $(wildcard *-cpudetect.ref)
+CPUDETECT_CPUS = $(foreach ref,$(CPUDETECT_REFS),$(ref:%-cpudetect.ref=%))
+CPUDETECT_BINS = $(foreach cpu,$(CPUDETECT_CPUS),$(WORKDIR)/$(cpu)-cpudetect.bin)
-.PHONY: all $(OPCODE_TARGETLIST) $(CPUDETECT_TARGETLIST)
+all: $(OPCODE_BINS) $(CPUDETECT_BINS)
+$(WORKDIR):
+ $(call MKDIR,$(WORKDIR))
+
+$(DIFF): ../bdiff.c | $(WORKDIR)
+ $(CC) $(CFLAGS) -o $@ $<
+
+define OPCODE_template
+
+$(WORKDIR)/$1-opcodes.bin: $1-opcodes.s $(DIFF)
+ $(CL65) --cpu $1 -t none -l $(WORKDIR)/$1-opcodes.lst -o $$@ $$<
+ $(DIFF) $$@ $1-opcodes.ref
+
+endef # OPCODE_template
+
+$(foreach cpu,$(OPCODE_CPUS),$(eval $(call OPCODE_template,$(cpu))))
+
+define CPUDETECT_template
+
+$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $(DIFF)
+ $(CL65) --cpu $1 -t none -l $(WORKDIR)/$1-cpudetect.lst -o $$@ $$<
+ $(DIFF) $$@ $1-cpudetect.ref
+
+endef # CPUDETECT_template
+
+$(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu))))
+
+clean:
+ @$(call RMDIR,$(WORKDIR))
+ @$(call DEL,$(OPCODE_REFS:.ref=.o) cpudetect.o)
+# Makefile for the disassembler regression tests
-# makefile for the disassembler regression tests
+ifneq ($(shell echo),)
+ CMD_EXE = 1
+endif
-BINDIR = ../../bin
-WORKDIR := ../../testwrk
+ifdef CMD_EXE
+ EXE = .exe
+ MKDIR = mkdir $(subst /,\,$1)
+ RMDIR = -rmdir /s /q $(subst /,\,$1)
+ DEL = del /f $(subst /,\,$1)
+else
+ EXE =
+ MKDIR = mkdir -p $1
+ RMDIR = $(RM) -r $1
+ DEL = $(RM) $1
+endif
-#BASE_TARGETS = 6502 6502x 65sc02 65c02
-#BASE_TARGETS += 4510 huc6280
-BASE_TARGETS = 4510
+CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
+DA65 := $(if $(wildcard ../../bin/da65*),../../bin/da65,da65)
+
+WORKDIR = ../../testwrk/dasm
+
+DIFF = $(WORKDIR)/bdiff$(EXE)
+
+CC = gcc
+CFLAGS = -O2
START = --start-addr 0x8000
-DISASS_TARGETS = $(BASE_TARGETS)
+.PHONY: all clean
+
+SOURCES := $(wildcard *.s)
+CPUS = $(foreach src,$(SOURCES),$(src:%-disass.s=%))
+BINS = $(foreach cpu,$(CPUS),$(WORKDIR)/$(cpu)-reass.bin)
# default target defined later
-all:
+all: $(BINS)
+
+$(WORKDIR):
+ $(call MKDIR,$(WORKDIR))
+
+$(DIFF): ../bdiff.c | $(WORKDIR)
+ $(CC) $(CFLAGS) -o $@ $<
-# generate opcode targets and expand target list
-define disass
-DISASS_TARGETLIST += $$(WORKDIR)/$(1)-reass.bin $$(WORKDIR)/$(1)-reass.s $$(WORKDIR)/$(1)-disass.bin
+define DISASS_template
-$$(WORKDIR)/$(1)-disass.bin: $(1)-disass.s
- @$$(BINDIR)/cl65 --cpu $(1) -t none $(START) --obj-path $$(WORKDIR) -o $$@ $$<
- @rm -f $(1)-disass.o #workaround for #168
+$(WORKDIR)/$1-disass.bin: $1-disass.s | $(WORKDIR)
+ $(CL65) --cpu $1 -t none $(START) -o $$@ $$<
-$$(WORKDIR)/$(1)-reass.s: $$(WORKDIR)/$(1)-disass.bin
- @$$(BINDIR)/da65 --cpu $(1) $(START) -o $$@ $$<
+$(WORKDIR)/$1-reass.s: $(WORKDIR)/$1-disass.bin
+ $(DA65) --cpu $1 $(START) -o $$@ $$<
-$$(WORKDIR)/$(1)-reass.bin: $$(WORKDIR)/$(1)-reass.s
- @$$(BINDIR)/cl65 --cpu $(1) -t none $(START) --obj-path $$(WORKDIR) -o $$@ $$<
- @rm -f $(1)-reass.o #workaround for #168
- @cmp $$@ $$(WORKDIR)/$(1)-disass.bin
- @echo da65 --cpu $(1) ok
-endef
-$(foreach target,$(DISASS_TARGETS),$(eval $(call disass,$(target))))
+$(WORKDIR)/$1-reass.bin: $(WORKDIR)/$1-reass.s $(DIFF)
+ $(CL65) --cpu $1 -t none $(START) -o $$@ $$<
+ $(DIFF) $$@ $(WORKDIR)/$1-disass.bin
-# now that all targets have been generated, get to the manual ones
-all: $(DISASS_TARGETLIST)
- @#
+endef # DISASS_template
-.PHONY: all $(DISASS_TARGETLIST)
+$(foreach cpu,$(CPUS),$(eval $(call DISASS_template,$(cpu))))
+clean:
+ @$(call RMDIR,$(WORKDIR))
+ @$(call DEL,$(SOURCES:.s=.o))
-# makefile for the tests that MUST NOT compile
+# Makefile for the tests that MUST NOT compile
ifneq ($(shell echo),)
- CMD_EXE := 1
+ CMD_EXE = 1
endif
ifdef CMD_EXE
- NOT := - # Hack
- DEL = -del /f $(subst /,\,$1)
+ NOT = - # Hack
+ MKDIR = mkdir $(subst /,\,$1)
+ RMDIR = -rmdir /s /q $(subst /,\,$1)
else
- NOT := !
- DEL = $(RM) $1
+ NOT = !
+ MKDIR = mkdir -p $1
+ RMDIR = $(RM) -r $1
endif
CC65 := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65)
-WORKDIR := ../../testwrk
+WORKDIR = ../../testwrk/err
.PHONY: all clean
-TESTS := $(patsubst %.c,$(WORKDIR)/%.s,$(wildcard *.c))
+SOURCES := $(wildcard *.c)
+TESTS = $(patsubst %.c,$(WORKDIR)/%.s,$(SOURCES))
all: $(TESTS)
$(NOT) $(CC65) -o $@ $<
clean:
- @$(call DEL,$(TESTS))
+ @$(call RMDIR,$(WORKDIR))
-
-# makefile for the remaining tests that need special care in one way or another
+# Makefile for the remaining tests that need special care in one way or another
ifneq ($(shell echo),)
- CMD_EXE := 1
+ CMD_EXE = 1
endif
ifdef CMD_EXE
- S := $(subst /,\,/)
- NOT := - # Hack
- DEL = -del /f $(subst /,\,$1)
+ S = $(subst /,\,/)
+ NOT = - # Hack
+ EXE = .exe
+ MKDIR = mkdir $(subst /,\,$1)
+ RMDIR = -rmdir /s /q $(subst /,\,$1)
+ DEL = del /f $(subst /,\,$1)
else
- S := /
- NOT := !
+ S = /
+ NOT = !
+ EXE =
+ MKDIR = mkdir -p $1
+ RMDIR = $(RM) -r $1
DEL = $(RM) $1
endif
-CC65FLAGS := -t sim6502
-SIM65FLAGS := -x 200000000
+CC65FLAGS = -t sim6502
+SIM65FLAGS = -x 200000000
CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65)
-WORKDIR := ..$S..$Stestwrk
-DIFF := $(WORKDIR)/bdiff
+WORKDIR = ..$S..$Stestwrk$Smisc
+
+OPTIONS = g O Os Osi Osir Oi Oir Or
+
+DIFF = $(WORKDIR)$Sbdiff$(EXE)
+
+CC = gcc
+CFLAGS = -O2
.PHONY: all clean
SOURCES := $(wildcard *.c)
-TESTS := $(foreach option,. .o. .os. .osi. .osir. .oi. .oir. .or.,$(SOURCES:%.c=$(WORKDIR)/%$(option)prg))
+TESTS = $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).prg))
all: $(TESTS)
+$(WORKDIR):
+ $(call MKDIR,$(WORKDIR))
+
+$(DIFF): ../bdiff.c | $(WORKDIR)
+ $(CC) $(CFLAGS) -o $@ $<
+
+define PRG_template
+
# should compile, but then hangs in an endless loop
-$(WORKDIR)/endless%prg: endless.c
- $(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
- $(NOT) $(SIM65) $(SIM65FLAGS) $@
+$(WORKDIR)/endless.$1.prg: endless.c | $(WORKDIR)
+ $(CL65) $(CC65FLAGS) -$1 -o $$@ $$<
+ $(NOT) $(SIM65) $(SIM65FLAGS) $$@
# these need reference data that can't be generated by a host-compiled program,
# in a useful way
-$(WORKDIR)/limits%prg: limits.c
- $(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/limits.out
- $(DIFF) $(WORKDIR)/limits.out limits.ref
+$(WORKDIR)/limits.$1.prg: limits.c $(DIFF)
+ $(CL65) $(CC65FLAGS) -$1 -o $$@ $$<
+ $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.out
+ $(DIFF) $(WORKDIR)/limits.$1.out limits.ref
# the rest are tests that fail currently for one reason or another
-$(WORKDIR)/fields%prg: fields.c
- @echo "FIXME: " $@ "currently will fail."
- $(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
- -$(SIM65) $(SIM65FLAGS) $@
-$(WORKDIR)/sitest%prg: sitest.c
- @echo "FIXME: " $@ "currently will fail."
- -$(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
-# -$(SIM65) $(SIM65FLAGS) $@
-$(WORKDIR)/cc65141011%prg: cc65141011.c
- @echo "FIXME: " $@ "currently can fail."
- $(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
- -$(SIM65) $(SIM65FLAGS) $@
+$(WORKDIR)/fields.$1.prg: fields.c | $(WORKDIR)
+ @echo "FIXME: " $$@ "currently will fail."
+ $(CL65) $(CC65FLAGS) -$1 -o $$@ $$<
+ -$(SIM65) $(SIM65FLAGS) $$@
+$(WORKDIR)/sitest.$1.prg: sitest.c | $(WORKDIR)
+ @echo "FIXME: " $$@ "currently will fail."
+ -$(CL65) $(CC65FLAGS) -$1 -o $$@ $$<
+# -$(SIM65) $(SIM65FLAGS) $$@
+$(WORKDIR)/cc65141011.$1.prg: cc65141011.c | $(WORKDIR)
+ @echo "FIXME: " $$@ "currently can fail."
+ $(CL65) $(CC65FLAGS) -$1 -o $$@ $$<
+ -$(SIM65) $(SIM65FLAGS) $$@
+
+endef # PRG_template
+
+$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option))))
clean:
- @$(call DEL,$(TESTS))
+ @$(call RMDIR,$(WORKDIR))
@$(call DEL,$(SOURCES:.c=.o))
- @$(call DEL,$(SOURCES:%.c=$(WORKDIR)/%.out))
-# makefile for the regression tests that generate output which has to be
+# Makefile for the regression tests that generate output which has to be
# compared with reference output
ifneq ($(shell echo),)
- CMD_EXE := 1
+ CMD_EXE = 1
endif
ifdef CMD_EXE
- S := $(subst /,\,/)
- DEL = -del /f $(subst /,\,$1)
+ S = $(subst /,\,/)
+ EXE = .exe
+ MKDIR = mkdir $(subst /,\,$1)
+ RMDIR = -rmdir /s /q $(subst /,\,$1)
+ DEL = del /f $(subst /,\,$1)
else
- S := /
+ S = /
+ EXE =
+ MKDIR = mkdir -p $1
+ RMDIR = $(RM) -r $1
DEL = $(RM) $1
endif
-CC65FLAGS := -t sim6502
-SIM65FLAGS := -x 200000000
+CC65FLAGS = -t sim6502
+SIM65FLAGS = -x 200000000
CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65)
-WORKDIR := ..$S..$Stestwrk
-DIFF := $(WORKDIR)/bdiff
+WORKDIR = ..$S..$Stestwrk$Sref
-CC := gcc
-CFLAGS := -O2 -Wall -W -Wextra -funsigned-char -fwrapv -fno-strict-overflow
+OPTIONS = g O Os Osi Osir Oi Oir Or
+
+DIFF = $(WORKDIR)$Sbdiff$(EXE)
+
+CC = gcc
+CFLAGS = -O2 -Wall -W -Wextra -funsigned-char -fwrapv -fno-strict-overflow
.PHONY: all clean
SOURCES := $(wildcard *.c)
-REFS := $(SOURCES:%.c=$(WORKDIR)/%.ref)
-TESTS := $(foreach option,. .o. .os. .osi. .osir. .oi. .oir. .or.,$(SOURCES:%.c=$(WORKDIR)/%$(option)prg))
+REFS = $(SOURCES:%.c=$(WORKDIR)/%.ref)
+TESTS = $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).prg))
all: $(REFS) $(TESTS)
-# "yaccdbg.c" includes "yacc.c".
-# yaccdbg's built files must depend on both of them.
+$(WORKDIR):
+ $(call MKDIR,$(WORKDIR))
-$(WORKDIR)/yaccdbg.ref: yacc.c
-
-$(WORKDIR)/%.ref: %.c
- $(CC) $(CFLAGS) $< -o $(WORKDIR)/$*.host
+$(WORKDIR)/%.ref: %.c | $(WORKDIR)
+ $(CC) $(CFLAGS) -o $(WORKDIR)/$*.host $<
$(WORKDIR)$S$*.host > $@
+$(DIFF): ../bdiff.c | $(WORKDIR)
+ $(CC) $(CFLAGS) -o $@ $<
+
# Some files have "K & R"-style syntax. Therefore, some forward
# function-declarations don't match the later function definitions.
# Those programs fail when fastcall is used; but, the cdecl calling convention
# tolerates those conflicts. Therefore, make their functions default to cdecl.
#
-$(WORKDIR)/init%prg: CC65FLAGS += -Wc --all-cdecl
-$(WORKDIR)/switch.%rg: CC65FLAGS += -Wc --all-cdecl
-$(WORKDIR)/yacc.%rg: CC65FLAGS += -Wc --all-cdecl
-$(WORKDIR)/yaccdbg%prg: CC65FLAGS += -Wc --all-cdecl
-
-$(WORKDIR)/yaccdbg%prg: yacc.c
-
-$(WORKDIR)/%.prg: %.c $(WORKDIR)/%.ref
- $(CL65) $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
- $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.o.prg: %.c $(WORKDIR)/%.ref
- $(CL65) -O $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
- $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.os.prg: %.c $(WORKDIR)/%.ref
- $(CL65) -Os $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
- $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.osi.prg: %.c $(WORKDIR)/%.ref
- $(CL65) -Osi $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
- $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.osir.prg: %.c $(WORKDIR)/%.ref
- $(CL65) -Osir $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
- $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.oi.prg: %.c $(WORKDIR)/%.ref
- $(CL65) -Oi $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
- $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.oir.prg: %.c $(WORKDIR)/%.ref
- $(CL65) -Oir $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
- $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.or.prg: %.c $(WORKDIR)/%.ref
- $(CL65) -Or $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
- $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
+$(WORKDIR)/init.%.prg \
+$(WORKDIR)/switch.%.prg \
+$(WORKDIR)/yacc.%.prg \
+$(WORKDIR)/yaccdbg.%.prg: CC65FLAGS += -Wc --all-cdecl
+
+# "yaccdbg.c" includes "yacc.c".
+# yaccdbg's built files must depend on both of them.
+#
+$(WORKDIR)/yaccdbg.ref: yacc.c
+$(WORKDIR)/yaccdbg.%.prg: yacc.c
+
+define PRG_template
+
+$(WORKDIR)/%.$1.prg: %.c $(WORKDIR)/%.ref $(DIFF)
+ $(CL65) $$(CC65FLAGS) -$1 -o $$@ $$<
+ $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$*.out
+ $(DIFF) $(WORKDIR)/$$*.out $(WORKDIR)/$$*.ref
+
+endef # PRG_template
+
+$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option))))
clean:
- @$(call DEL,$(TESTS))
+ @$(call RMDIR,$(WORKDIR))
@$(call DEL,$(SOURCES:.c=.o))
- @$(call DEL,$(SOURCES:%.c=$(WORKDIR)/%.out))
- @$(call DEL,$(SOURCES:%.c=$(WORKDIR)/%.ref))
- @$(call DEL,$(SOURCES:%.c=$(WORKDIR)/%.host))
-
-# makefile for the regression tests that return an error code on failure
+# Makefile for the regression tests that return an error code on failure
ifneq ($(shell echo),)
- CMD_EXE := 1
+ CMD_EXE = 1
endif
ifdef CMD_EXE
- DEL = -del /f $(subst /,\,$1)
+ MKDIR = mkdir $(subst /,\,$1)
+ RMDIR = -rmdir /s /q $(subst /,\,$1)
+ DEL = del /f $(subst /,\,$1)
else
+ MKDIR = mkdir -p $1
+ RMDIR = $(RM) -r $1
DEL = $(RM) $1
endif
-CC65FLAGS := -t sim6502
-SIM65FLAGS := -x 200000000
+CC65FLAGS = -t sim6502
+SIM65FLAGS = -x 200000000
CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
SIM65 := $(if $(wildcard ../../bin/sim65*),../../bin/sim65,sim65)
-WORKDIR := ../../testwrk
+WORKDIR = ../../testwrk/val
+
+OPTIONS = g O Os Osi Osir Oi Oir Or
.PHONY: all clean
SOURCES := $(wildcard *.c)
-TESTS := $(foreach option,. .o. .os. .osi. .osir. .oi. .oir. .or.,$(SOURCES:%.c=$(WORKDIR)/%$(option)prg))
+TESTS = $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).prg))
all: $(TESTS)
+$(WORKDIR):
+ $(call MKDIR,$(WORKDIR))
+
# Some files have "K & R"-style syntax. Therefore, some forward
# function-declarations don't match the later function definitions.
# Those programs fail when fastcall is used; but, the cdecl calling convention
# tolerates those conflicts. Therefore, make their functions default to cdecl.
#
-$(WORKDIR)/cq4%prg $(WORKDIR)/cq71.%rg $(WORKDIR)/cq81%prg $(WORKDIR)/cq84%prg: CC65FLAGS += -Wc --all-cdecl
-
-$(WORKDIR)/%.prg: %.c
- $(CL65) $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@
-
-$(WORKDIR)/%.o.prg: %.c
- $(CL65) -O $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@
-
-$(WORKDIR)/%.os.prg: %.c
- $(CL65) -Os $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@
-
-$(WORKDIR)/%.osi.prg: %.c
- $(CL65) -Osi $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@
+$(WORKDIR)/cq4.%.prg \
+$(WORKDIR)/cq71.%.prg \
+$(WORKDIR)/cq81.%.prg \
+$(WORKDIR)/cq84.%.prg: CC65FLAGS += -Wc --all-cdecl
-$(WORKDIR)/%.osir.prg: %.c
- $(CL65) -Osir $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@
+define PRG_template
-$(WORKDIR)/%.oi.prg: %.c
- $(CL65) -Oi $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@
+$(WORKDIR)/%.$1.prg: %.c | $(WORKDIR)
+ $(CL65) $$(CC65FLAGS) -$1 -o $$@ $$<
+ $(SIM65) $(SIM65FLAGS) $$@
-$(WORKDIR)/%.oir.prg: %.c
- $(CL65) -Oir $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@
+endef # PRG_template
-$(WORKDIR)/%.or.prg: %.c
- $(CL65) -Or $(CC65FLAGS) $< -o $@
- $(SIM65) $(SIM65FLAGS) $@
+$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option))))
clean:
- @$(call DEL,$(TESTS))
+ @$(call RMDIR,$(WORKDIR))
@$(call DEL,$(SOURCES:.c=.o))