1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-28 06:30:16 +00:00

Cleaned up test Makefiles.

This commit is contained in:
Oliver Schmidt 2017-03-19 17:48:12 +01:00
parent 3a30669ff6
commit 66634ef683
8 changed files with 253 additions and 226 deletions

View File

@ -1,43 +1,30 @@
# 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
@ -46,6 +33,8 @@ continue: $(WORKDIR)/bdiff$(EXE)
@$(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

View File

@ -1,3 +0,0 @@
*.o
*.bin
*.lst

View File

@ -1,45 +1,68 @@
# 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)

View File

@ -1,42 +1,64 @@
# 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)
# generate opcode targets and expand target list
define disass
DISASS_TARGETLIST += $$(WORKDIR)/$(1)-reass.bin $$(WORKDIR)/$(1)-reass.s $$(WORKDIR)/$(1)-disass.bin
$(WORKDIR):
$(call MKDIR,$(WORKDIR))
$$(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
$(DIFF): ../bdiff.c | $(WORKDIR)
$(CC) $(CFLAGS) -o $@ $<
$$(WORKDIR)/$(1)-reass.s: $$(WORKDIR)/$(1)-disass.bin
@$$(BINDIR)/da65 --cpu $(1) $(START) -o $$@ $$<
define DISASS_template
$$(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-disass.bin: $1-disass.s | $(WORKDIR)
$(CL65) --cpu $1 -t none $(START) -o $$@ $$<
# now that all targets have been generated, get to the manual ones
all: $(DISASS_TARGETLIST)
@#
$(WORKDIR)/$1-reass.s: $(WORKDIR)/$1-disass.bin
$(DA65) --cpu $1 $(START) -o $$@ $$<
.PHONY: all $(DISASS_TARGETLIST)
$(WORKDIR)/$1-reass.bin: $(WORKDIR)/$1-reass.s $(DIFF)
$(CL65) --cpu $1 -t none $(START) -o $$@ $$<
$(DIFF) $$@ $(WORKDIR)/$1-disass.bin
endef # DISASS_template
$(foreach cpu,$(CPUS),$(eval $(call DISASS_template,$(cpu))))
clean:
@$(call RMDIR,$(WORKDIR))
@$(call DEL,$(SOURCES:.s=.o))

View File

@ -1,24 +1,27 @@
# 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)
@ -26,4 +29,4 @@ $(WORKDIR)/%.s: %.c
$(NOT) $(CC65) -o $@ $<
clean:
@$(call DEL,$(TESTS))
@$(call RMDIR,$(WORKDIR))

View File

@ -1,63 +1,85 @@
# 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))

View File

@ -1,102 +1,84 @@
# 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)/init.%.prg \
$(WORKDIR)/switch.%.prg \
$(WORKDIR)/yacc.%.prg \
$(WORKDIR)/yaccdbg.%.prg: CC65FLAGS += -Wc --all-cdecl
$(WORKDIR)/yaccdbg%prg: yacc.c
# "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
$(WORKDIR)/%.prg: %.c $(WORKDIR)/%.ref
$(CL65) $(CC65FLAGS) $< -o $@
$(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
$(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
define PRG_template
$(WORKDIR)/%.o.prg: %.c $(WORKDIR)/%.ref
$(CL65) -O $(CC65FLAGS) $< -o $@
$(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
$(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
$(WORKDIR)/%.$1.prg: %.c $(WORKDIR)/%.ref $(DIFF)
$(CL65) $$(CC65FLAGS) -$1 -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
endef # PRG_template
$(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
$(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))

View File

@ -1,70 +1,59 @@
# 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)/cq4.%.prg \
$(WORKDIR)/cq71.%.prg \
$(WORKDIR)/cq81.%.prg \
$(WORKDIR)/cq84.%.prg: CC65FLAGS += -Wc --all-cdecl
$(WORKDIR)/%.prg: %.c
$(CL65) $(CC65FLAGS) $< -o $@
$(SIM65) $(SIM65FLAGS) $@
define PRG_template
$(WORKDIR)/%.o.prg: %.c
$(CL65) -O $(CC65FLAGS) $< -o $@
$(SIM65) $(SIM65FLAGS) $@
$(WORKDIR)/%.$1.prg: %.c | $(WORKDIR)
$(CL65) $$(CC65FLAGS) -$1 -o $$@ $$<
$(SIM65) $(SIM65FLAGS) $$@
$(WORKDIR)/%.os.prg: %.c
$(CL65) -Os $(CC65FLAGS) $< -o $@
$(SIM65) $(SIM65FLAGS) $@
endef # PRG_template
$(WORKDIR)/%.osi.prg: %.c
$(CL65) -Osi $(CC65FLAGS) $< -o $@
$(SIM65) $(SIM65FLAGS) $@
$(WORKDIR)/%.osir.prg: %.c
$(CL65) -Osir $(CC65FLAGS) $< -o $@
$(SIM65) $(SIM65FLAGS) $@
$(WORKDIR)/%.oi.prg: %.c
$(CL65) -Oi $(CC65FLAGS) $< -o $@
$(SIM65) $(SIM65FLAGS) $@
$(WORKDIR)/%.oir.prg: %.c
$(CL65) -Oir $(CC65FLAGS) $< -o $@
$(SIM65) $(SIM65FLAGS) $@
$(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))