Blame view

scripts/Makefile.build 19.6 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  # SPDX-License-Identifier: GPL-2.0
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
6
  # ==========================================================================
  # Building
  # ==========================================================================
  
  src := $(obj)
4f1933620   Paul Smith   kbuild: change kb...
7
  PHONY := __build
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
  __build:
d72e5edbf   Sam Ravnborg   kbuild: avoid env...
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  # 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...
24
25
26
27
  asflags-y  :=
  ccflags-y  :=
  cppflags-y :=
  ldflags-y  :=
d72e5edbf   Sam Ravnborg   kbuild: avoid env...
28

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

20a468b51   Sam Ravnborg   kbuild: make cc-v...
34
  include scripts/Kbuild.include
3156fd052   Robert P. J. Day   kbuild: fix some ...
35
  # For backward compatibility check that these variables do not change
0c53c8e6e   Sam Ravnborg   kbuild: check for...
36
  save-cflags := $(CFLAGS)
2a6914703   Sam Ravnborg   kbuild: fix make ...
37
  # The filename Kbuild has precedence over Makefile
db8c1a7b2   Sam Ravnborg   kbuild: fix build...
38
  kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
0c53c8e6e   Sam Ravnborg   kbuild: check for...
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)")
49c57d254   Arnaud Lacombe   scripts/Makefile....
45
                  $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use ccflags-y)
0c53c8e6e   Sam Ravnborg   kbuild: check for...
46
47
          endif
  endif
4a5838ad9   Borislav Petkov   kbuild: Add extra...
48

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
49
50
51
52
53
54
55
56
  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 ...
57
  # Do not include host rules unless needed
244038743   Emese Revfy   Shared library su...
58
  ifneq ($(hostprogs-y)$(hostprogs-m)$(hostlibs-y)$(hostlibs-m)$(hostcxxlibs-y)$(hostcxxlibs-m),)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
59
60
61
62
63
64
65
66
67
68
69
  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
70
71
72
73
74
  ifndef obj
  $(warning kbuild: Makefile.build is included improperly)
  endif
  
  # ===========================================================================
a4954fd77   Masahiro Yamada   kbuild: remove ob...
75
  ifneq ($(strip $(lib-y) $(lib-m) $(lib-)),)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
  lib-target := $(obj)/lib.a
7f2084fa5   Al Viro   [kbuild] handle e...
77
  obj-y += $(obj)/lib-ksyms.o
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
78
  endif
a4954fd77   Masahiro Yamada   kbuild: remove ob...
79
  ifneq ($(strip $(obj-y) $(obj-m) $(obj-) $(subdir-m) $(lib-target)),)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
80
81
  builtin-target := $(obj)/built-in.o
  endif
551559e13   Tejun Heo   kbuild: implement...
82
  modorder-target := $(obj)/modules.order
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
83
84
85
  # We keep a list of all modules in $(MODVERDIR)
  
  __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
551559e13   Tejun Heo   kbuild: implement...
86
  	 $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
