OpenWrt – Blame information for rev 4
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
4 | office | 1 | # |
2 | # Copyright (C) 2007 OpenWrt.org |
||
3 | # |
||
4 | # This is free software, licensed under the GNU General Public License v2. |
||
5 | # See /LICENSE for more information. |
||
6 | # |
||
7 | |||
8 | ifeq ($(MAKECMDGOALS),prereq) |
||
9 | SUBTARGETS:=prereq |
||
10 | PREREQ_ONLY:=1 |
||
11 | else |
||
12 | SUBTARGETS:=$(DEFAULT_SUBDIR_TARGETS) |
||
13 | endif |
||
14 | |||
15 | subtarget-default = $(filter-out ., \ |
||
16 | $(if $($(1)/builddirs-$(2)),$($(1)/builddirs-$(2)), \ |
||
17 | $(if $($(1)/builddirs-default),$($(1)/builddirs-default), \ |
||
18 | $($(1)/builddirs)))) |
||
19 | |||
20 | define subtarget |
||
21 | $(call warn_eval,$(1),t,T,$(1)/$(2): $($(1)/) $(foreach bd,$(call subtarget-default,$(1),$(2)),$(1)/$(bd)/$(2))) |
||
22 | |||
23 | endef |
||
24 | |||
25 | define ERROR |
||
26 | ($(call MESSAGE, $(2)); $(if $(BUILD_LOG), echo "$(2)" >> $(BUILD_LOG_DIR)/$(1)/error.txt)) |
||
27 | endef |
||
28 | |||
29 | lastdir=$(word $(words $(subst /, ,$(1))),$(subst /, ,$(1))) |
||
30 | diralias=$(if $(findstring $(1),$(call lastdir,$(1))),,$(call lastdir,$(1))) |
||
31 | |||
32 | subdir_make_opts = \ |
||
33 | -r -C $(1) \ |
||
34 | BUILD_SUBDIR="$(1)" \ |
||
35 | BUILD_VARIANT="$(4)" |
||
36 | |||
37 | # 1: subdir |
||
38 | # 2: target |
||
39 | # 3: build type |
||
40 | # 4: build variant |
||
41 | log_make = \ |
||
42 | $(if $(call debug,$(1),v),,@)+ \ |
||
43 | $(if $(BUILD_LOG), \ |
||
44 | set -o pipefail; \ |
||
45 | mkdir -p $(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4));) \ |
||
46 | env time -f "time: $(1)$(if $(4),/$(4))/$(if $(3),$(3)-)$(2)\#%U\#%S\#%e" -- \ |
||
47 | $$(SUBMAKE) $(subdir_make_opts) $(if $(3),$(3)-)$(2) \ |
||
48 | $(if $(BUILD_LOG),SILENT= 2>&1 | tee $(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4))/$(if $(3),$(3)-)$(2).txt) |
||
49 | |||
50 | ifdef CONFIG_AUTOREMOVE |
||
51 | rebuild_check = \ |
||
52 | @-$$(NO_TRACE_MAKE) $(subdir_make_opts) check-depends >/dev/null 2>/dev/null; \ |
||
53 | $(if $(BUILD_LOG),mkdir -p $(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4));) \ |
||
54 | $$(NO_TRACE_MAKE) $(if $(BUILD_LOG),-d) -q $(subdir_make_opts) .$(if $(3),$(3)-)$(2) \ |
||
55 | > $(if $(BUILD_LOG),$(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4))/check-$(if $(3),$(3)-)$(2).txt,/dev/null) 2>&1 || \ |
||
56 | $$(SUBMAKE) $(subdir_make_opts) clean-build >/dev/null 2>/dev/null |
||
57 | |||
58 | endif |
||
59 | |||
60 | # Parameters: <subdir> |
||
61 | define subdir |
||
62 | $(call warn,$(1),d,D $(1)) |
||
63 | $(foreach bd,$($(1)/builddirs), |
||
64 | $(call warn,$(1),d,BD $(1)/$(bd)) |
||
65 | $(foreach target,$(SUBTARGETS) $($(1)/subtargets), |
||
66 | $(foreach btype,$(buildtypes-$(bd)), |
||
67 | $(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(btype)/$(target): $(if $(NO_DEPS)$(QUILT),,$($(1)/$(bd)/$(btype)/$(target)) $(call $(1)//$(btype)/$(target),$(1)/$(bd)/$(btype)))) |
||
68 | $(call log_make,$(1)/$(bd),$(target),$(btype),$(filter-out __default,$(variant))) \ |
||
69 | $(if $(findstring $(bd),$($(1)/builddirs-ignore-$(btype)-$(target))), || $(call ERROR,$(1), ERROR: $(1)/$(bd) [$(btype)] failed to build.)) |
||
70 | $(if $(call diralias,$(bd)),$(call warn_eval,$(1)/$(bd),l,T,$(1)/$(call diralias,$(bd))/$(btype)/$(target): $(1)/$(bd)/$(btype)/$(target))) |
||
71 | ) |
||
72 | $(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(target): $(if $(NO_DEPS)$(QUILT),,$($(1)/$(bd)/$(target)) $(call $(1)//$(target),$(1)/$(bd)))) |
||
73 | $(foreach variant,$(if $(BUILD_VARIANT),$(BUILD_VARIANT),$(if $(strip $($(1)/$(bd)/variants)),$($(1)/$(bd)/variants),$(if $($(1)/$(bd)/default-variant),$($(1)/$(bd)/default-variant),__default))), |
||
74 | $(if $(BUILD_LOG),@mkdir -p $(BUILD_LOG_DIR)/$(1)/$(bd)/$(filter-out __default,$(variant))) |
||
75 | $(if $($(1)/autoremove),$(call rebuild_check,$(1)/$(bd),$(target),,$(filter-out __default,$(variant)))) |
||
76 | $(call log_make,$(1)/$(bd),$(target),,$(filter-out __default,$(variant))) \ |
||
77 | $(if $(findstring $(bd),$($(1)/builddirs-ignore-$(target))), || $(call ERROR,$(1), ERROR: $(1)/$(bd) failed to build$(if $(filter-out __default,$(variant)), (build variant: $(variant))).)) |
||
78 | ) |
||
79 | $(if $(PREREQ_ONLY)$(DUMP_TARGET_DB),, |
||
80 | # aliases |
||
81 | $(if $(call diralias,$(bd)),$(call warn_eval,$(1)/$(bd),l,T,$(1)/$(call diralias,$(bd))/$(target): $(1)/$(bd)/$(target))) |
||
82 | ) |
||
83 | ) |
||
84 | ) |
||
85 | $(foreach target,$(SUBTARGETS) $($(1)/subtargets),$(call subtarget,$(1),$(target))) |
||
86 | endef |
||
87 | |||
88 | ifndef DUMP_TARGET_DB |
||
89 | # Parameters: <subdir> <name> <target> <depends> <config options> <stampfile location> |
||
90 | define stampfile |
||
91 | $(1)/stamp-$(3):=$(if $(6),$(6),$(STAGING_DIR))/stamp/.$(2)_$(3)$(5) |
||
92 | $$($(1)/stamp-$(3)): $(TMP_DIR)/.build $(4) |
||
93 | @+$(SCRIPT_DIR)/timestamp.pl -n $$($(1)/stamp-$(3)) $(1) $(4) || \ |
||
94 | $(MAKE) $(if $(QUIET),--no-print-directory) $$($(1)/flags-$(3)) $(1)/$(3) |
||
95 | @mkdir -p $$$$(dirname $$($(1)/stamp-$(3))) |
||
96 | @touch $$($(1)/stamp-$(3)) |
||
97 | |||
98 | $$(if $(call debug,$(1),v),,.SILENT: $$($(1)/stamp-$(3))) |
||
99 | |||
100 | .PRECIOUS: $$($(1)/stamp-$(3)) # work around a make bug |
||
101 | |||
102 | $(1)//clean:=$(1)/stamp-$(3)/clean |
||
103 | $(1)/stamp-$(3)/clean: FORCE |
||
104 | @rm -f $$($(1)/stamp-$(3)) |
||
105 | |||
106 | endef |
||
107 | endif |