all: work
	touch .stamp

clean::
	rm -f .stamp

define template
work:: $(addprefix $(1)/.stamp_,sim falsify $(2))

$(1)/.stamp_sim:
	bash run.sh $(1) sim
	touch $$@

$(1)/.stamp_falsify: $(1)/.stamp_sim
	bash run.sh $(1) falsify
	touch $$@

$(1)/.stamp_cmos: $(1)/.stamp_sim
	bash run.sh $(1) cmos
	touch $$@

$(1)/.stamp_ice40: $(1)/.stamp_sim
	bash run.sh $(1) ice40
	touch $$@

clean::
	rm -rf $(1)/.stamp_* $(1)/work_*
	rm -f $(1)_cmos.status $(1)_ice40.status $(1)_falsify.status
endef

$(eval $(call template,navre,cmos ice40))

.PHONY: all clean