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

all: prereq test-bm1 test-bm2 ama2 test-am1

prereq:
	$(MAKE) -C $(CM) cmeta

cm2: cm2.cmeta
	$(CM)/cmeta < $< | $(CM)/cma | cat $(CM)/cmrt - | $(CM)/elfwrap > $@
	chmod +x $@

cma2: cma2.cmeta
	$(CM)/cmeta < $< | $(CM)/cma | cat $(CM)/asmrt - | $(CM)/elfwrap > $@
	chmod +x $@

cm3: cm3.cm2 cm2 cma2 cm3rt
	./cm2 < $< | ./cma2 | cat cm3rt - | $(CM)/elfwrap > $@
	chmod +x $@

cma3: cma3.cm2 cm2 cma2 asmrt4
	./cm2 < $< | ./cma2 | cat asmrt4 - | $(CM)/elfwrap > $@
	chmod +x $@

cm3rt: cm3rt.lhex error.lhex getlabel.lhex put.lhex
	cat $< $(CM)/io.lhex $(CM)/rwx.lhex $(CM)/why.lhex error.lhex getlabel.lhex put.lhex $(CM)/label-z.lhex | $(CM)/lhex > $@

bm1cm3: bm1.cm3 cm3 cma3 cm3rt
	./cm3 < $< | ./cma3 | cat cm3rt - | $(CM)/elfwrap > $@
	chmod +x $@

bm1: bm1.bm1 bm1cm3 cma3 cm3rt
	./bm1cm3 < $< | ./cma3 | cat cm3rt - | $(CM)/elfwrap > $@
	chmod +x $@

test-bm1: bm1.bm1 bm1 cma3 cm3rt
	./bm1 < $< | ./cma3 | cat cm3rt - | $(CM)/elfwrap | cmp - bm1

bma2: bma2.bm1 bm1 cma3 asmrt4
	./bm1 < $< | ./cma3 | cat asmrt4 - | $(CM)/elfwrap > $@
	chmod +x $@

asmrt4: asmrt4.lhex encode.lhex error.lhex getlabel.lhex put.lhex table.lhex
	cat $< $(CM)/io.lhex $(CM)/rwx.lhex encode.lhex error.lhex getlabel.lhex put.lhex table.lhex $(CM)/label-z.lhex | $(CM)/lhex > $@

bm2bm1: bm2.bm1 bm1 bma2 bm2rt
	./bm1 < $< | ./bma2 | cat bm2rt - | $(CM)/elfwrap > $@
	chmod +x $@

bm2rt: bm2rt.lhex encode.lhex error.lhex getlabel.lhex put.lhex
	cat $< $(CM)/io.lhex $(CM)/rwx.lhex $(CM)/why.lhex encode.lhex error.lhex getlabel.lhex put.lhex $(CM)/label-z.lhex | $(CM)/lhex > $@

bm2: bm2.bm1 bm2bm1 bma2 bm2rt
	./bm2bm1 < $< | ./bma2 | cat bm2rt - | $(CM)/elfwrap > $@
	chmod +x $@

test-bm2: bm2.bm1 bm2 bma2 bm2rt
	./bm2 < $< | ./bma2 | cat bm2rt - | $(CM)/elfwrap | cmp - bm2

am1bm2: am1.bm2 bm2 bma2 bm2rt
	./bm2 < $< | ./bma2 | cat bm2rt - | $(CM)/elfwrap > $@
	chmod +x $@

ama1: ama1.bm1 bm1 cma3 asmrt4
	./bm1 < $< | ./cma3 | cat asmrt4 - | $(CM)/elfwrap > $@
	chmod +x $@

am1: am1.am1 am1bm2 ama1 bm2rt
	./am1bm2 < $< | ./ama1 | cat bm2rt - | $(CM)/elfwrap > $@
	chmod +x $@

test-am1: am1.am1 am1 ama1 bm2rt
	./am1 < $< | ./ama1 | cat bm2rt - | $(CM)/elfwrap | cmp - am1

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

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

vlhex: vlhex.lhex asmrt4
	$(CM)/lhex < $< | cat asmrt4 - | $(CM)/elfwrap > $@
	chmod +x $@

clean:
	$(RM) cm2 cma2 cm3 cma3 cm3rt bm1cm3 bm1 bm2bm1 bm2 bma2 bm2rt asmrt4 am1bm2 am1 ama1 ama2 vlhex

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

.PHONY: all test-bm1 test-bm2 test-am1 clean prereq clean-prereq
