# Configuration:
#   USETALC - if defined use the TALC assembler otherwise use MASM
# NG: USETALC doesn't work yet

ifdef USETALC
POPFLAGS = --TALC
else
#POPFLAGS = --MS
POPFLAGS = --MS --unsafemasm
endif

RUNTIMEDIR=../../runtime
BUILDDIR=../../build

OUTFILE=test.out
REFFILE=sample.out
POPCORN=popcorn.exe

# bugs:
#   dp.pop: type error

TALS = bad.tal bs2.tal bsearch.tal cg.tal cg2.tal cg3.tal cg4.tal cg5.tal \
	cg6.tal cgh1.tal cghole.tal dot.tal intbug.tal \
	intswitch-inter.tal itj.tal jmp.tal nested.tal qe2.tal rec.tal \
	test_stdlib.tal while-inter.tal

VERIFIES = bad.ver bs2.ver bsearch.ver cg.ver cg2.ver cg3.ver cg4.ver cg5.ver \
	cg6.ver cgh1.ver cghole.ver dot.ver intbug.ver \
	intswitch-inter.ver itj.ver jmp.ver nested.ver qe2.ver rec.ver \
	test_stdlib.ver while-inter.ver

EXES = bs2.exe bsearch.exe cg.exe cg2.exe cg3.exe cg4.exe cg5.exe cg6.exe \
	cgh1.exe cghole.exe dot.exe intswitch-inter.exe itj.exe jmp.exe \
	nested.exe qe2.exe rec.exe test_stdlib.exe while-inter.exe

compile: $(EXES)
	cd interpret; make all

tal:  $(TALS)

verify:	 $(VERIFIES)
	cd interpret; make verify

%.ver: %.pop
	$(POPCORN) --elaborate-only $<
	mv $(subst .pop,.tal,$<) $@

run:
	rm -f $(OUTFILE)
	./bs2.exe >> $(OUTFILE)
	./bsearch.exe >> $(OUTFILE)
	./cg.exe >> $(OUTFILE)
	./cg2.exe >> $(OUTFILE)
	./cg3.exe >> $(OUTFILE)
	./cg4.exe >> $(OUTFILE)
	./cg5.exe >> $(OUTFILE)
	./cg6.exe >> $(OUTFILE)
	./cgh1.exe >> $(OUTFILE)
	./cghole.exe >> $(OUTFILE)
	./dot.exe >> $(OUTFILE)
	./intswitch-inter.exe >> $(OUTFILE)
	./itj.exe >> $(OUTFILE)
	./jmp.exe >> $(OUTFILE)
	./nested.exe >> $(OUTFILE)
	./qe2.exe >> $(OUTFILE)
	./rec.exe >> $(OUTFILE)
	./while-inter.exe >> $(OUTFILE)
	./interpret/test.exe >> $(OUTFILE)	    # interpret subdirectory

check:
	diff $(OUTFILE) $(REFFILE)

ref:
	cp $(OUTFILE) $(REFFILE)

bench:
	./interpret/bench.exe

exe_only:
	rm -f *~ *.obj *.tal* *.lst

clean: exe_only
	rm -f *.exe
	rm -f *.ver
	rm -f *.pdb # produced by debugging
	rm -f *.ilk # produced by debugging
	rm -f $(OUTFILE)
	cd interpret; make clean

%.tal: $(BUILDDIR)/popcorn.exe	# This seems to have no effect!

%.tal: %.pop
	$(POPCORN) $(POPFLAGS) --elaborate-only $<

%.obj: %.tal
	ml /Zi /Zf /Zd /nologo /coff /I$(RUNTIMEDIR) /Fl /Sc /c /Fo$@ /Ta$<

%.exe: %.obj
	link /debug /nologo /subsystem:console /libpath:$(RUNTIMEDIR) /out:$@ \
	  tal_start.obj stdlib.obj pop_runtime.obj cyclonelib.obj \
	  tal_util.obj gc.lib $<

# EOF: Makefile