87
88
89
90
91
92
93
94
95
96
97
98
99
  	 $(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...
100
101
102
103
  # 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
104
105
106
107
108
  
  # Compile C sources (.c)
  # ---------------------------------------------------------------------------
  
  # Default is built-in, unless we know otherwise
6588169d5   Sam Ravnborg   kbuild: allow ass...
109
110
111
  modkern_cflags =                                          \
  	$(if $(part-of-module),                           \
  		$(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE), \
80c00ba94   Sam Ravnborg   kbuild: allow ass...
112
  		$(KBUILD_CFLAGS_KERNEL) $(CFLAGS_KERNEL))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
113
  quiet_modtag := $(empty)   $(empty)
18c167fd6   Shaohua Li   ftrace, ia64: mak...
114
115
116
117
  $(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
118
119
120
121
122
123
124
125
126
  
  $(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 ...
127
  modname = $(basetarget)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
128
129
130
131
132
133
134
135
136
137
138
  
  $(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)  $@
1e64ff42e   Andi Kleen   Kbuild, lto: Disa...
139
  cmd_cc_s_c       = $(CC) $(c_flags) $(DISABLE_LTO) -fverbose-asm -S -o $@ $<
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
140

767e581d7   Sam Ravnborg   kbuild: enable us...
141
  $(obj)/%.s: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
142
  	$(call if_changed_dep,cc_s_c)
23d438487   Masahiro Yamada   kbuild: rename cm...
143
144
  quiet_cmd_cpp_i_c = CPP $(quiet_modtag) $@
  cmd_cpp_i_c       = $(CPP) $(c_flags) -o $@ $<
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145

767e581d7   Sam Ravnborg   kbuild: enable us...
146
  $(obj)/%.i: $(src)/%.c FORCE
23d438487   Masahiro Yamada   kbuild: rename cm...
147
  	$(call if_changed_dep,cpp_i_c)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
148

4efca4ed0   Nicholas Piggin   kbuild: modversio...
149
150
  # These mirror gensymtypes_S and co below, keep them in synch.
  cmd_gensymtypes_c =                                                         \
37a8d9f67   Sam Ravnborg   kbuild: simplify ...
151
      $(CPP) -D__GENKSYMS__ $(c_flags) $< |                                   \
d70f82acf   James Hogan   genksyms: pass sy...
152
153
      $(GENKSYMS) $(if $(1), -T $(2))                                         \
       $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX))             \
56067812d   Ard Biesheuvel   kbuild: modversio...
154
       $(patsubst y,-R,$(CONFIG_MODULE_REL_CRCS))                             \
37a8d9f67   Sam Ravnborg   kbuild: simplify ...
155
       $(if $(KBUILD_PRESERVE),-p)                                            \
e26d6b834   Don Zickus   Makefile.build: m...
156
       -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null))
37a8d9f67   Sam Ravnborg   kbuild: simplify ...
157

15fde6751   Andreas Gruenbacher   kbuild: support f...
158
  quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@
37a8d9f67   Sam Ravnborg   kbuild: simplify ...
159
160
  cmd_cc_symtypes_c =                                                         \
      set -e;                                                                 \
4efca4ed0   Nicholas Piggin   kbuild: modversio...
161
      $(call cmd_gensymtypes_c,true,$@) >/dev/null;                           \
37a8d9f67   Sam Ravnborg   kbuild: simplify ...
162
      test -s $@ || rm -f $@
15fde6751   Andreas Gruenbacher   kbuild: support f...
163

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

433db3e26   Vinícius Tinti   kbuild: Add suppo...
167
168
169
170
171
172
173
  # LLVM assembly
  # Generate .ll files from .c
  quiet_cmd_cc_ll_c = CC $(quiet_modtag)  $@
        cmd_cc_ll_c = $(CC) $(c_flags) -emit-llvm -S -o $@ $<
  
  $(obj)/%.ll: $(src)/%.c FORCE
  	$(call if_changed_dep,cc_ll_c)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
174
175
176
177
178
179
180
181
182
183
184
  # 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...
185
186
187
  # 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
188
189
190
  #   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...
191
192
193
194
  #   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
195

2ea038917   Sam Ravnborg   Revert "kbuild: s...
196
  cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
4efca4ed0   Nicholas Piggin   kbuild: modversio...
197
198
  
  cmd_modversions_c =								\
e26d6b834   Don Zickus   Makefile.build: m...
199
  	if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then		\
4efca4ed0   Nicholas Piggin   kbuild: modversio...
200
  		$(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))	\
