Blame view
scripts/Makefile.build
11.4 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 |
|
3156fd052 kbuild: fix some ... |
28 |
# Read auto.conf if it exists, otherwise ignore |
c955ccafc kconfig: fix .con... |
29 |
-include include/config/auto.conf |
1da177e4c Linux-2.6.12-rc2 |
30 |
|
20a468b51 kbuild: make cc-v... |
31 |
include scripts/Kbuild.include |
3156fd052 kbuild: fix some ... |
32 |
# For backward compatibility check that these variables do not change |
0c53c8e6e kbuild: check for... |
33 |
save-cflags := $(CFLAGS) |
2a6914703 kbuild: fix make ... |
34 |
# The filename Kbuild has precedence over Makefile |
db8c1a7b2 kbuild: fix build... |
35 |
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) |
0c53c8e6e kbuild: check for... |
36 37 38 39 40 41 42 43 44 |
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 |
45 46 47 48 49 50 51 52 |
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 ... |
53 |
# Do not include host rules unless needed |
1da177e4c Linux-2.6.12-rc2 |
54 55 56 57 58 59 60 61 62 63 64 65 |
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 |
66 67 68 69 70 71 72 73 74 75 76 77 78 |
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 ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(lib-target)),) builtin-target := $(obj)/built-in.o endif |
551559e13 kbuild: implement... |
79 |
modorder-target := $(obj)/modules.order |
1da177e4c Linux-2.6.12-rc2 |
80 81 82 |
# We keep a list of all modules in $(MODVERDIR) __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \ |
551559e13 kbuild: implement... |
83 |
$(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \ |
1da177e4c Linux-2.6.12-rc2 |
84 85 86 87 88 89 90 91 92 93 94 95 96 |
$(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... |
97 98 99 100 |
# 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 |
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# Compile C sources (.c) # --------------------------------------------------------------------------- # Default is built-in, unless we know otherwise modkern_cflags := $(CFLAGS_KERNEL) quiet_modtag := $(empty) $(empty) $(real-objs-m) : modkern_cflags := $(CFLAGS_MODULE) $(real-objs-m:.o=.i) : modkern_cflags := $(CFLAGS_MODULE) $(real-objs-m:.o=.s) : modkern_cflags := $(CFLAGS_MODULE) $(real-objs-m:.o=.lst): modkern_cflags := $(CFLAGS_MODULE) $(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 ... |
122 |
modname = $(basetarget) |
1da177e4c Linux-2.6.12-rc2 |
123 124 125 126 127 128 129 130 131 132 133 |
$(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... |
134 |
cmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $< |
1da177e4c Linux-2.6.12-rc2 |
135 |
|
767e581d7 kbuild: enable us... |
136 |
$(obj)/%.s: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
137 138 139 140 |
$(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... |
141 |
$(obj)/%.i: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
142 |
$(call if_changed_dep,cc_i_c) |
15fde6751 kbuild: support f... |
143 144 145 146 147 |
quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ cmd_cc_symtypes_c = \ $(CPP) -D__GENKSYMS__ $(c_flags) $< \ | $(GENKSYMS) -T $@ >/dev/null; \ test -s $@ || rm -f $@ |
767e581d7 kbuild: enable us... |
148 |
$(obj)/%.symtypes : $(src)/%.c FORCE |
15fde6751 kbuild: support f... |
149 |
$(call if_changed_dep,cc_symtypes_c) |
1da177e4c Linux-2.6.12-rc2 |
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
# 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: # 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 # are done. # o otherwise, we calculate symbol versions using the good old # genksyms on the preprocessed source and postprocess them in a way # 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 cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $< cmd_modversions = \ if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \ $(CPP) -D__GENKSYMS__ $(c_flags) $< \ |
15fde6751 kbuild: support f... |
176 177 |
| $(GENKSYMS) $(if $(KBUILD_SYMTYPES), \ -T $(@D)/$(@F:.o=.symtypes)) -a $(ARCH) \ |
1da177e4c Linux-2.6.12-rc2 |
178 179 180 181 182 183 |
> $(@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 \ |
cfca82f21 kbuild: Fix build... |
184 |
mv -f $(@D)/.tmp_$(@F) $@; \ |
1da177e4c Linux-2.6.12-rc2 |
185 186 |
fi; endif |
dce9d18ad ftrace: handle ge... |
187 188 189 190 191 |
ifdef CONFIG_64BIT arch_bits = 64 else arch_bits = 32 endif |
8da3821ba ftrace: create __... |
192 |
ifdef CONFIG_FTRACE_MCOUNT_RECORD |
b3a320417 kbuild: ftrace: d... |
193 |
cmd_record_mcount = perl $(srctree)/scripts/recordmcount.pl \ |
dce9d18ad ftrace: handle ge... |
194 195 |
"$(ARCH)" "$(arch_bits)" "$(OBJDUMP)" "$(OBJCOPY)" "$(CC)" "$(LD)" \ "$(NM)" "$(RM)" "$(MV)" "$(@)"; |
8da3821ba ftrace: create __... |
196 |
endif |
1da177e4c Linux-2.6.12-rc2 |
197 |
define rule_cc_o_c |
6176aa9ae kbuild: consolida... |
198 199 |
$(call echo-cmd,checksrc) $(cmd_checksrc) \ $(call echo-cmd,cc_o_c) $(cmd_cc_o_c); \ |
1da177e4c Linux-2.6.12-rc2 |
200 |
$(cmd_modversions) \ |
8da3821ba ftrace: create __... |
201 |
$(cmd_record_mcount) \ |
48f1f0589 kbuild: consisten... |
202 203 |
scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \ $(dot-target).tmp; \ |
1da177e4c Linux-2.6.12-rc2 |
204 |
rm -f $(depfile); \ |
48f1f0589 kbuild: consisten... |
205 |
mv -f $(dot-target).tmp $(dot-target).cmd |
1da177e4c Linux-2.6.12-rc2 |
206 207 208 |
endef # Built-in and composite module parts |
767e581d7 kbuild: enable us... |
209 |
$(obj)/%.o: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
210 211 212 213 |
$(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... |
214 |
$(single-used-m): $(obj)/%.o: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
215 216 217 218 219 220 221 222 |
$(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... |
223 |
$(obj)/%.lst: $(src)/%.c FORCE |
1da177e4c Linux-2.6.12-rc2 |
224 225 226 227 228 229 230 231 232 233 234 235 |
$(call if_changed_dep,cc_lst_c) # Compile assembler sources (.S) # --------------------------------------------------------------------------- modkern_aflags := $(AFLAGS_KERNEL) $(real-objs-m) : modkern_aflags := $(AFLAGS_MODULE) $(real-objs-m:.o=.s): modkern_aflags := $(AFLAGS_MODULE) quiet_cmd_as_s_S = CPP $(quiet_modtag) $@ cmd_as_s_S = $(CPP) $(a_flags) -o $@ $< |
767e581d7 kbuild: enable us... |
236 |
$(obj)/%.s: $(src)/%.S FORCE |
1da177e4c Linux-2.6.12-rc2 |
237 238 239 240 |
$(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... |
241 |
$(obj)/%.o: $(src)/%.S FORCE |
1da177e4c Linux-2.6.12-rc2 |
242 243 244 245 246 247 248 249 250 |
$(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 $@ cmd_cpp_lds_S = $(CPP) $(cpp_flags) -D__ASSEMBLY__ -o $@ $< |
767e581d7 kbuild: enable us... |
251 |
$(obj)/%.lds: $(src)/%.lds.S FORCE |
1da177e4c Linux-2.6.12-rc2 |
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
$(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... |
267 268 |
$(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \ $(cmd_secanalysis),\ |
1da177e4c Linux-2.6.12-rc2 |
269 270 271 272 273 274 275 276 277 |
rm -f $@; $(AR) rcs $@) $(builtin-target): $(obj-y) FORCE $(call if_changed,link_o_target) targets += $(builtin-target) endif # builtin-target # |
551559e13 kbuild: implement... |
278 279 280 281 282 283 284 285 286 287 288 289 290 |
# 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 |
291 292 293 294 |
# 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... |
295 |
cmd_link_l_target = rm -f $@; $(AR) rcs $@ $(lib-y) |
1da177e4c Linux-2.6.12-rc2 |
296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 |
$(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... |
316 |
cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis) |
1da177e4c Linux-2.6.12-rc2 |
317 318 |
quiet_cmd_link_multi-m = LD [M] $@ |
114f51577 kbuild: use LDFLA... |
319 |
cmd_link_multi-m = $(cmd_link_multi-y) |
1da177e4c Linux-2.6.12-rc2 |
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 |
# 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... |
337 |
PHONY += $(subdir-ym) |
1da177e4c Linux-2.6.12-rc2 |
338 339 340 341 342 |
$(subdir-ym): $(Q)$(MAKE) $(build)=$@ # Add FORCE to the prequisites of a target to force it to be always rebuilt. # --------------------------------------------------------------------------- |
4f1933620 kbuild: change kb... |
343 |
PHONY += FORCE |
1da177e4c Linux-2.6.12-rc2 |
344 345 346 347 348 349 350 351 352 353 354 355 356 357 |
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... |
358 359 360 361 362 363 |
# 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) |