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)" \
487467e7d   Joel Stanley   ftrace: Build wit...
229
  	"$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS)" \
f9810a825   Rabin Vincent   ARM: 6317/1: ftra...
230
  	"$(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
257
258
  ifdef CONFIG_RETPOLINE
    objtool_args += --retpoline
  endif
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
259

f41b2d7ee   Josh Poimboeuf   objtool: Fix seg ...
260
261
262
263
264
  ifdef CONFIG_MODVERSIONS
  objtool_o = $(@D)/.tmp_$(@F)
  else
  objtool_o = $(@)
  endif
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
265
266
267
268
269
  # '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 ...
270
  	$(__objtool_obj) $(objtool_args) "$(objtool_o)";)
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
271
272
273
  objtool_obj = $(if $(patsubst y%,, \
  	$(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
  	$(__objtool_obj))
3b27a0c85   Josh Poimboeuf   objtool: Detect a...
274
  endif # SKIP_STACK_VALIDATION
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
275
  endif # CONFIG_STACK_VALIDATION
ee9f8fce9   Josh Poimboeuf   x86/unwind: Add t...
276
277
278
279
  # 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
280
  define rule_cc_o_c
6176aa9ae   Jan Beulich   kbuild: consolida...
281
  	$(call echo-cmd,checksrc) $(cmd_checksrc)			  \
e4aca4595   Nicolas Pitre   kbuild: de-duplic...
282
  	$(call cmd_and_fixdep,cc_o_c)					  \
e8a3118e1   Jiri Slaby   objtool: make it ...
283
  	$(call echo-cmd,objtool) $(cmd_objtool)				  \
f41b2d7ee   Josh Poimboeuf   objtool: Fix seg ...
284
  	$(cmd_modversions_c)						  \
e4aca4595   Nicolas Pitre   kbuild: de-duplic...
285
  	$(call echo-cmd,record_mcount) $(cmd_record_mcount)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
286
  endef
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
287
  define rule_as_o_S
e4aca4595   Nicolas Pitre   kbuild: de-duplic...
288
  	$(call cmd_and_fixdep,as_o_S)					  \
f41b2d7ee   Josh Poimboeuf   objtool: Fix seg ...
289
290
  	$(call echo-cmd,objtool) $(cmd_objtool)				  \
  	$(cmd_modversions_S)
b9ab5ebb1   Josh Poimboeuf   objtool: Add CONF...
291
  endef
9895c03d4   Nicolas Pitre   kbuild: record ne...
292
293
294
295
296
297
  # 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
298
  # Built-in and composite module parts
ee9f8fce9   Josh Poimboeuf   x86/unwind: Add t...
299
  $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
300
301
302
303
  	$(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...
304
  $(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
305
306
  	$(call cmd,force_checksrc)
  	$(call if_changed_rule,cc_o_c)
9895c03d4   Nicolas Pitre   kbuild: record ne...
307
308
  	@{ echo $(@:.o=.ko); echo $@; \
  	   $(cmd_undef_syms); } > $(MODVERDIR)/$(@F:.o=.mod)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
309
310
311
312
313
  
  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...
314
  $(obj)/%.lst: $(src)/%.c FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
315
316
317
318
  	$(call if_changed_dep,cc_lst_c)
  
  # Compile assembler sources (.S)
  # ---------------------------------------------------------------------------
80c00ba94   Sam Ravnborg   kbuild: allow ass...
319
  modkern_aflags := $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
320

6588169d5   Sam Ravnborg   kbuild: allow ass...
321
322
  $(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
323

4efca4ed0   Nicholas Piggin   kbuild: modversio...
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
  # .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...
339
340
       grep "\<___EXPORT_SYMBOL\>" |                                          \
       sed 's/.*___EXPORT_SYMBOL[[:space:]]*\([a-zA-Z0-9_]*\)[[:space:]]*,.*/EXPORT_SYMBOL(\1);/' ) | \
4efca4ed0   Nicholas Piggin   kbuild: modversio...
341
342
343
      $(CPP) -D__GENKSYMS__ $(c_flags) -xc - |                                \
      $(GENKSYMS) $(if $(1), -T $(2))                                         \
       $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX))             \
56067812d   Ard Biesheuvel   kbuild: modversio...
344
       $(patsubst y,-R,$(CONFIG_MODULE_REL_CRCS))                             \
4efca4ed0   Nicholas Piggin   kbuild: modversio...
345
346
347
348
349
350
351
352
353
354
355
       $(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...
356
357
  quiet_cmd_cpp_s_S = CPP $(quiet_modtag) $@
  cmd_cpp_s_S       = $(CPP) $(a_flags) -o $@ $<
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
358

767e581d7   Sam Ravnborg   kbuild: enable us...
359
  $(obj)/%.s: $(src)/%.S FORCE
e0f41e52d   Masahiro Yamada   kbuild: rename cm...
360
  	$(call if_changed_dep,cpp_s_S)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
361
362
  
  quiet_cmd_as_o_S = AS $(quiet_modtag)  $@
4efca4ed0   Nicholas Piggin   kbuild: modversio...
363
364
365
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
  
  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
394

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

767e581d7   Sam Ravnborg   kbuild: enable us...
407
  $(obj)/%.lds: $(src)/%.lds.S FORCE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
408
  	$(call if_changed_dep,cpp_lds_S)
4520c6a49   David Howells   X.509: Add simple...
409
410
411
412
413
414
415
416
417
418
  # 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
419
420
421
422
423
424
425
426
427
428
  # 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...
429
430
  
  ifdef CONFIG_THIN_ARCHIVES
9a6cfca4f   Nicholas Piggin   kbuild: thin arch...
431
432
    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...
433
434
435
436
437
438
    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
439
440
  # 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...
441
  		      $(cmd_make_builtin) $@ $(filter $(obj-y), $^) \
91341d4b2   Sam Ravnborg   kbuild: introduce...
442
  		      $(cmd_secanalysis),\
a5967db9a   Stephen Rothwell   kbuild: allow arc...
443
  		      $(cmd_make_empty_builtin) $@)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
444
445
446
447
448
449
450
451
  
  $(builtin-target): $(obj-y) FORCE
  	$(call if_changed,link_o_target)
  
  targets += $(builtin-target)
  endif # builtin-target
  
  #
551559e13   Tejun Heo   kbuild: implement...
452
453
454
455
456
457
458
459
460
461
462
463
464
  # 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
465
466
467
468
  # 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...
469
470
  
  ifdef CONFIG_THIN_ARCHIVES
9a6cfca4f   Nicholas Piggin   kbuild: thin arch...
471
    cmd_link_l_target = rm -f $@; $(AR) rcsTP$(KBUILD_ARFLAGS) $@ $(lib-y)
a5967db9a   Stephen Rothwell   kbuild: allow arc...
472
473
474
  else
    cmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y)
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
475
476
477
478
479
  
  $(lib-target): $(lib-y) FORCE
  	$(call if_changed,link_l_target)
  
  targets += $(lib-target)
7f2084fa5   Al Viro   [kbuild] handle e...
480
481
482
483
484
485
486
487
488
489
490
  
  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...
491
  	sed -ne '/___ksymtab/s/.*+\([^ ]*\).*/$(ref_prefix)\1)/p' >$(ksyms-lds);\
7f2084fa5   Al Viro   [kbuild] handle e...
492
  	rm -f $(dummy-object);\
9da2f584b   Nicholas Piggin   kbuild: improve l...
493
  	echo | $(CC) $(a_flags) -c -o $(dummy-object) -x assembler -;\
7f2084fa5   Al Viro   [kbuild] handle e...
494
495
496
497
498
  	$(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...
499
500
  
  targets += $(obj)/lib-ksyms.o
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
501
502
503
504
505
506
507
508
509
  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 ...
510
511
512
  #  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
513
514
515
  link_multi_deps =                     \
  $(filter $(addprefix $(obj)/,         \
  $($(subst $(obj)/,,$(@:.o=-objs)))    \
cf4f21938   Michal Marek   kbuild: Allow to ...
516
517
  $($(subst $(obj)/,,$(@:.o=-y)))       \
  $($(subst $(obj)/,,$(@:.o=-m)))), $^)
38385f8f0   Masahiro Yamada   kbuild: trivial -...
518

fe026a851   Nicholas Piggin   kbuild: thin arch...
519
520
521
522
  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...
523
    cmd_link_multi-y = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS) $@ $(link_multi_deps)
fe026a851   Nicholas Piggin   kbuild: thin arch...
524
525
526
527
  else
    quiet_cmd_link_multi-y = LD      $@
    cmd_link_multi-y = $(cmd_link_multi-link)
  endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
528
529
  
  quiet_cmd_link_multi-m = LD [M]  $@
fe026a851   Nicholas Piggin   kbuild: thin arch...
530
  cmd_link_multi-m = $(cmd_link_multi-link)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
531

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

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

4f1933620   Paul Smith   kbuild: change kb...
569
570
571
572
  # 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)