e26d6b834   Don Zickus   Makefile.build: m...
201
202
203
204
205
206
207
  		    > $(@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
208
209
  	fi;
  endif
8da3821ba   Steven Rostedt   ftrace: create __...
210
  ifdef CONFIG_FTRACE_MCOUNT_RECORD
72441cb1f   Steven Rostedt   ftrace/x86: Add s...
211
  ifdef BUILD_C_RECORDMCOUNT
85356f802   Steven Rostedt   kbuild/recordmcou...
212
213
214
  ifeq ("$(origin RECORDMCOUNT_WARN)", "command line")
    RECORDMCOUNT_FLAGS = -w
  endif
d7b4d6de5   Steven Rostedt   ftrace: Remove re...
215
216
  # Due to recursion, we must skip empty.o.
  # The empty.o file is created in the make process in order to determine
312a3d091   Cao jin   kbuild: trivial c...
217
218
  # the target endianness and word size. It is made before all other C
  # files, including recordmcount.
45677454d   Wu Zhangjin   ftrace: Speed up ...
219
220
  sub_cmd_record_mcount =					\
  	if [ $(@) != "scripts/mod/empty.o" ]; then	\
85356f802   Steven Rostedt   kbuild/recordmcou...
221
  		$(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)";	\
45677454d   Wu Zhangjin   ftrace: Speed up ...
222
  	fi;
d6971822c   Michal Marek   ftrace/kbuild: Ad...
223
224
  recordmcount_source := $(srctree)/scripts/recordmcount.c \
  		    $(srctree)/scripts/recordmcount.h
72441cb1f   Steven Rostedt   ftrace/x86: Add s...
225
  else
45677454d   Wu Zhangjin   ftrace: Speed up ...
226
  sub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
e6299d267   Wu Zhangjin   MIPS: Tracing: Ad...
227
  	"$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \
b3acf29af   Steven Rostedt   ftrace, kbuild: c...
228
  	"$(if $(CONFIG_64BIT),64,32)" \
f9810a825   Rabin Vincent   ARM: 6317/1: ftra...
229
230
  	"$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CFLAGS)" \
  	"$(LD)" "$(NM)" "$(RM)" "$(MV)" \
18c167fd6   Shaohua Li   ftrace, ia64: mak...
231
  	"$(if $(part-of-module),1,0)" "$(@)";
d6971822c   Michal Marek   ftrace/kbuild: Ad...
232
  recordmcount_source := $(srctree)/scripts/recordmcount.pl
312a3d091   Cao jin   kbuild: trivial c...
233
  endif # BUILD_C_RECORDMCOUNT
c0a80c0c2   Heiko Carstens   ftrace: allow arc...
234
235
236
  cmd_record_mcount =						\
  	if [ "$(findstring $(CC_FLAGS_FTRACE),$(_c_flags))" =	\
  	     "$(CC_FLAGS_FTRACE)" ]; then			\
45677454d   Wu Zhangjin   ftrace: Speed up ...
237
238
  		$(sub_cmd_record_mcount)			\
  	fi;
312a3d091   Cao jin   kbuild: trivial c...
239
  endif # CONFIG_FTRACE_MCOUNT_RECORD
8da3821ba   Steven Rostedt   ftrace: create __...
240

b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
241
  ifdef CONFIG_STACK_VALIDATION
3b27a0c85   Josh Poimboeuf   objtool: Detect a...
242
  ifneq ($(SKIP_STACK_VALIDATION),1)
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
243
244
  
  __objtool_obj := $(objtree)/tools/objtool/objtool
8af220c9e   Josh Poimboeuf   x86/unwind: Renam...
245
  objtool_args = $(if $(CONFIG_UNWINDER_ORC),orc generate,check)
ee9f8fce9   Josh Poimboeuf   x86/unwind: Add t...
246

a69898c9e   Peter Zijlstra   objtool: Add modu...
247
  objtool_args += $(if $(part-of-module), --module,)
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
248
249
250
  ifndef CONFIG_FRAME_POINTER
  objtool_args += --no-fp
  endif
867ac9d73   Josh Poimboeuf   objtool: Fix gcov...
251
252
  ifdef CONFIG_GCOV_KERNEL
  objtool_args += --no-unreachable
da541b200   Josh Poimboeuf   objtool: Skip unr...
253
254
  else
  objtool_args += $(call cc-ifversion, -lt, 0405, --no-unreachable)
867ac9d73   Josh Poimboeuf   objtool: Fix gcov...
255
  endif
e6993149f   Peter Zijlstra   objtool: Add retp...
256
  ifdef CONFIG_RETPOLINE
c3b9f7260   Peter Zijlstra   objtool, retpolin...
257
  ifneq ($(RETPOLINE_CFLAGS),)
e6993149f   Peter Zijlstra   objtool: Add retp...
258
259
    objtool_args += --retpoline
  endif
c3b9f7260   Peter Zijlstra   objtool, retpolin...
260
  endif
e6993149f   Peter Zijlstra   objtool: Add retp...
261

b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
262

f41b2d7ee   Josh Poimboeuf   objtool: Fix seg ...
263
264
265
266
267
  ifdef CONFIG_MODVERSIONS
  objtool_o = $(@D)/.tmp_$(@F)
  else
  objtool_o = $(@)
  endif
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
268
269
270
271
272
  # 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory
  # 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file
  # 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file
  cmd_objtool = $(if $(patsubst y%,, \
  	$(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
f41b2d7ee   Josh Poimboeuf   objtool: Fix seg ...
273
  	$(__objtool_obj) $(objtool_args) "$(objtool_o)";)
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
274
275
276
  objtool_obj = $(if $(patsubst y%,, \
  	$(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
  	$(__objtool_obj))
3b27a0c85   Josh Poimboeuf   objtool: Detect a...
277
  endif # SKIP_STACK_VALIDATION
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
278
  endif # CONFIG_STACK_VALIDATION
ee9f8fce9   Josh Poimboeuf   x86/unwind: Add t...
279
280
281
282
  # Rebuild all objects when objtool changes, or is enabled/disabled.
  objtool_dep = $(objtool_obj)					\
  	      $(wildcard include/config/orc/unwinder.h		\
  			 include/config/stack/validation.h)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
283
  define rule_cc_o_c
6176aa9ae   Jan Beulich   kbuild: consolida...
284
  	$(call echo-cmd,checksrc) $(cmd_checksrc)			  \
e4aca4595   Nicolas Pitre   kbuild: de-duplic...
285
  	$(call cmd_and_fixdep,cc_o_c)					  \
e8a3118e1   Jiri Slaby   objtool: make it ...
286
  	$(call echo-cmd,objtool) $(cmd_objtool)				  \
f41b2d7ee   Josh Poimboeuf   objtool: Fix seg ...
287
  	$(cmd_modversions_c)						  \
e4aca4595   Nicolas Pitre   kbuild: de-duplic...
288
  	$(call echo-cmd,record_mcount) $(cmd_record_mcount)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
289
  endef
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
290
  define rule_as_o_S
e4aca4595   Nicolas Pitre   kbuild: de-duplic...
291
  	$(call cmd_and_fixdep,as_o_S)					  \
f41b2d7ee   Josh Poimboeuf   objtool: Fix seg ...
292
293
  	$(call echo-cmd,objtool) $(cmd_objtool)				  \
  	$(cmd_modversions_S)
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
294
  endef
9895c03d4   Nicolas Pitre   kbuild: record ne...
295
296
297
298
299
300
  # List module undefined symbols (or empty line if not enabled)
  ifdef CONFIG_TRIM_UNUSED_KSYMS
  cmd_undef_syms = $(NM) $@ | sed -n 's/^ \+U //p' | xargs echo
  else
  cmd_undef_syms = echo
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
301
  # Built-in and composite module parts
ee9f8fce9   Josh Poimboeuf   x86/unwind: Add t...
302
  $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
303
304
305
306
  	$(call cmd,force_checksrc)
  	$(call if_changed_rule,cc_o_c)
  
  # Single-part modules are special since we need to mark them in $(MODVERDIR)
ee9f8fce9   Josh Poimboeuf   x86/unwind: Add t...
307
  $(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
308
309
  	$(call cmd,force_checksrc)
  	$(call if_changed_rule,cc_o_c)
9895c03d4   Nicolas Pitre   kbuild: record ne...
310
311
  	@{ echo $(@:.o=.ko); echo $@; \
  	   $(cmd_undef_syms); } > $(MODVERDIR)/$(@F:.o=.mod)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
312
313
314
315
316
  
  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...
317
  $(obj)/%.lst: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
318
319
320
321
  	$(call if_changed_dep,cc_lst_c)
  
  # Compile assembler sources (.S)
  # ---------------------------------------------------------------------------
80c00ba94   Sam Ravnborg   kbuild: allow ass...
322
  modkern_aflags := $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
323

6588169d5   Sam Ravnborg   kbuild: allow ass...
324
325
  $(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
326

4efca4ed0   Nicholas Piggin   kbuild: modversio...
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
  # .S file exports must have their C prototypes defined in asm/asm-prototypes.h
  # or a file that it includes, in order to get versioned symbols. We build a
  # dummy C file that includes asm-prototypes and the EXPORT_SYMBOL lines from
  # the .S file (with trailing ';'), and run genksyms on that, to extract vers.
  #
  # This is convoluted. The .S file must first be preprocessed to run guards and
  # expand names, then the resulting exports must be constructed into plain
  # EXPORT_SYMBOL(symbol); to build our dummy C file, and that gets preprocessed
  # to make the genksyms input.
  #
  # These mirror gensymtypes_c and co above, keep them in synch.
  cmd_gensymtypes_S =                                                         \
      (echo "\#include <linux/kernel.h>" ;                                    \
       echo "\#include <asm/asm-prototypes.h>" ;                              \
      $(CPP) $(a_flags) $< |                                                  \
cc6acc11c   Nicholas Piggin   kbuild: be more c...
342
343
       grep "\<___EXPORT_SYMBOL\>" |                                          \
       sed 's/.*___EXPORT_SYMBOL[[:space:]]*\([a-zA-Z0-9_]*\)[[:space:]]*,.*/EXPORT_SYMBOL(\1);/' ) | \
4efca4ed0   Nicholas Piggin   kbuild: modversio...
344
345
346
      $(CPP) -D__GENKSYMS__ $(c_flags) -xc - |                                \
      $(GENKSYMS) $(if $(1), -T $(2))                                         \
       $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX))             \
56067812d   Ard Biesheuvel   kbuild: modversio...
347
       $(patsubst y,-R,$(CONFIG_MODULE_REL_CRCS))                             \
4efca4ed0   Nicholas Piggin   kbuild: modversio...
348
349
350
351
352
353
354
355
356
357
358
       $(if $(KBUILD_PRESERVE),-p)                                            \
       -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null))
  
  quiet_cmd_cc_symtypes_S = SYM $(quiet_modtag) $@
  cmd_cc_symtypes_S =                                                         \
      set -e;                                                                 \
      $(call cmd_gensymtypes_S,true,$@) >/dev/null;                           \
      test -s $@ || rm -f $@
  
  $(obj)/%.symtypes : $(src)/%.S FORCE
  	$(call cmd,cc_symtypes_S)
e0f41e52d   Masahiro Yamada   kbuild: rename cm...
359
360
  quiet_cmd_cpp_s_S = CPP $(quiet_modtag) $@
  cmd_cpp_s_S       = $(CPP) $(a_flags) -o $@ $<
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
361

767e581d7   Sam Ravnborg   kbuild: enable us...
362
  $(obj)/%.s: $(src)/%.S FORCE
e0f41e52d   Masahiro Yamada   kbuild: rename cm...
363
  	$(call if_changed_dep,cpp_s_S)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
364
365
  
  quiet_cmd_as_o_S = AS $(quiet_modtag)  $@
4efca4ed0   Nicholas Piggin   kbuild: modversio...
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
  
  ifndef CONFIG_MODVERSIONS
  cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
  
  else
  
  ASM_PROTOTYPES := $(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/asm-prototypes.h)
  
  ifeq ($(ASM_PROTOTYPES),)
  cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
  
  else
  
  # versioning matches the C process described above, with difference that
  # we parse asm-prototypes.h C header to get function definitions.
  
  cmd_as_o_S = $(CC) $(a_flags) -c -o $(@D)/.tmp_$(@F) $<
  
  cmd_modversions_S =								\
  	if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then		\
  		$(call cmd_gensymtypes_S,$(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) $@;					\
  	fi;
  endif
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
397

ee9f8fce9   Josh Poimboeuf   x86/unwind: Add t...
398
  $(obj)/%.o: $(src)/%.S $(objtool_dep) FORCE
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
399
  	$(call if_changed_rule,as_o_S)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
400
401
402
403
404
405
406
  
  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     $@
5cb0512c0   Linus Torvalds   Kbuild: don't pas...
407
        cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -U$(ARCH) \
42f29a252   Tim Abbott   kbuild: Don't def...
408
  	                     -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $<
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
409

767e581d7   Sam Ravnborg   kbuild: enable us...
410
  $(obj)/%.lds: $(src)/%.lds.S FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
411
  	$(call if_changed_dep,cpp_lds_S)
4520c6a49   David Howells   X.509: Add simple...
412
413
414
415
416
417
418
419
420
421
  # ASN.1 grammar
  # ---------------------------------------------------------------------------
  quiet_cmd_asn1_compiler = ASN.1   $@
        cmd_asn1_compiler = $(objtree)/scripts/asn1_compiler $< \
  				$(subst .h,.c,$@) $(subst .c,.h,$@)
  
  .PRECIOUS: $(objtree)/$(obj)/%-asn1.c $(objtree)/$(obj)/%-asn1.h
  
  $(obj)/%-asn1.c $(obj)/%-asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler
  	$(call cmd,asn1_compiler)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
422
423
424
425
426
427
428
429
430
431
  # 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
a5967db9a   Stephen Rothwell   kbuild: allow arc...
432
433
  
  ifdef CONFIG_THIN_ARCHIVES
9a6cfca4f   Nicholas Piggin   kbuild: thin arch...
434
435
    cmd_make_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS)
    cmd_make_empty_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS)
a5967db9a   Stephen Rothwell   kbuild: allow arc...
436
437
438
439
440
441
    quiet_cmd_link_o_target = AR      $@
  else
    cmd_make_builtin = $(LD) $(ld_flags) -r -o
    cmd_make_empty_builtin = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS)
    quiet_cmd_link_o_target = LD      $@
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
442
443
  # If the list of objects to link is empty, just create an empty built-in.o
  cmd_link_o_target = $(if $(strip $(obj-y)),\
a5967db9a   Stephen Rothwell   kbuild: allow arc...
444
  		      $(cmd_make_builtin) $@ $(filter $(obj-y), $^) \
91341d4b2   Sam Ravnborg   kbuild: introduce...
445
  		      $(cmd_secanalysis),\
a5967db9a   Stephen Rothwell   kbuild: allow arc...
446
  		      $(cmd_make_empty_builtin) $@)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
447
448
449
450
451
452
453
454
  
  $(builtin-target): $(obj-y) FORCE
  	$(call if_changed,link_o_target)
  
  targets += $(builtin-target)
  endif # builtin-target
  
  #
551559e13   Tejun Heo   kbuild: implement...
455
456
457
458
459
460
461
462
463
464
465
466
467
  # 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
468
469
470
471
  # Rule to compile a set of .o files into one .a file
  #
  ifdef lib-target
  quiet_cmd_link_l_target = AR      $@
a5967db9a   Stephen Rothwell   kbuild: allow arc...
472
473
  
  ifdef CONFIG_THIN_ARCHIVES
9a6cfca4f   Nicholas Piggin   kbuild: thin arch...
474
    cmd_link_l_target = rm -f $@; $(AR) rcsTP$(KBUILD_ARFLAGS) $@ $(lib-y)
a5967db9a   Stephen Rothwell   kbuild: allow arc...
475
476
477
  else
    cmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y)
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
478
479
480
481
482
  
  $(lib-target): $(lib-y) FORCE
  	$(call if_changed,link_l_target)
  
  targets += $(lib-target)
