diff options
| author | Alejandro Soto <alejandro@34project.org> | 2024-02-12 16:18:03 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2024-02-20 11:11:18 -0600 |
| commit | bf5cece51a20eb4773d196ec650fb3af574afa17 (patch) | |
| tree | 8abd33c815b38a3dee673ea345f106d4ddcae9ab /mk/top.mk | |
| parent | 691a441bfeb90642840d2869cb04ec146e274a1e (diff) | |
mk: initial commit
This is a complete overhaul of the build system. This new
implementations upports many new features and is very extensible.
Diffstat (limited to 'mk/top.mk')
| -rw-r--r-- | mk/top.mk | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/mk/top.mk b/mk/top.mk new file mode 100644 index 0000000..6db6abb --- /dev/null +++ b/mk/top.mk @@ -0,0 +1,78 @@ +.PHONY: .force .no_default + +.no_target: + $(error no default target defined in top Makefile) + +.force: + +empty := +space := $(empty) $(empty) +comma := , + +# Both empty lines are required +define newline + + +endef + +newline := $(newline) + +defer = $(1) = $$(eval $(2))$$($(1)) + +ifeq (,$(top)) + $(error $$(top) is not defined) +endif + +$(foreach flag,$(subst $(comma),$(space),$(enable)),$(eval override enable_$(flag) := 1)) +$(foreach flag,$(subst $(comma),$(space),$(disable)),$(eval override enable_$(flag) :=)) + +include mk/build.mk +include mk/cocotb.mk +include mk/cores.mk +include mk/cov.mk +include mk/output.mk +include mk/target.mk +include mk/tools.mk +include mk/verilator.mk + +$(eval $(check_target)) +$(eval $(find_tools_lazy)) + +ifneq (,$(target)) + $(eval $(target/$(target)/prepare)) +endif + +$(foreach top_dir,$(core_dirs), \ + $(eval $(call add_core_subdir,$(top_dir)))) + +top_path := $(core_info/$(top)/path) + +ifeq (,$(top_path)) + $(call unknown_core,$(top)) +endif + +$(eval $(setup_dep_tree)) + +define build_target_top + ifeq (,$$(obj/$(if $(2),$(2),$(target))/$(1))) + $$(eval $$(call enter_build,$(1),$(2))) + $$(eval $$(call build_vars,rule_target rule_top core_info/$$(rule_top)/build)) + + $$(eval $$(target/$$(rule_target)/setup)) + + $$(eval $$(setup_obj)) + $$(eval $$(setup_stamp_rules)) + + $$(eval $$(target/$$(rule_target)/rules)) + + obj/$$(rule_target)/$$(rule_top) := $$(obj) + $$(eval $$(exit_build)) + endif +endef + +ifneq (,$(target)) + $(eval $(call build_target_top,$(top))) +endif + +$(eval $(setup_submake_rules)) +$(eval $(finish_stamp_rules)) |
