0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 PHONY := __build
0013 __build:
0014
0015 ifeq ($(V),1)
0016 quiet =
0017 Q =
0018 else
0019 quiet=quiet_
0020 Q=@
0021 endif
0022
0023 ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
0024 quiet=silent_
0025 endif
0026
0027 build-dir := $(srctree)/tools/build
0028
0029
0030 ifeq ($(OUTPUT),)
0031 fixdep := $(build-dir)/fixdep
0032 else
0033 fixdep := $(OUTPUT)/fixdep
0034 endif
0035
0036
0037 include $(build-dir)/Build.include
0038
0039
0040 -include $(OUTPUT).config-detected
0041
0042
0043
0044
0045 subdir-y :=
0046 obj-y :=
0047 subdir-y :=
0048 subdir-obj-y :=
0049
0050
0051 build-file := $(dir)/Build
0052 -include $(build-file)
0053
0054 quiet_cmd_flex = FLEX $@
0055 quiet_cmd_bison = BISON $@
0056
0057
0058 quiet_cmd_mkdir = MKDIR $(dir $@)
0059 cmd_mkdir = mkdir -p $(dir $@)
0060 rule_mkdir = $(if $(wildcard $(dir $@)),,@$(call echo-cmd,mkdir) $(cmd_mkdir))
0061
0062
0063 quiet_cmd_cc_o_c = CC $@
0064 cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
0065
0066 quiet_cmd_host_cc_o_c = HOSTCC $@
0067 cmd_host_cc_o_c = $(HOSTCC) $(host_c_flags) -c -o $@ $<
0068
0069 quiet_cmd_cxx_o_c = CXX $@
0070 cmd_cxx_o_c = $(CXX) $(cxx_flags) -c -o $@ $<
0071
0072 quiet_cmd_cpp_i_c = CPP $@
0073 cmd_cpp_i_c = $(CC) $(c_flags) -E -o $@ $<
0074
0075 quiet_cmd_cc_s_c = AS $@
0076 cmd_cc_s_c = $(CC) $(c_flags) -S -o $@ $<
0077
0078 quiet_cmd_gen = GEN $@
0079
0080
0081
0082 quiet_cmd_ld_multi = LD $@
0083 cmd_ld_multi = $(if $(strip $(obj-y)),\
0084 $(LD) -r -o $@ $(filter $(obj-y),$^),rm -f $@; $(AR) rcs $@)
0085
0086 quiet_cmd_host_ld_multi = HOSTLD $@
0087 cmd_host_ld_multi = $(if $(strip $(obj-y)),\
0088 $(HOSTLD) -r -o $@ $(filter $(obj-y),$^),rm -f $@; $(HOSTAR) rcs $@)
0089
0090 ifneq ($(filter $(obj),$(hostprogs)),)
0091 host = host_
0092 endif
0093
0094
0095 $(OUTPUT)%.o: %.c FORCE
0096 $(call rule_mkdir)
0097 $(call if_changed_dep,$(host)cc_o_c)
0098
0099 $(OUTPUT)%.o: %.cpp FORCE
0100 $(call rule_mkdir)
0101 $(call if_changed_dep,cxx_o_c)
0102
0103 $(OUTPUT)%.o: %.S FORCE
0104 $(call rule_mkdir)
0105 $(call if_changed_dep,$(host)cc_o_c)
0106
0107 $(OUTPUT)%.i: %.c FORCE
0108 $(call rule_mkdir)
0109 $(call if_changed_dep,cpp_i_c)
0110
0111 $(OUTPUT)%.s: %.S FORCE
0112 $(call rule_mkdir)
0113 $(call if_changed_dep,cpp_i_c)
0114
0115 $(OUTPUT)%.s: %.c FORCE
0116 $(call rule_mkdir)
0117 $(call if_changed_dep,cc_s_c)
0118
0119
0120
0121
0122
0123 obj-y := $($(obj)-y)
0124 subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y)))
0125 obj-y := $(patsubst %/, %/$(obj)-in.o, $(obj-y))
0126 subdir-obj-y := $(filter %/$(obj)-in.o, $(obj-y))
0127
0128
0129 objprefix := $(subst ./,,$(OUTPUT)$(dir)/)
0130 obj-y := $(addprefix $(objprefix),$(obj-y))
0131 subdir-obj-y := $(addprefix $(objprefix),$(subdir-obj-y))
0132
0133
0134 in-target := $(objprefix)$(obj)-in.o
0135
0136 PHONY += $(subdir-y)
0137
0138 $(subdir-y):
0139 $(Q)$(MAKE) -f $(build-dir)/Makefile.build dir=$(dir)/$@ obj=$(obj)
0140
0141 $(sort $(subdir-obj-y)): $(subdir-y) ;
0142
0143 $(in-target): $(obj-y) FORCE
0144 $(call rule_mkdir)
0145 $(call if_changed,$(host)ld_multi)
0146
0147 __build: $(in-target)
0148 @:
0149
0150 PHONY += FORCE
0151 FORCE:
0152
0153
0154
0155 targets := $(wildcard $(sort $(obj-y) $(in-target) $(MAKECMDGOALS)))
0156 cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
0157
0158 ifneq ($(cmd_files),)
0159 include $(cmd_files)
0160 endif
0161
0162 .PHONY: $(PHONY)