7f2084fa5   Al Viro   [kbuild] handle e...
483
484
485
486
487
488
489
490
491
492
493
  
  dummy-object = $(obj)/.lib_exports.o
  ksyms-lds = $(dot-target).lds
  ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
  ref_prefix = EXTERN(_
  else
  ref_prefix = EXTERN(
  endif
  
  quiet_cmd_export_list = EXPORTS $@
  cmd_export_list = $(OBJDUMP) -h $< | \
76bee2341   Nicolas Pitre   kbuild: cmd_expor...
494
  	sed -ne '/___ksymtab/s/.*+\([^ ]*\).*/$(ref_prefix)\1)/p' >$(ksyms-lds);\
7f2084fa5   Al Viro   [kbuild] handle e...
495
  	rm -f $(dummy-object);\
9da2f584b   Nicholas Piggin   kbuild: improve l...
496
  	echo | $(CC) $(a_flags) -c -o $(dummy-object) -x assembler -;\
7f2084fa5   Al Viro   [kbuild] handle e...
497
498
499
500
501
  	$(LD) $(ld_flags) -r -o $@ -T $(ksyms-lds) $(dummy-object);\
  	rm $(dummy-object) $(ksyms-lds)
  
  $(obj)/lib-ksyms.o: $(lib-target) FORCE
  	$(call if_changed,export_list)
989cea5c1   Nicholas Piggin   kbuild: prevent l...
502
503
  
  targets += $(obj)/lib-ksyms.o
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
504
505
506
507
508
509
510
511
512
  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>
cf4f21938   Michal Marek   kbuild: Allow to ...
513
514
515
  #  or
  #    <composite-object>-m    := <list of .o files>
  #  The -m syntax only works if <composite object> is a module
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
516
517
518
  link_multi_deps =                     \
  $(filter $(addprefix $(obj)/,         \
  $($(subst $(obj)/,,$(@:.o=-objs)))    \
cf4f21938   Michal Marek   kbuild: Allow to ...
519
520
  $($(subst $(obj)/,,$(@:.o=-y)))       \
  $($(subst $(obj)/,,$(@:.o=-m)))), $^)
38385f8f0   Masahiro Yamada   kbuild: trivial -...
521

fe026a851   Nicholas Piggin   kbuild: thin arch...
522
523
524
525
  cmd_link_multi-link = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis)
  
  ifdef CONFIG_THIN_ARCHIVES
    quiet_cmd_link_multi-y = AR      $@
9a6cfca4f   Nicholas Piggin   kbuild: thin arch...
526
    cmd_link_multi-y = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS) $@ $(link_multi_deps)
