summaryrefslogtreecommitdiff
path: root/mk/top.mk
blob: c81d04db4e62c4909a769945949daef2aa77f39b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
.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/obj.mk
include mk/output.mk
include mk/peakrdl.mk
include mk/quartus.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,mk/builtin $(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))

    $$(foreach core,$$(all_cores), \
     $$(foreach hook,$$(core_info/$$(core)/hooks), \
        $$(eval $$(call hooks/$$(hook),$$(core)))))

    $$(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))