Blame view

scripts/Makefile.build 14.5 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

720097d89   Sam Ravnborg   kbuild: introduce...
28
29
  subdir-asflags-y :=
  subdir-ccflags-y :=
3156fd052   Robert P. J. Day   kbuild: fix some ...
30
  # Read auto.conf if it exists, otherwise ignore
c955ccafc   Roman Zippel   kconfig: fix .con...
31
  -include include/config/auto.conf
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
32

20a468b51   Sam Ravnborg   kbuild: make cc-v...
33
  include scripts/Kbuild.include
3156fd052   Robert P. J. Day   kbuild: fix some ...
34
  # For backward compatibility check that these variables do not change
0c53c8e6e   Sam Ravnborg   kbuild: check for...
35
  save-cflags := $(CFLAGS)
2a6914703   Sam Ravnborg   kbuild: fix make ...
36
  # The filename Kbuild has precedence over Makefile
db8c1a7b2   Sam Ravnborg   kbuild: fix build...
37
  kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
0c53c8e6e   Sam Ravnborg   kbuild: check for...
38
39
40
41
42
43
  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)")
49c57d254   Arnaud Lacombe   scripts/Makefile....
44
                  $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use ccflags-y)
0c53c8e6e   Sam Ravnborg   kbuild: check for...
45
46
          endif
  endif
4a5838ad9   Borislav Petkov   kbuild: Add extra...
47
48
  
  #
28bc20dcc   Sam Ravnborg   kbuild: implement...
49
  # make W=... settings
4a5838ad9   Borislav Petkov   kbuild: Add extra...
50
  #
28bc20dcc   Sam Ravnborg   kbuild: implement...
51
52
53
54
55
  # W=1 - warnings that may be relevant and does not occur too often
  # W=2 - warnings that occur quite often but may still be relevant
  # W=3 - the more obscure warnings, can most likely be ignored
  #
  # $(call cc-option, -W...) handles gcc -W.. options which
4a5838ad9   Borislav Petkov   kbuild: Add extra...
56
57
  # are not supported by all versions of the compiler
  ifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS
a6de553da   Michal Marek   kbuild: Allow to ...
58
  warning-  := $(empty)
28bc20dcc   Sam Ravnborg   kbuild: implement...
59
60
61
62
63
64
  warning-1 := -Wextra -Wunused -Wno-unused-parameter
  warning-1 += -Wmissing-declarations
  warning-1 += -Wmissing-format-attribute
  warning-1 += -Wmissing-prototypes
  warning-1 += -Wold-style-definition
  warning-1 += $(call cc-option, -Wmissing-include-dirs)
af0e5d565   Dave Jones   kbuild: Disable -...
65
  warning-1 += $(call cc-option, -Wunused-but-set-variable)
28bc20dcc   Sam Ravnborg   kbuild: implement...
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
  
  warning-2 := -Waggregate-return
  warning-2 += -Wcast-align
  warning-2 += -Wdisabled-optimization
  warning-2 += -Wnested-externs
  warning-2 += -Wshadow
  warning-2 += $(call cc-option, -Wlogical-op)
  
  warning-3 := -Wbad-function-cast
  warning-3 += -Wcast-qual
  warning-3 += -Wconversion
  warning-3 += -Wpacked
  warning-3 += -Wpadded
  warning-3 += -Wpointer-arith
  warning-3 += -Wredundant-decls
  warning-3 += -Wswitch-default
  warning-3 += $(call cc-option, -Wpacked-bitfield-compat)
  warning-3 += $(call cc-option, -Wvla)
