# Current cmeta version (commit) used for bootstrap:
# d671f71947c1cd24b68e450e5e16223cea75bc4e (2019-07-27)
CM=../cmeta
# Current mcss version (commit) used for bootstrap:
# 0d5f45db2050221c748a87218b6b18ba217f0b95 (2019-07-27)
MCSS=../mcss

all: prox2 prox2-asm elfwrap

prereq:
	$(MAKE) -C $(CM) elfwrap
	$(MAKE) -C $(MCSS) prereq am1 ama2 bm2rt asmrt4

prox1: prox1.am1
	$(MCSS)/am1 < $< | $(MCSS)/ama2 | cat $(MCSS)/bm2rt - | $(CM)/elfwrap > $@
	chmod +x $@

prox1-asm: prox1-asm.am1
	$(MCSS)/am1 < $< | $(MCSS)/ama2 | cat $(MCSS)/asmrt4 - | $(CM)/elfwrap > $@
	chmod +x $@

elfwrap: elfwrap.px1 rwx.px1 str.px1 prox1 prox1-asm
	cat $< rwx.px1 str.px1 | ./prox1 | ./prox1-asm | $(CM)/elfwrap > $@
	chmod +x $@

prox1s2: prox1s2.px1 compile.px1 num.px1 rwx.px1 str.px1 prox1 prox1-asm elfwrap
	cat $< compile.px1 num.px1 rwx.px1 str.px1 | ./prox1 | ./prox1-asm | ./elfwrap > $@
	chmod +x $@

prox1s2-asm: prox1s2-asm.px1 compile.px1 num.px1 rwx.px1 str.px1 table.px1 prox1 prox1-asm elfwrap
	cat $< compile.px1 num.px1 rwx.px1 str.px1 table.px1 | ./prox1 | ./prox1-asm | ./elfwrap > $@
	chmod +x $@

test-prox1s2: prox1s2 prox1s2-asm
	cat prox1s2.px1 compile.px1 num.px1 rwx.px1 str.px1 | ./prox1s2 | ./prox1s2-asm | ./elfwrap | diff -su - prox1s2
	cat prox1s2-asm.px1 compile.px1 num.px1 rwx.px1 str.px1 table.px1 | ./prox1s2 | ./prox1s2-asm | ./elfwrap | diff -su - prox1s2-asm

prox2s1: prox2s1.px1 compile.px1 num.px1 rwx.px1 str.px1 table.px1 prox1s2 prox1s2-asm elfwrap
	cat $< compile.px1 num.px1 rwx.px1 str.px1 table.px1 | ./prox1s2 | ./prox1s2-asm | ./elfwrap > $@
	chmod +x $@

prox2s1-asm: prox2s1-asm.px1 compile.px1 num.px1 rwx.px1 str.px1 table.px1 prox1s2 prox1s2-asm elfwrap
	cat $< compile.px1 num.px1 rwx.px1 str.px1 table.px1 | ./prox1s2 | ./prox1s2-asm | ./elfwrap > $@
	chmod +x $@

prox2: prox2.px2 compile.px2 comprg.px2 num.px2 rwx.px2 str.px2 table.px2 prox2s1 prox2s1-asm elfwrap
	cat $< compile.px2 comprg.px2 num.px2 rwx.px2 str.px2 table.px2 | ./prox2s1 | ./prox2s1-asm | ./elfwrap > $@
	chmod +x $@

prox2-asm: prox2-asm.px2 comprg.px2 compile.px2 num.px2 rwx.px2 str.px2 table.px2 prox2s1 prox2s1-asm elfwrap
	cat $< compile.px2 comprg.px2 num.px2 rwx.px2 str.px2 table.px2 | ./prox2s1 | ./prox2s1-asm | ./elfwrap > $@
	chmod +x $@

test: test-prox2

test-prox2: prox2 prox2-asm elfwrap
	cat prox2.px2 compile.px2 comprg.px2 num.px2 rwx.px2 str.px2 table.px2 | ./prox2 | ./prox2-asm | ./elfwrap | diff -su - prox2
	cat prox2-asm.px2 compile.px2 comprg.px2 num.px2 rwx.px2 str.px2 table.px2 | ./prox2 | ./prox2-asm | ./elfwrap | diff -su - prox2-asm

%.out: %.px2 compile.px2 comprg.px2 num.px2 rwx.px2 str.px2 table.px2 prox2 prox2-asm elfwrap
	cat $< compile.px2 comprg.px2 num.px2 rwx.px2 str.px2 table.px2 | ./prox2 | ./prox2-asm | ./elfwrap > $@
	chmod +x $@

clean:
	$(RM) cma.out cmeta.out elfwrap prox1 prox1-asm prox1-test.out prox1s2-asm prox1s2 prox2-asm prox2-syntax.out prox2 prox2s1-asm prox2s1 test-expr.out

clean-prereq:
	$(MAKE) -C $(MCSS) clean clean-prereq

.PHONY: all clean prereq clean-prereq test test-prox1s2 test-prox2
