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

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

POPCORN=$(BUILDDIR)/popcorn.exe

OBJS = c_prog.obj interp.obj tempo_int.obj interp_nopt.obj \
       interp_opt.opt pop_prog.obj test_ms.obj  test_pop.obj

VERIFIES = bench.ver interp.ver interp_gen.ver pop_prog.ver tempo_int.ver \
           test.ver test_pop.ver

# test and bench

all: test.exe bench.exe

test.exe: $(OBJS) test.obj
	link /nologo /subsystem:console /libpath:$(RUNTIMEDIR) /out:$@ tal_start.obj stdlib.obj pop_runtime.obj cyclonelib.obj tal_util.obj gc.lib $(OBJS) test.obj

verify:  $(VERIFIES)

bench.exe: $(OBJS) bench.obj
	link /nologo /subsystem:console /libpath:$(RUNTIMEDIR) /out:$@ tal_start.obj stdlib.obj pop_runtime.obj cyclonelib.obj tal_util.obj gc.lib $(OBJS) bench.obj

# popcorn files

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

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

# C files

%.obj: %.c
	cl /c $<

%.opt: %.c
	cl /c /O2 /Fo$@ $<

# verification

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

# clean

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

clean: exe_only
	rm -f *.exe
	rm -f *.ver
	rm -f *.tal
	rm -f *.pdb # produced by debugging
	rm -f *.ilk # produced by debugging