fe026a851   Nicholas Piggin   kbuild: thin arch...
527
528
529
530
  else
    quiet_cmd_link_multi-y = LD      $@
    cmd_link_multi-y = $(cmd_link_multi-link)
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
531
532
  
  quiet_cmd_link_multi-m = LD [M]  $@
fe026a851   Nicholas Piggin   kbuild: thin arch...
533
  cmd_link_multi-m = $(cmd_link_multi-link)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
534

c8589d1e9   Masahiro Yamada   kbuild: handle mu...
535
  $(multi-used-y): FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
536
  	$(call if_changed,link_multi-y)
c8589d1e9   Masahiro Yamada   kbuild: handle mu...
537
  $(call multi_depend, $(multi-used-y), .o, -objs -y)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
538

c8589d1e9   Masahiro Yamada   kbuild: handle mu...
539
  $(multi-used-m): FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
540
  	$(call if_changed,link_multi-m)
9895c03d4   Nicolas Pitre   kbuild: record ne...
541
542
  	@{ echo $(@:.o=.ko); echo $(link_multi_deps); \
  	   $(cmd_undef_syms); } > $(MODVERDIR)/$(@F:.o=.mod)
cf4f21938   Michal Marek   kbuild: Allow to ...
543
  $(call multi_depend, $(multi-used-m), .o, -objs -y -m)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
544
545
546
547
548
549
  
  targets += $(multi-used-y) $(multi-used-m)
  
  
  # Descending
  # ---------------------------------------------------------------------------
4f1933620   Paul Smith   kbuild: change kb...
550
  PHONY += $(subdir-ym)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
551
552
553
554
555
  $(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...
556
  PHONY += FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
557
558
559
560
561
562
563
564
565
566
567
568
569
570
  
  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...
571

4f1933620   Paul Smith   kbuild: change kb...
572
573
574
575
  # 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)