diff options
| -rw-r--r-- | mk/cocotb.mk | 2 | ||||
| -rw-r--r-- | mk/cores.mk | 10 | ||||
| -rw-r--r-- | mk/obj.mk | 8 | ||||
| -rw-r--r-- | mk/quartus.mk | 2 | ||||
| -rw-r--r-- | mk/top.mk | 1 | ||||
| -rw-r--r-- | mk/verilator.mk | 4 |
6 files changed, 20 insertions, 7 deletions
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 $$@ @@ -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 |
