Blame view

scripts/Makefile.build 11.4 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
  # ==========================================================================
  # Building
  # ==========================================================================
  
  src := $(obj)
4f1933620   Paul Smith   kbuild: change kb...
6
  PHONY := __build
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
  __build:
d72e5edbf   Sam Ravnborg   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   Sam Ravnborg   kbuild: introduce...
23
24
25
26
  asflags-y  :=
  ccflags-y  :=
  cppflags-y :=
  ldflags-y  :=
d72e5edbf   Sam Ravnborg   kbuild: avoid env...
27

3156fd052   Robert P. J. Day   kbuild: fix some ...
28
  # Read auto.conf if it exists, otherwise ignore
c955ccafc   Roman Zippel   kconfig: fix .con...
29
  -include include/config/auto.conf
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
30

20a468b51   Sam Ravnborg   kbuild: make cc-v...
31
  include scripts/Kbuild.include
3156fd052   Robert P. J. Day   kbuild: fix some ...
32
  # For backward compatibility check that these variables do not change
0c53c8e6e   Sam Ravnborg   kbuild: check for...
33
  save-cflags := $(CFLAGS)
2a6914703   Sam Ravnborg   kbuild: fix make ...
34
  # The filename Kbuild has precedence over Makefile
db8c1a7b2   Sam Ravnborg   kbuild: fix build...
35
  kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
0c53c8e6e   Sam Ravnborg   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   Linus Torvalds   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   Robert P. J. Day   kbuild: fix some ...
53
  # Do not include host rules unless needed
1da177e4c   Linus Torvalds   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   Linus Torvalds   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   Tejun Heo   kbuild: implement...
79
  modorder-target := $(obj)/modules.order
1da177e4c   Linus Torvalds   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   Tejun Heo   kbuild: implement...
83
  	 $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \
1da177e4c   Linus Torvalds   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   Sam Ravnborg   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   Linus Torvalds   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   Sam Ravnborg   kbuild: fix ia64 ...
122
  modname = $(basetarget)
1da177e4c   Linus Torvalds   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   Chuck Ebbert   kbuild: add -fver...
134
  cmd_cc_s_c       = $(CC) $(c_flags) -fverbose-asm -S -o $@ $<
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
135

767e581d7   Sam Ravnborg   kbuild: enable us...
136
  $(obj)/%.s: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   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   Sam Ravnborg   kbuild: enable us...
141
  $(obj)/%.i: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
142
  	$(call if_changed_dep,cc_i_c)
15fde6751   Andreas Gruenbacher   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   Sam Ravnborg   kbuild: enable us...
148
  $(obj)/%.symtypes : $(src)/%.c FORCE
15fde6751   Andreas Gruenbacher   kbuild: support f...
149
  	$(call if_changed_dep,cc_symtypes_c)
1da177e4c   Linus Torvalds   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   Andreas Gruenbacher   kbuild: support f...
176
177
  		| $(GENKSYMS) $(if $(KBUILD_SYMTYPES),			\
  			      -T $(@D)/$(@F:.o=.symtypes)) -a $(ARCH)	\
1da177e4c   Linus Torvalds   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   Sam Ravnborg   kbuild: Fix build...
184
  		mv -f $(@D)/.tmp_$(@F) $@;				\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
185
186
  	fi;
  endif
dce9d18ad   Steven Rostedt   ftrace: handle ge...
187
188
189
190
191
  ifdef CONFIG_64BIT
  arch_bits = 64
  else
  arch_bits = 32
  endif
8da3821ba   Steven Rostedt   ftrace: create __...
192
  ifdef CONFIG_FTRACE_MCOUNT_RECORD
b3a320417   Andrew Morton   kbuild: ftrace: d...
193
  cmd_record_mcount = perl $(srctree)/scripts/recordmcount.pl \
dce9d18ad   Steven Rostedt   ftrace: handle ge...
194
195
  	"$(ARCH)" "$(arch_bits)" "$(OBJDUMP)" "$(OBJCOPY)" "$(CC)" "$(LD)" \
  	"$(NM)" "$(RM)" "$(MV)" "$(@)";
8da3821ba   Steven Rostedt   ftrace: create __...
196
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
197
  define rule_cc_o_c
6176aa9ae   Jan Beulich   kbuild: consolida...
198
199
  	$(call echo-cmd,checksrc) $(cmd_checksrc)			  \
  	$(call echo-cmd,cc_o_c) $(cmd_cc_o_c);				  \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
200
  	$(cmd_modversions)						  \
8da3821ba   Steven Rostedt   ftrace: create __...
201
  	$(cmd_record_mcount)						  \
48f1f0589   Sam Ravnborg   kbuild: consisten...
202
203
  	scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' >    \
  	                                              $(dot-target).tmp;  \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
204
  	rm -f $(depfile);						  \
48f1f0589   Sam Ravnborg   kbuild: consisten...
205
  	mv -f $(dot-target).tmp $(dot-target).cmd
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
206
207
208
  endef
  
  # Built-in and composite module parts
767e581d7   Sam Ravnborg   kbuild: enable us...
209
  $(obj)/%.o: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   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   Sam Ravnborg   kbuild: enable us...
214
  $(single-used-m): $(obj)/%.o: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   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   Sam Ravnborg   kbuild: enable us...
223
  $(obj)/%.lst: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   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   Sam Ravnborg   kbuild: enable us...
236
  $(obj)/%.s: $(src)/%.S FORCE
1da177e4c   Linus Torvalds   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   Sam Ravnborg   kbuild: enable us...
241
  $(obj)/%.o: $(src)/%.S FORCE
1da177e4c   Linus Torvalds   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   Sam Ravnborg   kbuild: enable us...
251
  $(obj)/%.lds: $(src)/%.lds.S FORCE
1da177e4c   Linus Torvalds   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   Sam Ravnborg   kbuild: introduce...
267
268
  		      $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
  		      $(cmd_secanalysis),\
1da177e4c   Linus Torvalds   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   Tejun Heo   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   Linus Torvalds   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   Sam Ravnborg   kbuild: kill EXTR...
295
  cmd_link_l_target = rm -f $@; $(AR) rcs $@ $(lib-y)
1da177e4c   Linus Torvalds   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   Sam Ravnborg   kbuild: introduce...
316
  cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
317
318
  
  quiet_cmd_link_multi-m = LD [M]  $@
114f51577   Roland McGrath   kbuild: use LDFLA...
319
  cmd_link_multi-m = $(cmd_link_multi-y)
1da177e4c   Linus Torvalds   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   Paul Smith   kbuild: change kb...
337
  PHONY += $(subdir-ym)
1da177e4c   Linus Torvalds   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   Paul Smith   kbuild: change kb...
343
  PHONY += FORCE
1da177e4c   Linus Torvalds   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   Paul Smith   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)