a6de553da   Michal Marek   kbuild: Allow to ...
84
85
86
  warning := $(warning-$(findstring 1, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
  warning += $(warning-$(findstring 2, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
  warning += $(warning-$(findstring 3, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
28bc20dcc   Sam Ravnborg   kbuild: implement...
87

a6de553da   Michal Marek   kbuild: Allow to ...
88
  ifeq ("$(strip $(warning))","")
28bc20dcc   Sam Ravnborg   kbuild: implement...
89
90
91
92
          $(error W=$(KBUILD_ENABLE_EXTRA_GCC_CHECKS) is unknown)
  endif
  
  KBUILD_CFLAGS += $(warning)
4a5838ad9   Borislav Petkov   kbuild: Add extra...
93
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
94
95
96
97
98
99
100
101
  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 ...
102
  # Do not include host rules unless needed
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
104
105
106
107
108
109
110
111
112
113
114
  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
115
116
117
118
119
120
121
122
123
  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   Jiafu He   kbuild: Fix linki...
124
  ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(subdir-m) $(lib-target)),)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
125
126
  builtin-target := $(obj)/built-in.o
  endif
551559e13   Tejun Heo   kbuild: implement...
127
  modorder-target := $(obj)/modules.order
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
128
129
130
  # We keep a list of all modules in $(MODVERDIR)
  
  __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
551559e13   Tejun Heo   kbuild: implement...
131
  	 $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
132
133
134
135
136
137
138
139
140
141
142
143
144
  	 $(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...
145
146
147
148
  # 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
149
150
151
152
153
  
  # Compile C sources (.c)
  # ---------------------------------------------------------------------------
  
  # Default is built-in, unless we know otherwise
6588169d5   Sam Ravnborg   kbuild: allow ass...
154
155
156
  modkern_cflags =                                          \
  	$(if $(part-of-module),                           \
  		$(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE), \
80c00ba94   Sam Ravnborg   kbuild: allow ass...
157
  		$(KBUILD_CFLAGS_KERNEL) $(CFLAGS_KERNEL))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
158
  quiet_modtag := $(empty)   $(empty)
18c167fd6   Shaohua Li   ftrace, ia64: mak...
159
160
161
162
  $(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   Linus Torvalds   Linux-2.6.12-rc2
163
164
165
166
167
168
169
170
171
  
  $(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 ...
172
  modname = $(basetarget)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
173
174
175
176
177
178
179
180
181
182
183
  
  $(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...
184
  cmd_cc_s_c       = $(CC) $(c_flags) -fverbose-asm -S -o $@ $<
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
185

767e581d7   Sam Ravnborg   kbuild: enable us...
186
  $(obj)/%.s: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
187
188
189
190
  	$(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...
191
  $(obj)/%.i: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
192
  	$(call if_changed_dep,cc_i_c)
2ea038917   Sam Ravnborg   Revert "kbuild: s...
193
  cmd_gensymtypes =                                                           \
37a8d9f67   Sam Ravnborg   kbuild: simplify ...
194
      $(CPP) -D__GENKSYMS__ $(c_flags) $< |                                   \
e26d6b834   Don Zickus   Makefile.build: m...
195
      $(GENKSYMS) $(if $(1), -T $(2)) -a $(ARCH)                              \
37a8d9f67   Sam Ravnborg   kbuild: simplify ...
196
       $(if $(KBUILD_PRESERVE),-p)                                            \
e26d6b834   Don Zickus   Makefile.build: m...
197
       -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null))
37a8d9f67   Sam Ravnborg   kbuild: simplify ...
198

15fde6751   Andreas Gruenbacher   kbuild: support f...
199
  quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@
37a8d9f67   Sam Ravnborg   kbuild: simplify ...
200
201
  cmd_cc_symtypes_c =                                                         \
      set -e;                                                                 \
e26d6b834   Don Zickus   Makefile.build: m...
202
      $(call cmd_gensymtypes,true,$@) >/dev/null;                             \
37a8d9f67   Sam Ravnborg   kbuild: simplify ...
203
      test -s $@ || rm -f $@
15fde6751   Andreas Gruenbacher   kbuild: support f...
204

767e581d7   Sam Ravnborg   kbuild: enable us...
205
  $(obj)/%.symtypes : $(src)/%.c FORCE
64e6c1e12   Andreas Gruenbacher   genksyms: track s...
206
  	$(call cmd,cc_symtypes_c)
15fde6751   Andreas Gruenbacher   kbuild: support f...
207

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
208
209
210
211
212
213
214
215
216
217
218
  # 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   Sam Ravnborg   Revert "kbuild: s...
219
220
221
  # 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   Linus Torvalds   Linux-2.6.12-rc2
222
223
224
  #   are done.
  # o otherwise, we calculate symbol versions using the good old
  #   genksyms on the preprocessed source and postprocess them in a way
2ea038917   Sam Ravnborg   Revert "kbuild: s...
225
226
227
228
  #   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   Linus Torvalds   Linux-2.6.12-rc2
229

2ea038917   Sam Ravnborg   Revert "kbuild: s...
230
  cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
e26d6b834   Don Zickus   Makefile.build: m...
231
232
233
234
235
236
237
238
239
240
  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   Linus Torvalds   Linux-2.6.12-rc2
241
242
  	fi;
  endif
8da3821ba   Steven Rostedt   ftrace: create __...
243
  ifdef CONFIG_FTRACE_MCOUNT_RECORD
72441cb1f   Steven Rostedt   ftrace/x86: Add s...
244
  ifdef BUILD_C_RECORDMCOUNT
85356f802   Steven Rostedt   kbuild/recordmcou...
245
246
247
  ifeq ("$(origin RECORDMCOUNT_WARN)", "command line")
    RECORDMCOUNT_FLAGS = -w
  endif
d7b4d6de5   Steven Rostedt   ftrace: Remove re...
248
249
250
251
  # Due to recursion, we must skip empty.o.
  # The empty.o file is created in the make process in order to determine
  #  the target endianness and word size. It is made before all other C
  #  files, including recordmcount.
45677454d   Wu Zhangjin   ftrace: Speed up ...
252
253
  sub_cmd_record_mcount =					\
  	if [ $(@) != "scripts/mod/empty.o" ]; then	\
85356f802   Steven Rostedt   kbuild/recordmcou...
254
  		$(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)";	\
45677454d   Wu Zhangjin   ftrace: Speed up ...
255
  	fi;
d6971822c   Michal Marek   ftrace/kbuild: Ad...
256
257
  recordmcount_source := $(srctree)/scripts/recordmcount.c \
  		    $(srctree)/scripts/recordmcount.h
72441cb1f   Steven Rostedt   ftrace/x86: Add s...
258
  else
45677454d   Wu Zhangjin   ftrace: Speed up ...
259
  sub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
e6299d267   Wu Zhangjin   MIPS: Tracing: Ad...
260
  	"$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \
b3acf29af   Steven Rostedt   ftrace, kbuild: c...
261
  	"$(if $(CONFIG_64BIT),64,32)" \
f9810a825   Rabin Vincent   ARM: 6317/1: ftra...
262
263
  	"$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CFLAGS)" \
  	"$(LD)" "$(NM)" "$(RM)" "$(MV)" \
18c167fd6   Shaohua Li   ftrace, ia64: mak...
264
  	"$(if $(part-of-module),1,0)" "$(@)";
d6971822c   Michal Marek   ftrace/kbuild: Ad...
265
  recordmcount_source := $(srctree)/scripts/recordmcount.pl
8da3821ba   Steven Rostedt   ftrace: create __...
266
  endif
45677454d   Wu Zhangjin   ftrace: Speed up ...
267
268
269
270
  cmd_record_mcount = 						\
  	if [ "$(findstring -pg,$(_c_flags))" = "-pg" ]; then	\
  		$(sub_cmd_record_mcount)			\
  	fi;
72441cb1f   Steven Rostedt   ftrace/x86: Add s...
271
  endif
8da3821ba   Steven Rostedt   ftrace: create __...
272

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
273
  define rule_cc_o_c
6176aa9ae   Jan Beulich   kbuild: consolida...
274
275
  	$(call echo-cmd,checksrc) $(cmd_checksrc)			  \
  	$(call echo-cmd,cc_o_c) $(cmd_cc_o_c);				  \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
276
  	$(cmd_modversions)						  \
c3c63b6be   Andi Kleen   kbuild: echo the ...
277
  	$(call echo-cmd,record_mcount)					  \
8da3821ba   Steven Rostedt   ftrace: create __...
278
  	$(cmd_record_mcount)						  \
48f1f0589   Sam Ravnborg   kbuild: consisten...
279
280
  	scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' >    \
  	                                              $(dot-target).tmp;  \
2ea038917   Sam Ravnborg   Revert "kbuild: s...
281
  	rm -f $(depfile);						  \
48f1f0589   Sam Ravnborg   kbuild: consisten...
282
  	mv -f $(dot-target).tmp $(dot-target).cmd
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
283
284
285
  endef
  
  # Built-in and composite module parts
d6971822c   Michal Marek   ftrace/kbuild: Ad...
286
  $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
287
288
289
290
  	$(call cmd,force_checksrc)
  	$(call if_changed_rule,cc_o_c)
  
  # Single-part modules are special since we need to mark them in $(MODVERDIR)
d6971822c   Michal Marek   ftrace/kbuild: Ad...
291
  $(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
292
293
294
295
296
297
298
299
  	$(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...
300
  $(obj)/%.lst: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
301
302
303
304
  	$(call if_changed_dep,cc_lst_c)
  
  # Compile assembler sources (.S)
  # ---------------------------------------------------------------------------
80c00ba94   Sam Ravnborg   kbuild: allow ass...
305
  modkern_aflags := $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
306

6588169d5   Sam Ravnborg   kbuild: allow ass...
307
308
  $(real-objs-m)      : modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE)
  $(real-objs-m:.o=.s): modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
309
310
311
  
  quiet_cmd_as_s_S = CPP $(quiet_modtag) $@
  cmd_as_s_S       = $(CPP) $(a_flags)   -o $@ $< 
767e581d7   Sam Ravnborg   kbuild: enable us...
312
  $(obj)/%.s: $(src)/%.S FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
313
314
315
316
  	$(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...
317
  $(obj)/%.o: $(src)/%.S FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
318
319
320
321
322
323
324
325
  	$(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   Sam Ravnborg   arm, cris, mips, ...
326
        cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -C -U$(ARCH) \
42f29a252   Tim Abbott   kbuild: Don't def...
327
  	                     -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $<
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
328

767e581d7   Sam Ravnborg   kbuild: enable us...
329
  $(obj)/%.lds: $(src)/%.lds.S FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
  	$(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...
345
346
  		      $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
  		      $(cmd_secanalysis),\
40df759e2   Michal Marek   kbuild: Fix build...
347
  		      rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
348
349
350
351
352
353
354
355
  
  $(builtin-target): $(obj-y) FORCE
  	$(call if_changed,link_o_target)
  
  targets += $(builtin-target)
  endif # builtin-target
  
  #
551559e13   Tejun Heo   kbuild: implement...
356
357
358
359
360
361
362
363
364
365
366
367
368
  # 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
369
370
371
372
  # Rule to compile a set of .o files into one .a file
  #
  ifdef lib-target
  quiet_cmd_link_l_target = AR      $@
40df759e2   Michal Marek   kbuild: Fix build...
373
  cmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
  
  $(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...
394
  cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
395
396
  
  quiet_cmd_link_multi-m = LD [M]  $@
114f51577   Roland McGrath   kbuild: use LDFLA...
397
  cmd_link_multi-m = $(cmd_link_multi-y)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
  
  # 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...
415
  PHONY += $(subdir-ym)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
416
417
418
419
420
  $(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...
421
  PHONY += FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
422
423
424
425
426
427
428
429
430
431
432
433
434
435
  
  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...
436

4f1933620   Paul Smith   kbuild: change kb...
437
438
439
440
  # 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)