From f544591a74d0f27d5e55261ce50eec562549aad9 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Wed, 22 May 2024 14:59:29 -0600 Subject: mk/obj: initial commit --- mk/cocotb.mk | 2 +- mk/cores.mk | 10 +++++++--- mk/obj.mk | 8 ++++++++ mk/quartus.mk | 2 +- mk/top.mk | 1 + mk/verilator.mk | 4 ++-- 6 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 mk/obj.mk (limited to 'mk') diff --git a/mk/cocotb.mk b/mk/cocotb.mk index da87b68..7187773 100644 --- a/mk/cocotb.mk +++ b/mk/cocotb.mk @@ -25,7 +25,7 @@ define target/test/rules .PHONY: $$(rule_top_path)/test - $$(rule_top_path)/test &: $$(vtop_exe) | $$(obj) + $$(rule_top_path)/test &: $$(vtop_exe) $$(call core_objs,$$(rule_top),obj_deps) | $$(obj) $$(call run_no_err,COCOTB) cd $$(obj) && rm -f log.txt results.xml && \ LIBPYTHON_LOC=$$(cocotb_libpython) COCOTB_RESULTS_FILE=results.xml \ PYTHONPATH="$$(subst $$(space),:,$$(strip $$(cocotb_pythonpath) $$$$PYTHONPATH))" \ diff --git a/mk/cores.mk b/mk/cores.mk index 55235ee..d525777 100644 --- a/mk/cores.mk +++ b/mk/cores.mk @@ -17,17 +17,21 @@ core_paths_no_dyn = \ $(let prefix,$(core_info/$(1)/workdir), \ $(foreach path_elem,$(core_info/$(1)/$(2)), \ $(if $(patsubst /%,,$(path_elem)), \ - $(addprefix /$(if $(prefix),$(prefix)/),$(path_elem)), \ + $(addprefix /$(if $(3),$(3)/,$(if $(prefix),$(prefix)/)),$(path_elem)), \ $(path_elem))))))) core_paths = \ - $(call core_paths_no_dyn,$(1),$(2)) $(call core_paths_no_dyn,$(1),$(call target_var,$(2))) + $(call core_paths_no_dyn,$(1),$(2),$(3)) $(call core_paths_no_dyn,$(1),$(call target_var,$(2)),$(3)) + +core_objs = $(call core_paths,$(1),$(2),$(obj)) require_core_paths = \ $(strip \ - $(let val,$(strip $(call core_paths,$(1),$(2))), \ + $(let val,$(strip $(call core_paths,$(1),$(2),$(3))), \ $(if $(val),$(val),$(error core '$(1)' must define '$(2)')))) +require_core_objs = $(call require_core_paths,$(1),$(2),$(obj)) + core_paths_dyn = $(call core_paths,$(1),$(call target_var,$(2))) define add_core_dyn diff --git a/mk/obj.mk b/mk/obj.mk new file mode 100644 index 0000000..1c2baf4 --- /dev/null +++ b/mk/obj.mk @@ -0,0 +1,8 @@ +define add_obj_rules + core_info/$(1)/obj_rules := $$(core_info/$(1)/obj_rules)$$(newline)$$(value obj_rules) +endef + +define hooks/obj + obj_deps := $$(call core_objs,$(1),obj_deps) $$(top_stamp) | $$(obj) + $$(eval $$(call core_info/$(1)/obj_rules)) +endef diff --git a/mk/quartus.mk b/mk/quartus.mk index b61f77a..514c484 100644 --- a/mk/quartus.mk +++ b/mk/quartus.mk @@ -78,7 +78,7 @@ define target/syn/rules $$(call run,FIT) $$(quartus_run)_fit --part=$$(quartus_device) $$(quartus_top) @touch $$@ - $$(obj)/map.stamp: $$(quartus_qpf) + $$(obj)/map.stamp: $$(quartus_qpf) $$(call core_objs,$$(rule_top),obj_deps) $$(call run,MAP) $$(quartus_run)_map --family=$(quartus_family) $$(quartus_top) @touch $$@ diff --git a/mk/top.mk b/mk/top.mk index fe8023e..c81d04d 100644 --- a/mk/top.mk +++ b/mk/top.mk @@ -30,6 +30,7 @@ include mk/build.mk include mk/cocotb.mk include mk/cores.mk include mk/cov.mk +include mk/obj.mk include mk/output.mk include mk/peakrdl.mk include mk/quartus.mk diff --git a/mk/verilator.mk b/mk/verilator.mk index e98bef8..1c91e37 100644 --- a/mk/verilator.mk +++ b/mk/verilator.mk @@ -25,8 +25,8 @@ define target/sim/rules .PHONY: $$(rule_top_path)/sim - $$(rule_top_path)/sim: $$(vtop_exe) - $$(call run,RUN) $$< + $$(rule_top_path)/sim: $$(vtop_exe) $$(call core_objs,$$(rule_top),obj_deps) + $$(call run,RUN) cd $$(obj) && vl/Vtop $(call target_entrypoint,$$(rule_top_path)/sim) endef -- cgit v1.2.3