Blame view
scripts/Makefile.build
12.1 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 |
# ========================================================================== # Building # ========================================================================== src := $(obj) |
4f1933620 kbuild: change kb... |
6 |
PHONY := __build |
1da177e4c Linux-2.6.12-rc2 |
7 |
__build: |
d72e5edbf kbuild: avoid env... |
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 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 := targets := subdir-y := subdir-m := EXTRA_AFLAGS := EXTRA_CFLAGS := EXTRA_CPPFLAGS := EXTRA_LDFLAGS := |
f77bf0142 kbuild: introduce... |
23 24 25 26 |
asflags-y := ccflags-y := cppflags-y := ldflags-y := |
d72e5edbf kbuild: avoid env... |
27 |
|
720097d89 kbuild: introduce... |
28 29 |
subdir-asflags-y := subdir-ccflags-y := |
3156fd052 kbuild: fix some ... |
30 |
# Read auto.conf if it exists, otherwise ignore |
c955ccafc kconfig: fix .con... |
31 |
-include include/config/auto.conf |
1da177e4c Linux-2.6.12-rc2 |
32 |
|
20a468b51 kbuild: make cc-v... |
33 |
include scripts/Kbuild.include |
3156fd052 kbuild: fix some ... |
34 |
# For backward compatibility check that these variables do not change |
0c53c8e6e kbuild: check for... |
35 |
save-cflags := $(CFLAGS) |
2a6914703 kbuild: fix make ... |
36 |
# The filename Kbuild has precedence over Makefile |
db8c1a7b2 kbuild: fix build... |
37 |
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) |
0c53c8e6e kbuild: check for... |
38 39 40 41 42 43 44 45 46 |
kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile) include $(kbuild-file) # If the save-* variables changed error out ifeq ($(KBUILD_NOPEDANTIC),) ifneq ("$(save-cflags)","$(CFLAGS)") $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS) endif endif |
1da177e4c Linux-2.6.12-rc2 |
47 48 49 50 51 52 53 54 |
include scripts/Makefile.lib ifdef host-progs ifneq ($(hostprogs-y),$(host-progs)) $(warning kbuild: $(obj)/Makefile - Usage of host-progs is deprecated. Please replace with hostprogs-y!) hostprogs-y += $(host-progs) endif endif |
3156fd052 kbuild: fix some ... |
55 |
# Do not include host rules unless needed |
1da177e4c Linux-2.6.12-rc2 |
56 57 58 59 60 61 62 63 64 65 66 67 |
ifneq ($(hostprogs-y)$(hostprogs-m),) include scripts/Makefile.host endif ifneq ($(KBUILD_SRC),) # Create output directory if not already present _dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) # Create directories for object files if directory does not exist # Needed when obj-y := dir/file.o syntax is used _dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d))) endif |
1da177e4c Linux-2.6.12-rc2 |
68 69 70 71 72 73 74 75 76 |
ifndef obj $(warning kbuild: Makefile.build is included improperly) endif # =========================================================================== ifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),) lib-target := $(obj)/lib.a endif |
4b024242e kbuild: Fix linki... |
77 |
ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(subdir-m) $(lib-target)),) |
1da177e4c Linux-2.6.12-rc2 |
78 79 |
builtin-target := $(obj)/built-in.o endif |
551559e13 kbuild: implement... |
80 |
modorder-target := $(obj)/modules.order |
1da177e4c Linux-2.6.12-rc2 |
81 82 83 |
# We keep a list of all modules in $(MODVERDIR) __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \ |
551559e13 kbuild: implement... |
84 |
$(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \ |
1da177e4c Linux-2.6.12-rc2 |
85 86 87 88 89 90 91 92 93 94 95 96 97 |
$(subdir-ym) $(always) @: # Linus' kernel sanity checking tool ifneq ($(KBUILD_CHECKSRC),0) ifeq ($(KBUILD_CHECKSRC),2) quiet_cmd_force_checksrc = CHECK $< cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ; else quiet_cmd_checksrc = CHECK $< cmd_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ; endif endif |
91341d4b2 kbuild: introduce... |
98 99 100 101 |
# Do section mismatch analysis for each module/built-in.o ifdef CONFIG_DEBUG_SECTION_MISMATCH cmd_secanalysis = ; scripts/mod/modpost $@ endif |
1da177e4c Linux-2.6.12-rc2 |
102 103 104 105 106 |
# Compile C sources (.c) # --------------------------------------------------------------------------- # Default is built-in, unless we know otherwise |
6588169d5 kbuild: allow ass... |
107 108 109 |
modkern_cflags = \ $(if $(part-of-module), \ $(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE), \ |
80c00ba94 kbuild: allow ass... |
110 |
$(KBUILD_CFLAGS_KERNEL) $(CFLAGS_KERNEL)) |
1da177e4c Linux-2.6.12-rc2 |
111 |
quiet_modtag := $(empty) $(empty) |
18c167fd6 ftrace, ia64: mak... |
112 113 114 115 |
$(real-objs-m) : part-of-module := y $(real-objs-m:.o=.i) : part-of-module := y $(real-objs-m:.o=.s) : part-of-module := y $(real-objs-m:.o=.lst): part-of-module := y |
1da177e4c Linux-2.6.12-rc2 |
116 117 118 119 120 121 122 123 124 |
$(real-objs-m) : quiet_modtag := [M] $(real-objs-m:.o=.i) : quiet_modtag := [M] $(real-objs-m:.o=.s) : quiet_modtag := [M] $(real-objs-m:.o=.lst): quiet_modtag := [M] $(obj-m) : quiet_modtag := [M] # Default for not multi-part modules |
5e8d780d7 kbuild: fix ia64 ... |
125 |
modname = $(basetarget) |
1da177e4c Linux-2.6.12-rc2 |
126 127 128 129 130 131 132 133 134 135 136 |
$(multi-objs-m) : modname = $(modname-multi) $(multi-objs-m:.o=.i) : modname = $(modname-multi) $(multi-objs-m:.o=.s) : modname = $(modname-multi) $(multi-objs-m:.o=.lst) : modname = $(modname-multi) $(multi-objs-y) : modname = $(modname-multi) $(multi-objs-y:.o=.i) : modname = $(modname-multi) $(multi-objs-y:.o=.s) : modname = $(modname-multi) $(multi-objs-y:.o=.lst) : modname = $(modname-multi) quiet_cmd_cc_s_c = CC $(quiet_modtag) $@ |
7d1859835 kbuild: add -fver... |
137 |
cmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $< |
1da177e4c Linux-2.6.12-rc2 |
138 |
|
767e581d7 kbuild: enable us... |
139 |
$(obj)/%.s: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
140 141 142 143 |
$(call if_changed_dep,cc_s_c) quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@ cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $< |
767e581d7 kbuild: enable us... |
144 |
$(obj)/%.i: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
145 |
$(call if_changed_dep,cc_i_c) |
2ea038917 Revert "kbuild: s... |
146 |
cmd_gensymtypes = \ |
37a8d9f67 kbuild: simplify ... |
147 |
$(CPP) -D__GENKSYMS__ $(c_flags) $< | \ |
e26d6b834 Makefile.build: m... |
148 |
$(GENKSYMS) $(if $(1), -T $(2)) -a $(ARCH) \ |
37a8d9f67 kbuild: simplify ... |
149 |
$(if $(KBUILD_PRESERVE),-p) \ |
e26d6b834 Makefile.build: m... |
150 |
-r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null)) |
37a8d9f67 kbuild: simplify ... |
151 |
|
15fde6751 kbuild: support f... |
152 |
quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ |
37a8d9f67 kbuild: simplify ... |
153 154 |
cmd_cc_symtypes_c = \ set -e; \ |
e26d6b834 Makefile.build: m... |
155 |
$(call cmd_gensymtypes,true,$@) >/dev/null; \ |
37a8d9f67 kbuild: simplify ... |
156 |
test -s $@ || rm -f $@ |
15fde6751 kbuild: support f... |
157 |
|
767e581d7 kbuild: enable us... |
158 |
$(obj)/%.symtypes : $(src)/%.c FORCE |
64e6c1e12 genksyms: track s... |
159 |
$(call cmd,cc_symtypes_c) |
15fde6751 kbuild: support f... |
160 |
|
1da177e4c Linux-2.6.12-rc2 |
161 162 163 164 165 166 167 168 169 170 171 |
# 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) $@ ifndef CONFIG_MODVERSIONS cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< else # When module versioning is enabled the following steps are executed: |
2ea038917 Revert "kbuild: s... |
172 173 174 |
# o compile a .tmp_<file>.o from <file>.c # o if .tmp_<file>.o doesn't contain a __ksymtab version, i.e. does # not export symbols, we just rename .tmp_<file>.o to <file>.o and |
1da177e4c Linux-2.6.12-rc2 |
175 176 177 |
# are done. # 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... |
178 179 180 181 |
# that they are usable as a linker script # o generate <file>.o from .tmp_<file>.o using the linker to # replace the unresolved symbols __crc_exported_symbol with # the actual value of the checksum generated by genksyms |
1da177e4c Linux-2.6.12-rc2 |
182 |
|
2ea038917 Revert "kbuild: s... |
183 |
cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $< |
e26d6b834 Makefile.build: m... |
184 185 186 187 188 189 190 191 192 193 |
cmd_modversions = \ if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \ $(call cmd_gensymtypes,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ > $(@D)/.tmp_$(@F:.o=.ver); \ \ $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \ -T $(@D)/.tmp_$(@F:.o=.ver); \ rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver); \ else \ mv -f $(@D)/.tmp_$(@F) $@; \ |
1da177e4c Linux-2.6.12-rc2 |
194 195 |
fi; endif |
8da3821ba ftrace: create __... |
196 |
ifdef CONFIG_FTRACE_MCOUNT_RECORD |
66a570623 kbuild: fail buil... |
197 |
cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \ |
e6299d267 MIPS: Tracing: Ad... |
198 |
"$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \ |
b3acf29af ftrace, kbuild: c... |
199 |
"$(if $(CONFIG_64BIT),64,32)" \ |
18c167fd6 ftrace, ia64: mak... |
200 201 |
"$(OBJDUMP)" "$(OBJCOPY)" "$(CC)" "$(LD)" "$(NM)" "$(RM)" "$(MV)" \ "$(if $(part-of-module),1,0)" "$(@)"; |
8da3821ba ftrace: create __... |
202 |
endif |
1da177e4c Linux-2.6.12-rc2 |
203 |
define rule_cc_o_c |
6176aa9ae kbuild: consolida... |
204 205 |
$(call echo-cmd,checksrc) $(cmd_checksrc) \ $(call echo-cmd,cc_o_c) $(cmd_cc_o_c); \ |
1da177e4c Linux-2.6.12-rc2 |
206 |
$(cmd_modversions) \ |
c3c63b6be kbuild: echo the ... |
207 |
$(call echo-cmd,record_mcount) \ |
8da3821ba ftrace: create __... |
208 |
$(cmd_record_mcount) \ |
48f1f0589 kbuild: consisten... |
209 210 |
scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \ $(dot-target).tmp; \ |
2ea038917 Revert "kbuild: s... |
211 |
rm -f $(depfile); \ |
48f1f0589 kbuild: consisten... |
212 |
mv -f $(dot-target).tmp $(dot-target).cmd |
1da177e4c Linux-2.6.12-rc2 |
213 214 215 |
endef # Built-in and composite module parts |
767e581d7 kbuild: enable us... |
216 |
$(obj)/%.o: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
217 218 219 220 |
$(call cmd,force_checksrc) $(call if_changed_rule,cc_o_c) # Single-part modules are special since we need to mark them in $(MODVERDIR) |
767e581d7 kbuild: enable us... |
221 |
$(single-used-m): $(obj)/%.o: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
222 223 224 225 226 227 228 229 |
$(call cmd,force_checksrc) $(call if_changed_rule,cc_o_c) @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod) 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... |
230 |
$(obj)/%.lst: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
231 232 233 234 |
$(call if_changed_dep,cc_lst_c) # Compile assembler sources (.S) # --------------------------------------------------------------------------- |
80c00ba94 kbuild: allow ass... |
235 |
modkern_aflags := $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL) |
1da177e4c Linux-2.6.12-rc2 |
236 |
|
6588169d5 kbuild: allow ass... |
237 238 |
$(real-objs-m) : modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE) $(real-objs-m:.o=.s): modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE) |
1da177e4c Linux-2.6.12-rc2 |
239 240 241 |
quiet_cmd_as_s_S = CPP $(quiet_modtag) $@ cmd_as_s_S = $(CPP) $(a_flags) -o $@ $< |
767e581d7 kbuild: enable us... |
242 |
$(obj)/%.s: $(src)/%.S FORCE |
1da177e4c Linux-2.6.12-rc2 |
243 244 245 246 |
$(call if_changed_dep,as_s_S) quiet_cmd_as_o_S = AS $(quiet_modtag) $@ cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< |
767e581d7 kbuild: enable us... |
247 |
$(obj)/%.o: $(src)/%.S FORCE |
1da177e4c Linux-2.6.12-rc2 |
248 249 250 251 252 253 254 255 |
$(call if_changed_dep,as_o_S) targets += $(real-objs-y) $(real-objs-m) $(lib-y) targets += $(extra-y) $(MAKECMDGOALS) $(always) # Linker scripts preprocessor (.lds.S -> .lds) # --------------------------------------------------------------------------- quiet_cmd_cpp_lds_S = LDS $@ |
51b563fc9 arm, cris, mips, ... |
256 |
cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -C -U$(ARCH) \ |
42f29a252 kbuild: Don't def... |
257 |
-D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $< |
1da177e4c Linux-2.6.12-rc2 |
258 |
|
767e581d7 kbuild: enable us... |
259 |
$(obj)/%.lds: $(src)/%.lds.S FORCE |
1da177e4c Linux-2.6.12-rc2 |
260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 |
$(call if_changed_dep,cpp_lds_S) # Build the compiled-in targets # --------------------------------------------------------------------------- # To build objects in subdirs, we need to descend into the directories $(sort $(subdir-obj-y)): $(subdir-ym) ; # # Rule to compile a set of .o files into one .o file # ifdef builtin-target quiet_cmd_link_o_target = LD $@ # If the list of objects to link is empty, just create an empty built-in.o cmd_link_o_target = $(if $(strip $(obj-y)),\ |
91341d4b2 kbuild: introduce... |
275 276 |
$(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \ $(cmd_secanalysis),\ |
1da177e4c Linux-2.6.12-rc2 |
277 278 279 280 281 282 283 284 285 |
rm -f $@; $(AR) rcs $@) $(builtin-target): $(obj-y) FORCE $(call if_changed,link_o_target) targets += $(builtin-target) endif # builtin-target # |
551559e13 kbuild: implement... |
286 287 288 289 290 291 292 293 294 295 296 297 298 |
# Rule to create modules.order file # # Create commands to either record .ko file or cat modules.order from # a subdirectory modorder-cmds = \ $(foreach m, $(modorder), \ $(if $(filter %/modules.order, $m), \ cat $m;, echo kernel/$m;)) $(modorder-target): $(subdir-ym) FORCE $(Q)(cat /dev/null; $(modorder-cmds)) > $@ # |
1da177e4c Linux-2.6.12-rc2 |
299 300 301 302 |
# Rule to compile a set of .o files into one .a file # ifdef lib-target quiet_cmd_link_l_target = AR $@ |
5e54d5e5f kbuild: kill EXTR... |
303 |
cmd_link_l_target = rm -f $@; $(AR) rcs $@ $(lib-y) |
1da177e4c Linux-2.6.12-rc2 |
304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 |
$(lib-target): $(lib-y) FORCE $(call if_changed,link_l_target) targets += $(lib-target) endif # # Rule to link composite objects # # Composite objects are specified in kbuild makefile as follows: # <composite-object>-objs := <list of .o files> # or # <composite-object>-y := <list of .o files> link_multi_deps = \ $(filter $(addprefix $(obj)/, \ $($(subst $(obj)/,,$(@:.o=-objs))) \ $($(subst $(obj)/,,$(@:.o=-y)))), $^) quiet_cmd_link_multi-y = LD $@ |
91341d4b2 kbuild: introduce... |
324 |
cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis) |
1da177e4c Linux-2.6.12-rc2 |
325 326 |
quiet_cmd_link_multi-m = LD [M] $@ |
114f51577 kbuild: use LDFLA... |
327 |
cmd_link_multi-m = $(cmd_link_multi-y) |
1da177e4c Linux-2.6.12-rc2 |
328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 |
# We would rather have a list of rules like # foo.o: $(foo-objs) # but that's not so easy, so we rather make all composite objects depend # on the set of all their parts $(multi-used-y) : %.o: $(multi-objs-y) FORCE $(call if_changed,link_multi-y) $(multi-used-m) : %.o: $(multi-objs-m) FORCE $(call if_changed,link_multi-m) @{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod) targets += $(multi-used-y) $(multi-used-m) # Descending # --------------------------------------------------------------------------- |
4f1933620 kbuild: change kb... |
345 |
PHONY += $(subdir-ym) |
1da177e4c Linux-2.6.12-rc2 |
346 347 348 349 350 |
$(subdir-ym): $(Q)$(MAKE) $(build)=$@ # Add FORCE to the prequisites of a target to force it to be always rebuilt. # --------------------------------------------------------------------------- |
4f1933620 kbuild: change kb... |
351 |
PHONY += FORCE |
1da177e4c Linux-2.6.12-rc2 |
352 353 354 355 356 357 358 359 360 361 362 363 364 365 |
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. targets := $(wildcard $(sort $(targets))) cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) ifneq ($(cmd_files),) include $(cmd_files) endif |
4f1933620 kbuild: change kb... |
366 367 368 369 370 371 |
# Declare the contents of the .PHONY variable as phony. We keep that # information in a variable se we can use it in if_changed and friends. .PHONY: $(PHONY) |