Blame view
scripts/Makefile.build
18.2 KB
b24413180 License cleanup: ... |
1 |
# SPDX-License-Identifier: GPL-2.0 |
1da177e4c Linux-2.6.12-rc2 |
2 3 4 5 6 |
# ========================================================================== # Building # ========================================================================== src := $(obj) |
4f1933620 kbuild: change kb... |
7 |
PHONY := __build |
1da177e4c Linux-2.6.12-rc2 |
8 |
__build: |
d72e5edbf kbuild: avoid env... |
9 10 11 12 13 14 15 16 |
# Init all relevant variables used in kbuild files so # 1) they have correct type # 2) they do not inherit any value from the environment obj-y := obj-m := lib-y := lib-m := always := |
5f2fb52fa kbuild: rename ho... |
17 18 |
always-y := always-m := |
d72e5edbf kbuild: avoid env... |
19 20 21 22 23 24 25 |
targets := subdir-y := subdir-m := EXTRA_AFLAGS := EXTRA_CFLAGS := EXTRA_CPPFLAGS := EXTRA_LDFLAGS := |
f77bf0142 kbuild: introduce... |
26 27 28 29 |
asflags-y := ccflags-y := cppflags-y := ldflags-y := |
d72e5edbf kbuild: avoid env... |
30 |
|
720097d89 kbuild: introduce... |
31 32 |
subdir-asflags-y := subdir-ccflags-y := |
3156fd052 kbuild: fix some ... |
33 |
# Read auto.conf if it exists, otherwise ignore |
c955ccafc kconfig: fix .con... |
34 |
-include include/config/auto.conf |
1da177e4c Linux-2.6.12-rc2 |
35 |
|
20a468b51 kbuild: make cc-v... |
36 |
include scripts/Kbuild.include |
2a6914703 kbuild: fix make ... |
37 |
# The filename Kbuild has precedence over Makefile |
db8c1a7b2 kbuild: fix build... |
38 |
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) |
0c53c8e6e kbuild: check for... |
39 40 |
kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile) include $(kbuild-file) |
1da177e4c Linux-2.6.12-rc2 |
41 |
include scripts/Makefile.lib |
85569d19d kbuild: sort host... |
42 43 44 |
# Do not include hostprogs rules unless needed. # $(sort ...) is used here to remove duplicated words and excessive spaces. hostprogs := $(sort $(hostprogs)) |
42640b134 kbuild: move host... |
45 |
ifneq ($(hostprogs),) |
1da177e4c Linux-2.6.12-rc2 |
46 47 |
include scripts/Makefile.host endif |
7f3a59db2 kbuild: add infra... |
48 |
# Do not include userprogs rules unless needed. |
85569d19d kbuild: sort host... |
49 |
# $(sort ...) is used here to remove duplicated words and excessive spaces. |
7f3a59db2 kbuild: add infra... |
50 51 52 53 |
userprogs := $(sort $(userprogs)) ifneq ($(userprogs),) include scripts/Makefile.userprogs endif |
1da177e4c Linux-2.6.12-rc2 |
54 55 56 |
ifndef obj $(warning kbuild: Makefile.build is included improperly) endif |
394053f4a kbuild: make sing... |
57 |
ifeq ($(need-modorder),) |
c07d8d47b kbuild: show hint... |
58 59 60 61 62 |
ifneq ($(obj-m),) $(warning $(patsubst %.o,'%.ko',$(obj-m)) will not be built even though obj-m is specified.) $(warning You cannot use subdir-y/m to visit a module Makefile. Use obj-y/m instead.) endif endif |
1da177e4c Linux-2.6.12-rc2 |
63 |
# =========================================================================== |
454753d9f kbuild: make modu... |
64 |
# subdir-builtin and subdir-modorder may contain duplications. Use $(sort ...) |
aaa385ba9 kbuild: rename su... |
65 |
subdir-builtin := $(sort $(filter %/built-in.a, $(real-obj-y))) |
b2c885549 kbuild: update mo... |
66 |
subdir-modorder := $(sort $(filter %/modules.order, $(obj-m))) |
6ba3bcb01 kbuild: move subd... |
67 |
|
f3908ab3f kbuild: refactor ... |
68 |
targets-for-builtin := $(extra-y) |
a4954fd77 kbuild: remove ob... |
69 |
ifneq ($(strip $(lib-y) $(lib-m) $(lib-)),) |
f3908ab3f kbuild: refactor ... |
70 |
targets-for-builtin += $(obj)/lib.a |
1da177e4c Linux-2.6.12-rc2 |
71 |
endif |
56d589361 kbuild: do not cr... |
72 |
ifdef need-builtin |
f3908ab3f kbuild: refactor ... |
73 |
targets-for-builtin += $(obj)/built-in.a |
1da177e4c Linux-2.6.12-rc2 |
74 |
endif |
b2c885549 kbuild: update mo... |
75 |
targets-for-modules := $(patsubst %.o, %.mod, $(filter %.o, $(obj-m))) |
f3908ab3f kbuild: refactor ... |
76 |
|
b480fec98 kbuild: clear KBU... |
77 |
ifdef need-modorder |
f3908ab3f kbuild: refactor ... |
78 |
targets-for-modules += $(obj)/modules.order |
1d8001ef3 kbuild: generate ... |
79 |
endif |
551559e13 kbuild: implement... |
80 |
|
f3908ab3f kbuild: refactor ... |
81 |
targets += $(targets-for-builtin) $(targets-for-modules) |
9f69a496f kbuild: split out... |
82 |
|
1da177e4c Linux-2.6.12-rc2 |
83 |
# Linus' kernel sanity checking tool |
7d0ea2524 kbuild: use 'else... |
84 85 |
ifeq ($(KBUILD_CHECKSRC),1) quiet_cmd_checksrc = CHECK $< |
e5d289100 kbuild: remove tr... |
86 |
cmd_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< |
7d0ea2524 kbuild: use 'else... |
87 88 |
else ifeq ($(KBUILD_CHECKSRC),2) quiet_cmd_force_checksrc = CHECK $< |
e5d289100 kbuild: remove tr... |
89 |
cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< |
1da177e4c Linux-2.6.12-rc2 |
90 |
endif |
e27128db6 kbuild: rename KB... |
91 |
ifneq ($(KBUILD_EXTRA_WARN),) |
e5d289100 kbuild: remove tr... |
92 |
cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $< |
3a025e1d1 Add optional chec... |
93 |
endif |
1da177e4c Linux-2.6.12-rc2 |
94 95 |
# Compile C sources (.c) # --------------------------------------------------------------------------- |
1da177e4c Linux-2.6.12-rc2 |
96 |
quiet_cmd_cc_s_c = CC $(quiet_modtag) $@ |
ba01e93b4 FROMLIST: kbuild:... |
97 |
cmd_cc_s_c = $(CC) $(filter-out $(DEBUG_CFLAGS) $(CC_FLAGS_LTO), $(c_flags)) -fverbose-asm -S -o $@ $< |
1da177e4c Linux-2.6.12-rc2 |
98 |
|
767e581d7 kbuild: enable us... |
99 |
$(obj)/%.s: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
100 |
$(call if_changed_dep,cc_s_c) |
23d438487 kbuild: rename cm... |
101 102 |
quiet_cmd_cpp_i_c = CPP $(quiet_modtag) $@ cmd_cpp_i_c = $(CPP) $(c_flags) -o $@ $< |
1da177e4c Linux-2.6.12-rc2 |
103 |
|
767e581d7 kbuild: enable us... |
104 |
$(obj)/%.i: $(src)/%.c FORCE |
23d438487 kbuild: rename cm... |
105 |
$(call if_changed_dep,cpp_i_c) |
1da177e4c Linux-2.6.12-rc2 |
106 |
|
4efca4ed0 kbuild: modversio... |
107 108 |
# These mirror gensymtypes_S and co below, keep them in synch. cmd_gensymtypes_c = \ |
37a8d9f67 kbuild: simplify ... |
109 |
$(CPP) -D__GENKSYMS__ $(c_flags) $< | \ |
88110713c kbuild: hardcode ... |
110 |
scripts/genksyms/genksyms $(if $(1), -T $(2)) \ |
56067812d kbuild: modversio... |
111 |
$(patsubst y,-R,$(CONFIG_MODULE_REL_CRCS)) \ |
37a8d9f67 kbuild: simplify ... |
112 |
$(if $(KBUILD_PRESERVE),-p) \ |
e26d6b834 Makefile.build: m... |
113 |
-r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null)) |
37a8d9f67 kbuild: simplify ... |
114 |
|
15fde6751 kbuild: support f... |
115 |
quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ |
37a8d9f67 kbuild: simplify ... |
116 |
cmd_cc_symtypes_c = \ |
4efca4ed0 kbuild: modversio... |
117 |
$(call cmd_gensymtypes_c,true,$@) >/dev/null; \ |
37a8d9f67 kbuild: simplify ... |
118 |
test -s $@ || rm -f $@ |
15fde6751 kbuild: support f... |
119 |
|
767e581d7 kbuild: enable us... |
120 |
$(obj)/%.symtypes : $(src)/%.c FORCE |
64e6c1e12 genksyms: track s... |
121 |
$(call cmd,cc_symtypes_c) |
15fde6751 kbuild: support f... |
122 |
|
433db3e26 kbuild: Add suppo... |
123 124 125 126 127 128 129 |
# LLVM assembly # Generate .ll files from .c quiet_cmd_cc_ll_c = CC $(quiet_modtag) $@ cmd_cc_ll_c = $(CC) $(c_flags) -emit-llvm -S -o $@ $< $(obj)/%.ll: $(src)/%.c FORCE $(call if_changed_dep,cc_ll_c) |
1da177e4c Linux-2.6.12-rc2 |
130 131 132 133 134 |
# C (.c) files # The C file is compiled and updated dependency information is generated. # (See cmd_cc_o_c + relevant part of rule_cc_o_c) quiet_cmd_cc_o_c = CC $(quiet_modtag) $@ |
ee3e46b7e kbuild: refactor ... |
135 |
cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< |
1da177e4c Linux-2.6.12-rc2 |
136 |
|
ee3e46b7e kbuild: refactor ... |
137 |
ifdef CONFIG_MODVERSIONS |
1da177e4c Linux-2.6.12-rc2 |
138 |
# When module versioning is enabled the following steps are executed: |
ee3e46b7e kbuild: refactor ... |
139 140 141 |
# o compile a <file>.o from <file>.c # o if <file>.o doesn't contain a __ksymtab version, i.e. does # not export symbols, it's done. |
1da177e4c Linux-2.6.12-rc2 |
142 143 |
# o otherwise, we calculate symbol versions using the good old # genksyms on the preprocessed source and postprocess them in a way |
2ea038917 Revert "kbuild: s... |
144 |
# that they are usable as a linker script |
ee3e46b7e kbuild: refactor ... |
145 |
# o generate .tmp_<file>.o from <file>.o using the linker to |
2ea038917 Revert "kbuild: s... |
146 147 |
# replace the unresolved symbols __crc_exported_symbol with # the actual value of the checksum generated by genksyms |
ee3e46b7e kbuild: refactor ... |
148 |
# o remove .tmp_<file>.o to <file>.o |
4efca4ed0 kbuild: modversio... |
149 |
|
93f3831e2 FROMLIST: kbuild:... |
150 151 152 153 154 155 156 157 158 |
ifdef CONFIG_LTO_CLANG # Generate .o.symversions files for each .o with exported symbols, and link these # to the kernel and/or modules at the end. cmd_modversions_c = \ if $(NM) $@ 2>/dev/null | grep -q __ksymtab; then \ $(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ > $@.symversions; \ fi; else |
4efca4ed0 kbuild: modversio... |
159 |
cmd_modversions_c = \ |
ee3e46b7e kbuild: refactor ... |
160 |
if $(OBJDUMP) -h $@ | grep -q __ksymtab; then \ |
4efca4ed0 kbuild: modversio... |
161 |
$(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ |
e26d6b834 Makefile.build: m... |
162 163 |
> $(@D)/.tmp_$(@F:.o=.ver); \ \ |
ee3e46b7e kbuild: refactor ... |
164 |
$(LD) $(KBUILD_LDFLAGS) -r -o $(@D)/.tmp_$(@F) $@ \ |
e26d6b834 Makefile.build: m... |
165 |
-T $(@D)/.tmp_$(@F:.o=.ver); \ |
e26d6b834 Makefile.build: m... |
166 |
mv -f $(@D)/.tmp_$(@F) $@; \ |
ee3e46b7e kbuild: refactor ... |
167 |
rm -f $(@D)/.tmp_$(@F:.o=.ver); \ |
e5d289100 kbuild: remove tr... |
168 |
fi |
1da177e4c Linux-2.6.12-rc2 |
169 |
endif |
93f3831e2 FROMLIST: kbuild:... |
170 |
endif |
1da177e4c Linux-2.6.12-rc2 |
171 |
|
450788232 FROMLIST: tracing... |
172 |
ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT |
07d040812 tracing: Avoid ca... |
173 |
# compiler will not generate __mcount_loc use recordmcount or recordmcount.pl |
72441cb1f ftrace/x86: Add s... |
174 |
ifdef BUILD_C_RECORDMCOUNT |
85356f802 kbuild/recordmcou... |
175 176 177 |
ifeq ("$(origin RECORDMCOUNT_WARN)", "command line") RECORDMCOUNT_FLAGS = -w endif |
d7b4d6de5 ftrace: Remove re... |
178 179 |
# Due to recursion, we must skip empty.o. # The empty.o file is created in the make process in order to determine |
312a3d091 kbuild: trivial c... |
180 181 |
# the target endianness and word size. It is made before all other C # files, including recordmcount. |
45677454d ftrace: Speed up ... |
182 183 |
sub_cmd_record_mcount = \ if [ $(@) != "scripts/mod/empty.o" ]; then \ |
85356f802 kbuild/recordmcou... |
184 |
$(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)"; \ |
45677454d ftrace: Speed up ... |
185 |
fi; |
d6971822c ftrace/kbuild: Ad... |
186 187 |
recordmcount_source := $(srctree)/scripts/recordmcount.c \ $(srctree)/scripts/recordmcount.h |
72441cb1f ftrace/x86: Add s... |
188 |
else |
4317ee3b6 kbuild: remove re... |
189 |
sub_cmd_record_mcount = perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \ |
e6299d267 MIPS: Tracing: Ad... |
190 |
"$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \ |
b3acf29af ftrace, kbuild: c... |
191 |
"$(if $(CONFIG_64BIT),64,32)" \ |
5a4630aad ftrace: Build wit... |
192 |
"$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS)" \ |
d503ac531 kbuild: rename LD... |
193 |
"$(LD) $(KBUILD_LDFLAGS)" "$(NM)" "$(RM)" "$(MV)" \ |
18c167fd6 ftrace, ia64: mak... |
194 |
"$(if $(part-of-module),1,0)" "$(@)"; |
d6971822c ftrace/kbuild: Ad... |
195 |
recordmcount_source := $(srctree)/scripts/recordmcount.pl |
312a3d091 kbuild: trivial c... |
196 |
endif # BUILD_C_RECORDMCOUNT |
1a49b2fd8 kbuild: strip whi... |
197 198 |
cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)), \ $(sub_cmd_record_mcount)) |
450788232 FROMLIST: tracing... |
199 |
endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT |
8da3821ba ftrace: create __... |
200 |
|
b9ab5ebb1 objtool: Add CONF... |
201 |
ifdef CONFIG_STACK_VALIDATION |
6dd43b98c FROMLIST: kbuild:... |
202 |
ifndef CONFIG_LTO_CLANG |
3b27a0c85 objtool: Detect a... |
203 |
ifneq ($(SKIP_STACK_VALIDATION),1) |
b9ab5ebb1 objtool: Add CONF... |
204 205 |
__objtool_obj := $(objtree)/tools/objtool/objtool |
b9ab5ebb1 objtool: Add CONF... |
206 207 208 209 210 |
# 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory # 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file # 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file cmd_objtool = $(if $(patsubst y%,, \ $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \ |
e5d289100 kbuild: remove tr... |
211 |
$(__objtool_obj) $(objtool_args) $@) |
b9ab5ebb1 objtool: Add CONF... |
212 213 214 |
objtool_obj = $(if $(patsubst y%,, \ $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \ $(__objtool_obj)) |
3b27a0c85 objtool: Detect a... |
215 |
endif # SKIP_STACK_VALIDATION |
6dd43b98c FROMLIST: kbuild:... |
216 |
endif # CONFIG_LTO_CLANG |
b9ab5ebb1 objtool: Add CONF... |
217 |
endif # CONFIG_STACK_VALIDATION |
ee9f8fce9 x86/unwind: Add t... |
218 219 220 221 |
# Rebuild all objects when objtool changes, or is enabled/disabled. objtool_dep = $(objtool_obj) \ $(wildcard include/config/orc/unwinder.h \ include/config/stack/validation.h) |
bbda5ec67 kbuild: simplify ... |
222 223 |
ifdef CONFIG_TRIM_UNUSED_KSYMS cmd_gen_ksymdeps = \ |
e5d289100 kbuild: remove tr... |
224 |
$(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> $(dot-target).cmd |
7d32358be kbuild: avoid spl... |
225 226 227 |
# List module undefined symbols undefined_syms = $(NM) $< | $(AWK) '$$1 == "U" { printf("%s%s", x++ ? " " : "", $$2) }'; |
bbda5ec67 kbuild: simplify ... |
228 |
endif |
1da177e4c Linux-2.6.12-rc2 |
229 |
define rule_cc_o_c |
3a2429e1f kbuild: change if... |
230 231 |
$(call cmd_and_fixdep,cc_o_c) $(call cmd,gen_ksymdeps) |
0c33f1257 kbuild: run the c... |
232 |
$(call cmd,checksrc) |
3a2429e1f kbuild: change if... |
233 234 235 236 |
$(call cmd,checkdoc) $(call cmd,objtool) $(call cmd,modversions_c) $(call cmd,record_mcount) |
1da177e4c Linux-2.6.12-rc2 |
237 |
endef |
b9ab5ebb1 objtool: Add CONF... |
238 |
define rule_as_o_S |
3a2429e1f kbuild: change if... |
239 240 241 242 |
$(call cmd_and_fixdep,as_o_S) $(call cmd,gen_ksymdeps) $(call cmd,objtool) $(call cmd,modversions_S) |
b9ab5ebb1 objtool: Add CONF... |
243 |
endef |
1da177e4c Linux-2.6.12-rc2 |
244 |
# Built-in and composite module parts |
ee9f8fce9 x86/unwind: Add t... |
245 |
$(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE |
1da177e4c Linux-2.6.12-rc2 |
246 |
$(call if_changed_rule,cc_o_c) |
0c33f1257 kbuild: run the c... |
247 |
$(call cmd,force_checksrc) |
1da177e4c Linux-2.6.12-rc2 |
248 |
|
631b20dd6 ANDROID: kbuild: ... |
249 250 251 252 253 |
cmd_mod = $(file >$@,\ $(if $($*-objs)$($*-y)$($*-m), \ $(addprefix $(obj)/, $($*-objs) $($*-y) $($*-m)), \ $(@:.mod=.o))) \ $(undefined_syms) echo >> $@ |
9f69a496f kbuild: split out... |
254 255 256 |
$(obj)/%.mod: $(obj)/%.o FORCE $(call if_changed,mod) |
1da177e4c Linux-2.6.12-rc2 |
257 258 259 260 |
quiet_cmd_cc_lst_c = MKLST $@ cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \ $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \ System.map $(OBJDUMP) > $@ |
767e581d7 kbuild: enable us... |
261 |
$(obj)/%.lst: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
262 263 264 265 |
$(call if_changed_dep,cc_lst_c) # Compile assembler sources (.S) # --------------------------------------------------------------------------- |
4efca4ed0 kbuild: modversio... |
266 267 268 269 270 271 272 273 274 275 276 277 |
# .S file exports must have their C prototypes defined in asm/asm-prototypes.h # or a file that it includes, in order to get versioned symbols. We build a # dummy C file that includes asm-prototypes and the EXPORT_SYMBOL lines from # the .S file (with trailing ';'), and run genksyms on that, to extract vers. # # This is convoluted. The .S file must first be preprocessed to run guards and # expand names, then the resulting exports must be constructed into plain # EXPORT_SYMBOL(symbol); to build our dummy C file, and that gets preprocessed # to make the genksyms input. # # These mirror gensymtypes_c and co above, keep them in synch. cmd_gensymtypes_S = \ |
b79c6aa6a kbuild: remove un... |
278 |
{ echo "\#include <linux/kernel.h>" ; \ |
4efca4ed0 kbuild: modversio... |
279 280 |
echo "\#include <asm/asm-prototypes.h>" ; \ $(CPP) $(a_flags) $< | \ |
cc6acc11c kbuild: be more c... |
281 |
grep "\<___EXPORT_SYMBOL\>" | \ |
b79c6aa6a kbuild: remove un... |
282 |
sed 's/.*___EXPORT_SYMBOL[[:space:]]*\([a-zA-Z0-9_]*\)[[:space:]]*,.*/EXPORT_SYMBOL(\1);/' ; } | \ |
4efca4ed0 kbuild: modversio... |
283 |
$(CPP) -D__GENKSYMS__ $(c_flags) -xc - | \ |
88110713c kbuild: hardcode ... |
284 |
scripts/genksyms/genksyms $(if $(1), -T $(2)) \ |
56067812d kbuild: modversio... |
285 |
$(patsubst y,-R,$(CONFIG_MODULE_REL_CRCS)) \ |
4efca4ed0 kbuild: modversio... |
286 287 288 289 290 |
$(if $(KBUILD_PRESERVE),-p) \ -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null)) quiet_cmd_cc_symtypes_S = SYM $(quiet_modtag) $@ cmd_cc_symtypes_S = \ |
4efca4ed0 kbuild: modversio... |
291 292 293 294 295 |
$(call cmd_gensymtypes_S,true,$@) >/dev/null; \ test -s $@ || rm -f $@ $(obj)/%.symtypes : $(src)/%.S FORCE $(call cmd,cc_symtypes_S) |
e0f41e52d kbuild: rename cm... |
296 297 |
quiet_cmd_cpp_s_S = CPP $(quiet_modtag) $@ cmd_cpp_s_S = $(CPP) $(a_flags) -o $@ $< |
1da177e4c Linux-2.6.12-rc2 |
298 |
|
767e581d7 kbuild: enable us... |
299 |
$(obj)/%.s: $(src)/%.S FORCE |
e0f41e52d kbuild: rename cm... |
300 |
$(call if_changed_dep,cpp_s_S) |
1da177e4c Linux-2.6.12-rc2 |
301 302 |
quiet_cmd_as_o_S = AS $(quiet_modtag) $@ |
ee3e46b7e kbuild: refactor ... |
303 |
cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< |
4efca4ed0 kbuild: modversio... |
304 |
|
2ff2b7ec6 kbuild: add CONFI... |
305 |
ifdef CONFIG_ASM_MODVERSIONS |
4efca4ed0 kbuild: modversio... |
306 307 308 |
# versioning matches the C process described above, with difference that # we parse asm-prototypes.h C header to get function definitions. |
4efca4ed0 kbuild: modversio... |
309 |
cmd_modversions_S = \ |
ee3e46b7e kbuild: refactor ... |
310 |
if $(OBJDUMP) -h $@ | grep -q __ksymtab; then \ |
4efca4ed0 kbuild: modversio... |
311 312 313 |
$(call cmd_gensymtypes_S,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ > $(@D)/.tmp_$(@F:.o=.ver); \ \ |
ee3e46b7e kbuild: refactor ... |
314 |
$(LD) $(KBUILD_LDFLAGS) -r -o $(@D)/.tmp_$(@F) $@ \ |
4efca4ed0 kbuild: modversio... |
315 |
-T $(@D)/.tmp_$(@F:.o=.ver); \ |
4efca4ed0 kbuild: modversio... |
316 |
mv -f $(@D)/.tmp_$(@F) $@; \ |
ee3e46b7e kbuild: refactor ... |
317 |
rm -f $(@D)/.tmp_$(@F:.o=.ver); \ |
e5d289100 kbuild: remove tr... |
318 |
fi |
4efca4ed0 kbuild: modversio... |
319 |
endif |
1da177e4c Linux-2.6.12-rc2 |
320 |
|
ee9f8fce9 x86/unwind: Add t... |
321 |
$(obj)/%.o: $(src)/%.S $(objtool_dep) FORCE |
b9ab5ebb1 objtool: Add CONF... |
322 |
$(call if_changed_rule,as_o_S) |
1da177e4c Linux-2.6.12-rc2 |
323 |
|
b2c885549 kbuild: update mo... |
324 325 326 |
targets += $(filter-out $(subdir-builtin), $(real-obj-y)) targets += $(filter-out $(subdir-modorder), $(real-obj-m)) targets += $(lib-y) $(always-y) $(MAKECMDGOALS) |
1da177e4c Linux-2.6.12-rc2 |
327 328 329 330 |
# Linker scripts preprocessor (.lds.S -> .lds) # --------------------------------------------------------------------------- quiet_cmd_cpp_lds_S = LDS $@ |
5cb0512c0 Kbuild: don't pas... |
331 |
cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -U$(ARCH) \ |
42f29a252 kbuild: Don't def... |
332 |
-D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $< |
1da177e4c Linux-2.6.12-rc2 |
333 |
|
767e581d7 kbuild: enable us... |
334 |
$(obj)/%.lds: $(src)/%.lds.S FORCE |
1da177e4c Linux-2.6.12-rc2 |
335 |
$(call if_changed_dep,cpp_lds_S) |
4520c6a49 X.509: Add simple... |
336 337 |
# ASN.1 grammar # --------------------------------------------------------------------------- |
49d5089d9 kbuild: use $(bas... |
338 |
quiet_cmd_asn1_compiler = ASN.1 $(basename $@).[ch] |
4520c6a49 X.509: Add simple... |
339 |
cmd_asn1_compiler = $(objtree)/scripts/asn1_compiler $< \ |
49d5089d9 kbuild: use $(bas... |
340 |
$(basename $@).c $(basename $@).h |
4520c6a49 X.509: Add simple... |
341 |
|
4fa8bc949 kbuild: rename *-... |
342 |
$(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler |
4520c6a49 X.509: Add simple... |
343 |
$(call cmd,asn1_compiler) |
1da177e4c Linux-2.6.12-rc2 |
344 345 346 347 |
# Build the compiled-in targets # --------------------------------------------------------------------------- # To build objects in subdirs, we need to descend into the directories |
aaa385ba9 kbuild: rename su... |
348 |
$(subdir-builtin): $(obj)/%/built-in.a: $(obj)/% ; |
454753d9f kbuild: make modu... |
349 |
$(subdir-modorder): $(obj)/%/modules.order: $(obj)/% ; |
1da177e4c Linux-2.6.12-rc2 |
350 |
|
93f3831e2 FROMLIST: kbuild:... |
351 352 353 354 355 356 357 358 359 360 361 |
# combine symversions for later processing quiet_cmd_update_lto_symversions = SYMVER $@ ifeq ($(CONFIG_LTO_CLANG) $(CONFIG_MODVERSIONS),y y) cmd_update_lto_symversions = \ rm -f $@.symversions \ $(foreach n, $(filter-out FORCE,$^), \ $(if $(wildcard $(n).symversions), \ ; cat $(n).symversions >> $@.symversions)) else cmd_update_lto_symversions = echo >/dev/null endif |
1da177e4c Linux-2.6.12-rc2 |
362 |
# |
dee949530 kbuild: remove to... |
363 |
# Rule to compile a set of .o files into one .a file (without symbol table) |
1da177e4c Linux-2.6.12-rc2 |
364 |
# |
a5967db9a kbuild: allow arc... |
365 |
|
5e18f0290 kbuild: clean up ... |
366 |
quiet_cmd_ar_builtin = AR $@ |
13dc8c029 kbuild: remove ar... |
367 |
cmd_ar_builtin = rm -f $@; $(AR) cDPrST $@ $(real-prereqs) |
1da177e4c Linux-2.6.12-rc2 |
368 |
|
93f3831e2 FROMLIST: kbuild:... |
369 370 |
quiet_cmd_ar_and_symver = AR $@ cmd_ar_and_symver = $(cmd_update_lto_symversions); $(cmd_ar_builtin) |
e578edc72 kbuild: remove if... |
371 |
$(obj)/built-in.a: $(real-obj-y) FORCE |
93f3831e2 FROMLIST: kbuild:... |
372 |
$(call if_changed,ar_and_symver) |
1da177e4c Linux-2.6.12-rc2 |
373 |
|
1da177e4c Linux-2.6.12-rc2 |
374 |
# |
551559e13 kbuild: implement... |
375 376 377 378 |
# Rule to create modules.order file # # Create commands to either record .ko file or cat modules.order from # a subdirectory |
b2c885549 kbuild: update mo... |
379 380 381 382 383 |
# Add $(obj-m) as the prerequisite to avoid updating the timestamp of # modules.order unless contained modules are updated. cmd_modules_order = { $(foreach m, $(real-prereqs), \ $(if $(filter %/modules.order, $m), cat $m, echo $(patsubst %.o,%.ko,$m));) :; } \ |
e0e1b1ec3 kbuild: remove du... |
384 |
| $(AWK) '!x[$$0]++' - > $@ |
551559e13 kbuild: implement... |
385 |
|
b2c885549 kbuild: update mo... |
386 387 |
$(obj)/modules.order: $(obj-m) FORCE $(call if_changed,modules_order) |
551559e13 kbuild: implement... |
388 |
# |
dee949530 kbuild: remove to... |
389 |
# Rule to compile a set of .o files into one .a file (with symbol table) |
1da177e4c Linux-2.6.12-rc2 |
390 |
# |
93f3831e2 FROMLIST: kbuild:... |
391 392 |
quiet_cmd_ar_lib = AR $@ cmd_ar_lib = $(cmd_update_lto_symversions); $(cmd_ar) |
e578edc72 kbuild: remove if... |
393 |
$(obj)/lib.a: $(lib-y) FORCE |
93f3831e2 FROMLIST: kbuild:... |
394 |
$(call if_changed,ar_lib) |
1da177e4c Linux-2.6.12-rc2 |
395 |
|
afa974b77 kbuild: add real-... |
396 397 398 399 |
# NOTE: # Do not replace $(filter %.o,^) with $(real-prereqs). When a single object # module is turned into a multi object module, $^ will contain header file # dependencies recorded in the .*.cmd file. |
ba01e93b4 FROMLIST: kbuild:... |
400 401 402 |
ifdef CONFIG_LTO_CLANG quiet_cmd_link_multi-m = AR [M] $@ cmd_link_multi-m = \ |
93f3831e2 FROMLIST: kbuild:... |
403 |
$(cmd_update_lto_symversions); \ |
ba01e93b4 FROMLIST: kbuild:... |
404 |
rm -f $@; \ |
f50aeaf27 ANDROID: kbuild: ... |
405 406 407 |
$(file >$@.in,$(filter %.o,$^)) \ $(AR) cDPrsT $@ @$@.in; \ rm -f $@.in |
ba01e93b4 FROMLIST: kbuild:... |
408 |
else |
1da177e4c Linux-2.6.12-rc2 |
409 |
quiet_cmd_link_multi-m = LD [M] $@ |
f50aeaf27 ANDROID: kbuild: ... |
410 411 412 413 |
cmd_link_multi-m = \ $(file >$@.in,$(filter %.o,$^)) \ $(LD) $(ld_flags) -r -o $@ @$@.in; \ rm -f $@.in |
ba01e93b4 FROMLIST: kbuild:... |
414 |
endif |
1da177e4c Linux-2.6.12-rc2 |
415 |
|
c8589d1e9 kbuild: handle mu... |
416 |
$(multi-used-m): FORCE |
1da177e4c Linux-2.6.12-rc2 |
417 |
$(call if_changed,link_multi-m) |
cf4f21938 kbuild: Allow to ... |
418 |
$(call multi_depend, $(multi-used-m), .o, -objs -y -m) |
1da177e4c Linux-2.6.12-rc2 |
419 |
|
f98fe47ce kbuild: link $(re... |
420 |
targets += $(multi-used-m) |
591f66899 kbuild: filter-ou... |
421 |
targets := $(filter-out $(PHONY), $(targets)) |
1da177e4c Linux-2.6.12-rc2 |
422 |
|
b23d1a241 kbuild: add %.lex... |
423 424 425 426 427 428 |
# Add intermediate targets: # When building objects with specific suffix patterns, add intermediate # targets that the final targets are derived from. intermediate_targets = $(foreach sfx, $(2), \ $(patsubst %$(strip $(1)),%$(sfx), \ $(filter %$(strip $(1)), $(targets)))) |
54a702f70 kbuild: mark $(ta... |
429 |
# %.asn1.o <- %.asn1.[ch] <- %.asn1 |
a7f924190 kbuild: add %.dtb... |
430 |
# %.dtb.o <- %.dtb.S <- %.dtb <- %.dts |
b23d1a241 kbuild: add %.lex... |
431 432 |
# %.lex.o <- %.lex.c <- %.l # %.tab.o <- %.tab.[ch] <- %.y |
54a702f70 kbuild: mark $(ta... |
433 434 |
targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \ $(call intermediate_targets, .dtb.o, .dtb.S .dtb) \ |
a7f924190 kbuild: add %.dtb... |
435 |
$(call intermediate_targets, .lex.o, .lex.c) \ |
b23d1a241 kbuild: add %.lex... |
436 |
$(call intermediate_targets, .tab.o, .tab.c .tab.h) |
394053f4a kbuild: make sing... |
437 438 439 440 |
# Build # --------------------------------------------------------------------------- ifdef single-build |
203126293 kbuild: reduce KB... |
441 |
KBUILD_SINGLE_TARGETS := $(filter $(obj)/%, $(KBUILD_SINGLE_TARGETS)) |
394053f4a kbuild: make sing... |
442 443 444 445 446 447 |
curdir-single := $(sort $(foreach x, $(KBUILD_SINGLE_TARGETS), \ $(if $(filter $(x) $(basename $(x)).o, $(targets)), $(x)))) # Handle single targets without any rule: show "Nothing to be done for ..." or # "No rule to make target ..." depending on whether the target exists. unknown-single := $(filter-out $(addsuffix /%, $(subdir-ym)), \ |
203126293 kbuild: reduce KB... |
448 |
$(filter-out $(curdir-single), $(KBUILD_SINGLE_TARGETS))) |
394053f4a kbuild: make sing... |
449 |
|
2dffd23f8 kbuild: make sing... |
450 451 452 453 |
single-subdirs := $(foreach d, $(subdir-ym), \ $(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d))) __build: $(curdir-single) $(single-subdirs) |
394053f4a kbuild: make sing... |
454 455 456 457 458 459 460 461 462 463 464 465 466 |
ifneq ($(unknown-single),) $(Q)$(MAKE) -f /dev/null $(unknown-single) endif @: ifeq ($(curdir-single),) # Nothing to do in this directory. Do not include any .*.cmd file for speed-up targets := else targets += $(curdir-single) endif else |
f3908ab3f kbuild: refactor ... |
467 468 |
__build: $(if $(KBUILD_BUILTIN), $(targets-for-builtin)) \ $(if $(KBUILD_MODULES), $(targets-for-modules)) \ |
5f2fb52fa kbuild: rename ho... |
469 |
$(subdir-ym) $(always-y) |
394053f4a kbuild: make sing... |
470 471 472 |
@: endif |
1da177e4c Linux-2.6.12-rc2 |
473 474 |
# Descending # --------------------------------------------------------------------------- |
4f1933620 kbuild: change kb... |
475 |
PHONY += $(subdir-ym) |
1da177e4c Linux-2.6.12-rc2 |
476 |
$(subdir-ym): |
d9f78edfd kbuild: fix false... |
477 |
$(Q)$(MAKE) $(build)=$@ \ |
394053f4a kbuild: make sing... |
478 |
$(if $(filter $@/, $(KBUILD_SINGLE_TARGETS)),single-build=) \ |
aaa385ba9 kbuild: rename su... |
479 |
need-builtin=$(if $(filter $@/built-in.a, $(subdir-builtin)),1) \ |
454753d9f kbuild: make modu... |
480 |
need-modorder=$(if $(filter $@/modules.order, $(subdir-modorder)),1) |
1da177e4c Linux-2.6.12-rc2 |
481 482 483 |
# Add FORCE to the prequisites of a target to force it to be always rebuilt. # --------------------------------------------------------------------------- |
4f1933620 kbuild: change kb... |
484 |
PHONY += FORCE |
1da177e4c Linux-2.6.12-rc2 |
485 486 487 488 489 490 491 |
FORCE: # Read all saved command lines and dependencies for the $(targets) we # may be building above, using $(if_changed{,_dep}). As an # optimization, we don't need to read them if the target does not # exist, we will rebuild anyway in that case. |
392885ee8 kbuild: let fixde... |
492 |
existing-targets := $(wildcard $(sort $(targets))) |
1da177e4c Linux-2.6.12-rc2 |
493 |
|
392885ee8 kbuild: let fixde... |
494 |
-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd) |
4f1933620 kbuild: change kb... |
495 |
|
8a78756eb kbuild: create ob... |
496 |
# Create directories for object files if they do not exist |
cc8a51ca6 kbuild: always cr... |
497 |
obj-dirs := $(sort $(patsubst %/,%, $(dir $(targets)))) |
392885ee8 kbuild: let fixde... |
498 499 500 |
# If targets exist, their directories apparently exist. Skip mkdir. existing-dirs := $(sort $(patsubst %/,%, $(dir $(existing-targets)))) obj-dirs := $(strip $(filter-out $(existing-dirs), $(obj-dirs))) |
c4da7ed0e kbuild: optimize ... |
501 |
ifneq ($(obj-dirs),) |
8a78756eb kbuild: create ob... |
502 503 |
$(shell mkdir -p $(obj-dirs)) endif |
4f1933620 kbuild: change kb... |
504 |
.PHONY: $(PHONY) |