summaryrefslogtreecommitdiff
path: root/mk/target.mk
blob: d28c2e20ad1c384937ece98d8e9dad05890882bc (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
target_var = $(1)/$(rule_target)/$(rule_top)
per_target = $($(call target_var,$(1)))

rule_top_path = $(core_info/$(rule_top)/path)

define target_entrypoint
  $(1): rule_top := $$(rule_top)
  $(1): rule_target := $$(rule_target)
endef

define check_target
  ifneq ($$(target),$$(findstring $$(target),$$(targets)))
    $$(error bad target '$$(target)')
  endif
endef

define setup_submake_rules
  .PHONY: $$(targets)

  other_targets := $$(filter-out $$(target),$$(targets))

  $$(foreach t,$$(targets),$$(eval $$(call top_rule,$$(t))))

  ifeq (,$$(target))
    $$(foreach other,$$(other_targets), \
      $$(foreach core,$$(all_cores), \
        $$(eval $$(call submake_rule,$$(other),$$(core)))))
  else
    $$(foreach core,$$(filter-out $$(top),$$(all_cores)), \
      $$(eval $$(call submake_rule,$$(target),$$(core))))
  endif
endef

define top_rule
  $(1): $$(top_path)/$(1)
endef

define submake_rule
  path := $$(core_info/$(2)/path)/$(1)

  .PHONY: $$(path)

  $$(path):
	+$$(MAKE) --no-print-directory target=$(1) top=$(2) $$@
endef