10
# Read .config if it exist, otherwise ignore
14
CONFIG_MACH:= $(subst $(quote),,$(CONFIG_MACH))
16
include $(if $(wildcard $(obj)/Kbuild), $(obj)/Kbuild, $(obj)/Makefile)
10
# Init all relevant variables used in kbuild files so
11
# 1) they have correct type
12
# 2) they do not inherit any value from the environment
30
# Read auto.conf if it exists, otherwise ignore
31
-include include/config/auto.conf
33
include scripts/Kbuild.include
35
# For backward compatibility check that these variables do not change
36
save-cflags := $(CFLAGS)
38
# The filename Kbuild has precedence over Makefile
39
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
40
kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
41
include $(kbuild-file)
43
# If the save-* variables changed error out
44
ifeq ($(KBUILD_NOPEDANTIC),)
45
ifneq ("$(save-cflags)","$(CFLAGS)")
46
$(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS)
18
49
include scripts/Makefile.lib
27
# Do not include host rules unles needed
58
# Do not include host rules unless needed
28
59
ifneq ($(hostprogs-y)$(hostprogs-m),)
29
60
include scripts/Makefile.host
38
69
_dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d)))
43
$(warning kbuild: $(obj)/Makefile - Usage of EXTRA_TARGETS is obsolete in 2.6. Please fix!)
47
$(warning kbuild: $(obj)/Makefile - Usage of build-targets is obsolete in 2.6. Please fix!)
51
$(warning kbuild: $(obj)/Makefile - Usage of export-objs is obsolete in 2.6. Please fix!)
55
$(warning kbuild: $(obj)/Makefile - Usage of O_TARGET := $(O_TARGET) is obsolete in 2.6. Please fix!)
59
$(error kbuild: $(obj)/Makefile - Use of L_TARGET is replaced by lib-y in 2.6. Please fix!)
63
$(warning kbuild: $(obj)/Makefile - list-multi := $(list-multi) is obsolete in 2.6. Please fix!)
67
73
$(warning kbuild: Makefile.build is included improperly)
77
83
builtin-target := $(obj)/built-in.o
86
modorder-target := # $(obj)/modules.order
80
88
# We keep a list of all modules in $(MODVERDIR)
82
90
__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
83
$(if $(KBUILD_MODULES),$(obj-m)) \
91
$(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \
84
92
$(subdir-ym) $(always)
106
# Do section mismatch analysis for each module/built-in.o
107
ifdef CONFIG_DEBUG_SECTION_MISMATCH
108
cmd_secanalysis = ; scripts/mod/modpost $@
99
111
# Compile C sources (.c)
100
112
# ---------------------------------------------------------------------------
128
140
$(multi-objs-y:.o=.lst) : modname = $(modname-multi)
130
142
quiet_cmd_cc_s_c = CC $(quiet_modtag) $@
131
cmd_cc_s_c = $(CC) $(c_flags) -S -o $@ $<
143
cmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $<
145
$(obj)/%.s: $(src)/%.c FORCE
134
146
$(call if_changed_dep,cc_s_c)
136
148
quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@
137
149
cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $<
151
$(obj)/%.i: $(src)/%.c FORCE
140
152
$(call if_changed_dep,cc_i_c)
154
quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@
155
cmd_cc_symtypes_c = \
156
$(CPP) -D__GENKSYMS__ $(c_flags) $< \
157
| $(GENKSYMS) -T $@ >/dev/null; \
158
test -s $@ || rm -f $@
160
$(obj)/%.symtypes : $(src)/%.c FORCE
161
$(call if_changed_dep,cc_symtypes_c)
143
164
# The C file is compiled and updated dependency information is generated.
144
165
# (See cmd_cc_o_c + relevant part of rule_cc_o_c)
165
186
cmd_modversions = \
166
187
if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \
167
188
$(CPP) -D__GENKSYMS__ $(c_flags) $< \
189
| $(GENKSYMS) $(if $(KBUILD_SYMTYPES), \
190
-T $(@D)/$(@F:.o=.symtypes)) -a $(ARCH) \
169
191
> $(@D)/.tmp_$(@F:.o=.ver); \
171
193
$(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
172
194
-T $(@D)/.tmp_$(@F:.o=.ver); \
173
195
rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver); \
175
mv $(@D)/.tmp_$(@F) $@; \
197
mv -f $(@D)/.tmp_$(@F) $@; \
179
201
define rule_cc_o_c
180
$(if $($(quiet)cmd_checksrc),echo ' $($(quiet)cmd_checksrc)';) \
182
$(if $($(quiet)cmd_cc_o_c),echo ' $($(quiet)cmd_cc_o_c)';) \
202
$(call echo-cmd,checksrc) $(cmd_checksrc) \
203
$(call echo-cmd,cc_o_c) $(cmd_cc_o_c); \
184
204
$(cmd_modversions) \
185
scripts/basic/fixdep $(depfile) $@ '$(cmd_cc_o_c)' > $(@D)/.$(@F).tmp; \
205
scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \
186
207
rm -f $(depfile); \
187
mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd
208
mv -f $(dot-target).tmp $(dot-target).cmd
190
211
# Built-in and composite module parts
212
$(obj)/%.o: $(src)/%.c FORCE
193
213
$(call cmd,force_checksrc)
194
214
$(call if_changed_rule,cc_o_c)
196
216
# Single-part modules are special since we need to mark them in $(MODVERDIR)
198
$(single-used-m): %.o: %.c FORCE
218
$(single-used-m): $(obj)/%.o: $(src)/%.c FORCE
199
219
$(call cmd,force_checksrc)
200
220
$(call if_changed_rule,cc_o_c)
201
221
@{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
203
223
quiet_cmd_cc_lst_c = MKLST $@
204
224
cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
205
225
$(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \
206
apex.map $(OBJDUMP) > $@
226
System.map $(OBJDUMP) > $@
228
$(obj)/%.lst: $(src)/%.c FORCE
209
229
$(call if_changed_dep,cc_lst_c)
211
231
# Compile assembler sources (.S)
219
239
quiet_cmd_as_s_S = CPP $(quiet_modtag) $@
220
240
cmd_as_s_S = $(CPP) $(a_flags) -o $@ $<
242
$(obj)/%.s: $(src)/%.S FORCE
223
243
$(call if_changed_dep,as_s_S)
225
245
quiet_cmd_as_o_S = AS $(quiet_modtag) $@
226
246
cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
248
$(obj)/%.o: $(src)/%.S FORCE
229
249
$(call if_changed_dep,as_o_S)
231
251
targets += $(real-objs-y) $(real-objs-m) $(lib-y)
236
256
quiet_cmd_cpp_lds_S = LDS $@
237
257
cmd_cpp_lds_S = $(CPP) $(cpp_flags) -D__ASSEMBLY__ -o $@ $<
259
$(obj)/%.lds: $(src)/%.lds.S FORCE
240
260
$(call if_changed_dep,cpp_lds_S)
242
262
# Build the compiled-in targets
252
272
quiet_cmd_link_o_target = LD $@
253
273
# If the list of objects to link is empty, just create an empty built-in.o
254
274
cmd_link_o_target = $(if $(strip $(obj-y)),\
255
$(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^),\
275
$(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
256
277
rm -f $@; $(AR) rcs $@)
258
279
$(builtin-target): $(obj-y) FORCE
262
283
endif # builtin-target
286
# Rule to create modules.order file
288
# Create commands to either record .ko file or cat modules.order from
291
$(foreach m, $(modorder), \
292
$(if $(filter %/modules.order, $m), \
293
cat $m;, echo kernel/$m;))
295
$(modorder-target): $(subdir-ym) FORCE
296
$(Q)(cat /dev/null; $(modorder-cmds)) > $@
265
299
# Rule to compile a set of .o files into one .a file
268
302
quiet_cmd_link_l_target = AR $@
269
cmd_link_l_target = rm -f $@; $(AR) $(EXTRA_ARFLAGS) rcs $@ $(lib-y)
303
cmd_link_l_target = rm -f $@; $(AR) rcs $@ $(lib-y)
271
305
$(lib-target): $(lib-y) FORCE
272
306
$(call if_changed,link_l_target)
287
321
$($(subst $(obj)/,,$(@:.o=-y)))), $^)
289
323
quiet_cmd_link_multi-y = LD $@
290
cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps)
324
cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis)
292
326
quiet_cmd_link_multi-m = LD [M] $@
293
cmd_link_multi-m = $(LD) $(ld_flags) $(LDFLAGS_MODULE) -o $@ $(link_multi_deps)
327
cmd_link_multi-m = $(cmd_link_multi-y)
295
329
# We would rather have a list of rules like
296
330
# foo.o: $(foo-objs)