summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-05-22 14:59:29 -0600
committerAlejandro Soto <alejandro@34project.org>2024-05-24 05:58:43 -0600
commitf544591a74d0f27d5e55261ce50eec562549aad9 (patch)
treefab3262d637d3420c594716e258686115969a9ab /mk
parent582904f497496ac899cf8697b103372d84279b0a (diff)
mk/obj: initial commit
Diffstat (limited to 'mk')
-rw-r--r--mk/cocotb.mk2
-rw-r--r--mk/cores.mk10
-rw-r--r--mk/obj.mk8
-rw-r--r--mk/quartus.mk2
-rw-r--r--mk/top.mk1
-rw-r--r--mk/verilator.mk4
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 $$@
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