PYTHON ?= python
MODULE_TESTS := cam_core_banked match_engine_pipeline cam_write_noise cam_read_noise popcount_pipeline

.PHONY: help test-all test-top test-modules test-module test-model test-perf clean $(MODULE_TESTS:%=test-module-%)

help:
	@echo "Available hw/sim targets:"
	@echo "  make test-model"
	@echo "  make test-top"
	@echo "  make test-module MODULE=cam_core_banked"
	@echo "  make test-modules"
	@echo "  make test-perf"
	@echo "  make test-all"
	@echo "  make clean"

test-all: test-model test-top test-modules

test-top:
	$(MAKE) -C tests/top

test-modules: $(MODULE_TESTS:%=test-module-%)

test-module:
	@test -n "$(MODULE)" || (echo "Usage: make test-module MODULE=<name>"; exit 2)
	$(MAKE) -C tests/modules/$(MODULE)

$(MODULE_TESTS:%=test-module-%):
	$(MAKE) -C tests/modules/$(@:test-module-%=%)

test-model:
	env -u PYTHONPATH -u PYTHONHOME $(PYTHON) -m pytest tests/model -q

test-perf:
	$(MAKE) -C tests/perf

clean:
	$(MAKE) -C tests/top clean
	@for module in $(MODULE_TESTS); do \
		$(MAKE) -C tests/modules/$$module clean || exit $$?; \
	done
	$(MAKE) -C tests/perf clean
	rm -rf .pytest_cache tests/model/.pytest_cache
