TARGET_DIR?=bin
FUSESOC?=fusesoc

# Pass extra flags to FuseSoC. e.g. EXTRA_FLAGS=assertions_on
EXTRA_FLAGS ?= 
FUSESOC_FLAGS = $(addprefix --flag ,$(EXTRA_FLAGS))

.PHONY: sim sim-pipeline sim-core
sim: sim-core
sim-pipeline: $(TARGET_DIR)/muntjac_pipeline
sim-core: $(TARGET_DIR)/muntjac_core

.PHONY: clean
clean:
	rm -rf build
	rm -rf $(TARGET_DIR)

# TODO: Lint the entire core when the caches have been tidied up.
.PHONY: lint
lint:
	$(FUSESOC) --cores-root=. run --target=lint --tool=verilator $(FUSESOC_FLAGS) lowrisc:muntjac:pipeline_tb:0.1

# Currently valid for muntjac_pipeline and muntjac_core only.
$(TARGET_DIR)/muntjac_%: FORCE | $(TARGET_DIR)
	rm -rf build
	$(FUSESOC) --cores-root=. run --target=sim --tool=verilator --build $(FUSESOC_FLAGS) lowrisc:muntjac:$*_tb:0.1
	cp build/lowrisc_muntjac_$*_tb_0.1/sim-verilator/muntjac_$* $@

$(TARGET_DIR):
	mkdir -p $@

.PHONY: FORCE
FORCE:
