xref: /openbmc/linux/Makefile (revision 8b41fc4454e36fbfdbb23f940d023d4dece2de29)
1 b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
2 bfeffd15SLinus TorvaldsVERSION = 5
3 e42617b8SLinus TorvaldsPATCHLEVEL = 5
4 55922c9dSLinus TorvaldsSUBLEVEL = 0
5 c79f46a2SLinus TorvaldsEXTRAVERSION = -rc5
6 d6d5df1dSLinus TorvaldsNAME = Kleptomaniac Octopus
7 1da177e4SLinus Torvalds
8 1da177e4SLinus Torvalds# *DOCUMENTATION*
9 1da177e4SLinus Torvalds# To see a list of typical targets execute "make help"
10 1da177e4SLinus Torvalds# More info can be located in ./README
11 1da177e4SLinus Torvalds# Comments in this file are targeted only to the developer, do not
12 1da177e4SLinus Torvalds# expect to learn how to build the kernel reading this file.
13 1da177e4SLinus Torvalds
14 ba634eceSMasahiro Yamada# That's our default target when none is given on the command line
15 ba634eceSMasahiro YamadaPHONY := _all
16 ba634eceSMasahiro Yamada_all:
17 ba634eceSMasahiro Yamada
18 1da177e4SLinus Torvalds# We are using a recursive build, so we need to do a little thinking
19 1da177e4SLinus Torvalds# to get the ordering right.
20 1da177e4SLinus Torvalds#
21 1da177e4SLinus Torvalds# Most importantly: sub-Makefiles should only ever modify files in
22 1da177e4SLinus Torvalds# their own directory. If in some directory we have a dependency on
23 1da177e4SLinus Torvalds# a file in another dir (which doesn't happen often, but it's often
24 f49821eeSNicholas Piggin# unavoidable when linking the built-in.a targets which finally
25 1da177e4SLinus Torvalds# turn into vmlinux), we will call a sub make in that other dir, and
26 1da177e4SLinus Torvalds# after that we are sure that everything which is in that other dir
27 1da177e4SLinus Torvalds# is now up to date.
28 1da177e4SLinus Torvalds#
29 1da177e4SLinus Torvalds# The only cases where we need to modify files which have global
30 1da177e4SLinus Torvalds# effects are thus separated out and done before the recursive
31 1da177e4SLinus Torvalds# descending is started. They are now explicitly listed as the
32 1da177e4SLinus Torvalds# prepare rule.
33 1da177e4SLinus Torvalds
34 221cc2d2SMasahiro Yamadaifneq ($(sub_make_done),1)
35 3812b8c5SMasahiro Yamada
36 3812b8c5SMasahiro Yamada# Do not use make's built-in rules and variables
37 3812b8c5SMasahiro Yamada# (this increases performance and avoids hard-to-debug behaviour)
38 3812b8c5SMasahiro YamadaMAKEFLAGS += -rR
39 3812b8c5SMasahiro Yamada
40 3812b8c5SMasahiro Yamada# Avoid funny character set dependencies
41 3812b8c5SMasahiro Yamadaunexport LC_ALL
42 3812b8c5SMasahiro YamadaLC_COLLATE=C
43 3812b8c5SMasahiro YamadaLC_NUMERIC=C
44 3812b8c5SMasahiro Yamadaexport LC_COLLATE LC_NUMERIC
45 3812b8c5SMasahiro Yamada
46 3812b8c5SMasahiro Yamada# Avoid interference with shell env settings
47 3812b8c5SMasahiro Yamadaunexport GREP_OPTIONS
48 3812b8c5SMasahiro Yamada
49 066b7ed9SMichal Marek# Beautify output
50 066b7ed9SMichal Marek# ---------------------------------------------------------------------------
51 066b7ed9SMichal Marek#
52 066b7ed9SMichal Marek# Normally, we echo the whole command before executing it. By making
53 066b7ed9SMichal Marek# that echo $($(quiet)$(cmd)), we now have the possibility to set
54 066b7ed9SMichal Marek# $(quiet) to choose other forms of output instead, e.g.
55 066b7ed9SMichal Marek#
56 066b7ed9SMichal Marek#         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
57 066b7ed9SMichal Marek#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
58 066b7ed9SMichal Marek#
59 066b7ed9SMichal Marek# If $(quiet) is empty, the whole command will be printed.
60 066b7ed9SMichal Marek# If it is set to "quiet_", only the short version will be printed.
61 066b7ed9SMichal Marek# If it is set to "silent_", nothing will be printed at all, since
62 066b7ed9SMichal Marek# the variable $(silent_cmd_cc_o_c) doesn't exist.
63 066b7ed9SMichal Marek#
64 066b7ed9SMichal Marek# A simple variant is to prefix commands with $(Q) - that's useful
65 066b7ed9SMichal Marek# for commands that shall be hidden in non-verbose mode.
66 066b7ed9SMichal Marek#
67 066b7ed9SMichal Marek#	$(Q)ln $@ :<
68 066b7ed9SMichal Marek#
69 066b7ed9SMichal Marek# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
70 066b7ed9SMichal Marek# If KBUILD_VERBOSE equals 1 then the above command is displayed.
71 066b7ed9SMichal Marek#
72 1da177e4SLinus Torvalds# To put more focus on warnings, be less verbose as default
73 1da177e4SLinus Torvalds# Use 'make V=1' to see the full commands
74 1da177e4SLinus Torvalds
75 1da177e4SLinus Torvaldsifeq ("$(origin V)", "command line")
76 1da177e4SLinus Torvalds  KBUILD_VERBOSE = $(V)
77 1da177e4SLinus Torvaldsendif
78 1da177e4SLinus Torvaldsifndef KBUILD_VERBOSE
79 1da177e4SLinus Torvalds  KBUILD_VERBOSE = 0
80 1da177e4SLinus Torvaldsendif
81 1da177e4SLinus Torvalds
82 066b7ed9SMichal Marekifeq ($(KBUILD_VERBOSE),1)
83 066b7ed9SMichal Marek  quiet =
84 066b7ed9SMichal Marek  Q =
85 066b7ed9SMichal Marekelse
86 066b7ed9SMichal Marek  quiet=quiet_
87 066b7ed9SMichal Marek  Q = @
88 066b7ed9SMichal Marekendif
89 066b7ed9SMichal Marek
90 066b7ed9SMichal Marek# If the user is running make -s (silent mode), suppress echoing of
91 066b7ed9SMichal Marek# commands
92 066b7ed9SMichal Marek
93 6f0fa58eSMasahiro Yamadaifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
94 066b7ed9SMichal Marek  quiet=silent_
95 066b7ed9SMichal Marekendif
96 066b7ed9SMichal Marek
97 066b7ed9SMichal Marekexport quiet Q KBUILD_VERBOSE
98 066b7ed9SMichal Marek
99 25b146c5SMasahiro Yamada# Kbuild will save output files in the current working directory.
100 25b146c5SMasahiro Yamada# This does not need to match to the root of the kernel source tree.
101 25b146c5SMasahiro Yamada#
102 25b146c5SMasahiro Yamada# For example, you can do this:
103 25b146c5SMasahiro Yamada#
104 25b146c5SMasahiro Yamada#  cd /dir/to/store/output/files; make -f /dir/to/kernel/source/Makefile
105 25b146c5SMasahiro Yamada#
106 25b146c5SMasahiro Yamada# If you want to save output files in a different location, there are
107 25b146c5SMasahiro Yamada# two syntaxes to specify it.
108 25b146c5SMasahiro Yamada#
109 1da177e4SLinus Torvalds# 1) O=
110 1da177e4SLinus Torvalds# Use "make O=dir/to/store/output/files/"
111 1da177e4SLinus Torvalds#
112 1da177e4SLinus Torvalds# 2) Set KBUILD_OUTPUT
113 25b146c5SMasahiro Yamada# Set the environment variable KBUILD_OUTPUT to point to the output directory.
114 25b146c5SMasahiro Yamada# export KBUILD_OUTPUT=dir/to/store/output/files/; make
115 1da177e4SLinus Torvalds#
116 1da177e4SLinus Torvalds# The O= assignment takes precedence over the KBUILD_OUTPUT environment
117 1da177e4SLinus Torvalds# variable.
118 1da177e4SLinus Torvalds
119 25b146c5SMasahiro Yamada# Do we want to change the working directory?
120 1da177e4SLinus Torvaldsifeq ("$(origin O)", "command line")
121 1da177e4SLinus Torvalds  KBUILD_OUTPUT := $(O)
122 1da177e4SLinus Torvaldsendif
123 1da177e4SLinus Torvalds
124 25b146c5SMasahiro Yamadaifneq ($(KBUILD_OUTPUT),)
125 25b146c5SMasahiro Yamada# Make's built-in functions such as $(abspath ...), $(realpath ...) cannot
126 25b146c5SMasahiro Yamada# expand a shell special character '~'. We use a somewhat tedious way here.
127 25b146c5SMasahiro Yamadaabs_objtree := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd)
128 25b146c5SMasahiro Yamada$(if $(abs_objtree),, \
129 25b146c5SMasahiro Yamada     $(error failed to create output directory "$(KBUILD_OUTPUT)"))
130 25b146c5SMasahiro Yamada
131 25b146c5SMasahiro Yamada# $(realpath ...) resolves symlinks
132 25b146c5SMasahiro Yamadaabs_objtree := $(realpath $(abs_objtree))
133 25b146c5SMasahiro Yamadaelse
134 25b146c5SMasahiro Yamadaabs_objtree := $(CURDIR)
135 25b146c5SMasahiro Yamadaendif # ifneq ($(KBUILD_OUTPUT),)
136 25b146c5SMasahiro Yamada
137 25b146c5SMasahiro Yamadaifeq ($(abs_objtree),$(CURDIR))
138 25b146c5SMasahiro Yamada# Suppress "Entering directory ..." unless we are changing the work directory.
139 25b146c5SMasahiro YamadaMAKEFLAGS += --no-print-directory
140 25b146c5SMasahiro Yamadaelse
141 25b146c5SMasahiro Yamadaneed-sub-make := 1
142 51193b76SRobert Jarzmikendif
143 51193b76SRobert Jarzmik
144 25b146c5SMasahiro Yamadaabs_srctree := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
145 1da177e4SLinus Torvalds
146 25b146c5SMasahiro Yamadaifneq ($(words $(subst :, ,$(abs_srctree))), 1)
147 25b146c5SMasahiro Yamada$(error source directory cannot contain spaces or colons)
148 25b146c5SMasahiro Yamadaendif
149 25b146c5SMasahiro Yamada
150 25b146c5SMasahiro Yamadaifneq ($(abs_srctree),$(abs_objtree))
151 80463f1bSMasahiro Yamada# Look for make include files relative to root of kernel src
152 80463f1bSMasahiro Yamada#
153 80463f1bSMasahiro Yamada# This does not become effective immediately because MAKEFLAGS is re-parsed
154 25b146c5SMasahiro Yamada# once after the Makefile is read. We need to invoke sub-make.
155 25b146c5SMasahiro YamadaMAKEFLAGS += --include-dir=$(abs_srctree)
156 688931a5SMasahiro Yamadaneed-sub-make := 1
157 25b146c5SMasahiro Yamadaendif
158 3812b8c5SMasahiro Yamada
159 688931a5SMasahiro Yamadaifneq ($(filter 3.%,$(MAKE_VERSION)),)
160 688931a5SMasahiro Yamada# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x
161 688931a5SMasahiro Yamada# We need to invoke sub-make to avoid implicit rules in the top Makefile.
162 688931a5SMasahiro Yamadaneed-sub-make := 1
163 688931a5SMasahiro Yamada# Cancel implicit rules for this Makefile.
164 688931a5SMasahiro Yamada$(lastword $(MAKEFILE_LIST)): ;
165 688931a5SMasahiro Yamadaendif
166 688931a5SMasahiro Yamada
167 25b146c5SMasahiro Yamadaexport abs_srctree abs_objtree
168 221cc2d2SMasahiro Yamadaexport sub_make_done := 1
169 221cc2d2SMasahiro Yamada
170 688931a5SMasahiro Yamadaifeq ($(need-sub-make),1)
171 688931a5SMasahiro Yamada
172 0b35786dSMilton MillerPHONY += $(MAKECMDGOALS) sub-make
173 0b35786dSMilton Miller
174 0209987fSMasahiro Yamada$(filter-out _all sub-make $(lastword $(MAKEFILE_LIST)), $(MAKECMDGOALS)) _all: sub-make
175 16f89098SCharles Keepax	@:
176 0b35786dSMilton Miller
177 c4e6fff1SCao jin# Invoke a second make in the output directory, passing relevant variables
178 2e8d696bSMasahiro Yamadasub-make:
179 25b146c5SMasahiro Yamada	$(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
180 1da177e4SLinus Torvalds
181 688931a5SMasahiro Yamadaendif # need-sub-make
182 221cc2d2SMasahiro Yamadaendif # sub_make_done
183 688931a5SMasahiro Yamada
184 1da177e4SLinus Torvalds# We process the rest of the Makefile if this is the final invocation of make
185 688931a5SMasahiro Yamadaifeq ($(need-sub-make),)
186 1da177e4SLinus Torvalds
187 7ff52571SMasahiro Yamada# Do not print "Entering directory ...",
188 7ff52571SMasahiro Yamada# but we want to display it when entering to the output directory
189 7ff52571SMasahiro Yamada# so that IDEs/editors are able to understand relative filenames.
190 7ff52571SMasahiro YamadaMAKEFLAGS += --no-print-directory
191 7ff52571SMasahiro Yamada
192 aa55c8e2SMasahiro Yamada# Call a source code checker (by default, "sparse") as part of the
193 aa55c8e2SMasahiro Yamada# C compilation.
194 aa55c8e2SMasahiro Yamada#
195 aa55c8e2SMasahiro Yamada# Use 'make C=1' to enable checking of only re-compiled files.
196 aa55c8e2SMasahiro Yamada# Use 'make C=2' to enable checking of *all* source files, regardless
197 aa55c8e2SMasahiro Yamada# of whether they are re-compiled or not.
198 aa55c8e2SMasahiro Yamada#
199 036db11cSCao jin# See the file "Documentation/dev-tools/sparse.rst" for more details,
200 036db11cSCao jin# including where to get the "sparse" utility.
201 aa55c8e2SMasahiro Yamada
202 aa55c8e2SMasahiro Yamadaifeq ("$(origin C)", "command line")
203 aa55c8e2SMasahiro Yamada  KBUILD_CHECKSRC = $(C)
204 aa55c8e2SMasahiro Yamadaendif
205 aa55c8e2SMasahiro Yamadaifndef KBUILD_CHECKSRC
206 aa55c8e2SMasahiro Yamada  KBUILD_CHECKSRC = 0
207 aa55c8e2SMasahiro Yamadaendif
208 aa55c8e2SMasahiro Yamada
209 7e35b425SMasahiro Yamada# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the
210 7e35b425SMasahiro Yamada# directory of external module to build. Setting M= takes precedence.
211 aa55c8e2SMasahiro Yamadaifeq ("$(origin M)", "command line")
212 aa55c8e2SMasahiro Yamada  KBUILD_EXTMOD := $(M)
213 aa55c8e2SMasahiro Yamadaendif
214 aa55c8e2SMasahiro Yamada
215 051f278eSMasahiro Yamadaexport KBUILD_CHECKSRC KBUILD_EXTMOD
216 051f278eSMasahiro Yamada
217 394053f4SMasahiro Yamadaextmod-prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)
218 394053f4SMasahiro Yamada
219 25b146c5SMasahiro Yamadaifeq ($(abs_srctree),$(abs_objtree))
220 9da0763bSMichal Marek        # building in the source tree
221 9da0763bSMichal Marek        srctree := .
222 051f278eSMasahiro Yamada	building_out_of_srctree :=
223 9da0763bSMichal Marekelse
224 25b146c5SMasahiro Yamada        ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
225 9da0763bSMichal Marek                # building in a subdirectory of the source tree
226 9da0763bSMichal Marek                srctree := ..
227 9da0763bSMichal Marek        else
228 25b146c5SMasahiro Yamada                srctree := $(abs_srctree)
229 9da0763bSMichal Marek        endif
230 051f278eSMasahiro Yamada	building_out_of_srctree := 1
231 9da0763bSMichal Marekendif
232 2c1f4f12SMasahiro Yamada
233 95fd3f87SMasahiro Yamadaifneq ($(KBUILD_ABS_SRCTREE),)
234 95fd3f87SMasahiro Yamadasrctree := $(abs_srctree)
235 95fd3f87SMasahiro Yamadaendif
236 2c1f4f12SMasahiro Yamada
237 7e1c0477SMichal Marekobjtree		:= .
238 6b12de69SMasahiro YamadaVPATH		:= $(srctree)
239 1da177e4SLinus Torvalds
240 051f278eSMasahiro Yamadaexport building_out_of_srctree srctree objtree VPATH
241 1da177e4SLinus Torvalds
242 2c1f4f12SMasahiro Yamada# To make sure we do not include .config for any of the *config targets
243 2c1f4f12SMasahiro Yamada# catch them early, and hand them over to scripts/kconfig/Makefile
244 2c1f4f12SMasahiro Yamada# It is allowed to specify more targets when calling make, including
245 2c1f4f12SMasahiro Yamada# mixing *config targets and build targets.
246 2c1f4f12SMasahiro Yamada# For example 'make oldconfig all'.
247 2c1f4f12SMasahiro Yamada# Detect when mixed targets is specified, and make a second invocation
248 2c1f4f12SMasahiro Yamada# of make so .config is not included in this case either (for *config).
249 2c1f4f12SMasahiro Yamada
250 2c1f4f12SMasahiro Yamadaversion_h := include/generated/uapi/linux/version.h
251 2c1f4f12SMasahiro Yamadaold_version_h := include/linux/version.h
252 2c1f4f12SMasahiro Yamada
253 22340a06SMasahiro Yamadaclean-targets := %clean mrproper cleandocs
254 22340a06SMasahiro Yamadano-dot-config-targets := $(clean-targets) \
255 2c1f4f12SMasahiro Yamada			 cscope gtags TAGS tags help% %docs check% coccicheck \
256 59b2bd05SMasahiro Yamada			 $(version_h) headers headers_% archheaders archscripts \
257 63e31a67SMasahiro Yamada			 %asm-generic kernelversion %src-pkg
258 a29d4d8cSMasahiro Yamadano-sync-config-targets := $(no-dot-config-targets) install %install \
259 a29d4d8cSMasahiro Yamada			   kernelrelease
260 394053f4SMasahiro Yamadasingle-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
261 2c1f4f12SMasahiro Yamada
262 2042b548SMasahiro Yamadaconfig-build	:=
263 2042b548SMasahiro Yamadamixed-build	:=
264 2042b548SMasahiro Yamadaneed-config	:= 1
265 d7942413SMasahiro Yamadamay-sync-config	:= 1
266 394053f4SMasahiro Yamadasingle-build	:=
267 2c1f4f12SMasahiro Yamada
268 2c1f4f12SMasahiro Yamadaifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
269 2c1f4f12SMasahiro Yamada	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
270 2042b548SMasahiro Yamada		need-config :=
271 2c1f4f12SMasahiro Yamada	endif
272 2c1f4f12SMasahiro Yamadaendif
273 2c1f4f12SMasahiro Yamada
274 d7942413SMasahiro Yamadaifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
275 d7942413SMasahiro Yamada	ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
276 2042b548SMasahiro Yamada		may-sync-config :=
277 d7942413SMasahiro Yamada	endif
278 d7942413SMasahiro Yamadaendif
279 d7942413SMasahiro Yamada
280 d7942413SMasahiro Yamadaifneq ($(KBUILD_EXTMOD),)
281 2042b548SMasahiro Yamada	may-sync-config :=
282 d7942413SMasahiro Yamadaendif
283 d7942413SMasahiro Yamada
284 2c1f4f12SMasahiro Yamadaifeq ($(KBUILD_EXTMOD),)
285 2c1f4f12SMasahiro Yamada        ifneq ($(filter config %config,$(MAKECMDGOALS)),)
286 2042b548SMasahiro Yamada		config-build := 1
287 2c1f4f12SMasahiro Yamada                ifneq ($(words $(MAKECMDGOALS)),1)
288 2042b548SMasahiro Yamada			mixed-build := 1
289 2c1f4f12SMasahiro Yamada                endif
290 2c1f4f12SMasahiro Yamada        endif
291 2c1f4f12SMasahiro Yamadaendif
292 22340a06SMasahiro Yamada
293 394053f4SMasahiro Yamada# We cannot build single targets and the others at the same time
294 394053f4SMasahiro Yamadaifneq ($(filter $(single-targets), $(MAKECMDGOALS)),)
295 394053f4SMasahiro Yamada	single-build := 1
296 394053f4SMasahiro Yamada	ifneq ($(filter-out $(single-targets), $(MAKECMDGOALS)),)
297 394053f4SMasahiro Yamada		mixed-build := 1
298 394053f4SMasahiro Yamada	endif
299 394053f4SMasahiro Yamadaendif
300 394053f4SMasahiro Yamada
301 22340a06SMasahiro Yamada# For "make -j clean all", "make -j mrproper defconfig all", etc.
302 22340a06SMasahiro Yamadaifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),)
303 22340a06SMasahiro Yamada        ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),)
304 2042b548SMasahiro Yamada		mixed-build := 1
305 22340a06SMasahiro Yamada        endif
306 22340a06SMasahiro Yamadaendif
307 22340a06SMasahiro Yamada
308 2c1f4f12SMasahiro Yamada# install and modules_install need also be processed one by one
309 2c1f4f12SMasahiro Yamadaifneq ($(filter install,$(MAKECMDGOALS)),)
310 2c1f4f12SMasahiro Yamada        ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
311 2042b548SMasahiro Yamada		mixed-build := 1
312 2c1f4f12SMasahiro Yamada        endif
313 2c1f4f12SMasahiro Yamadaendif
314 2c1f4f12SMasahiro Yamada
315 2042b548SMasahiro Yamadaifdef mixed-build
316 2c1f4f12SMasahiro Yamada# ===========================================================================
317 2c1f4f12SMasahiro Yamada# We're called with mixed targets (*config and build targets).
318 2c1f4f12SMasahiro Yamada# Handle them one by one.
319 2c1f4f12SMasahiro Yamada
320 2c1f4f12SMasahiro YamadaPHONY += $(MAKECMDGOALS) __build_one_by_one
321 2c1f4f12SMasahiro Yamada
322 2c1f4f12SMasahiro Yamada$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
323 2c1f4f12SMasahiro Yamada	@:
324 2c1f4f12SMasahiro Yamada
325 2c1f4f12SMasahiro Yamada__build_one_by_one:
326 2c1f4f12SMasahiro Yamada	$(Q)set -e; \
327 2c1f4f12SMasahiro Yamada	for i in $(MAKECMDGOALS); do \
328 2c1f4f12SMasahiro Yamada		$(MAKE) -f $(srctree)/Makefile $$i; \
329 2c1f4f12SMasahiro Yamada	done
330 2c1f4f12SMasahiro Yamada
331 2042b548SMasahiro Yamadaelse # !mixed-build
332 2c1f4f12SMasahiro Yamada
333 2c1f4f12SMasahiro Yamadainclude scripts/Kbuild.include
334 2c1f4f12SMasahiro Yamada
335 2c1f4f12SMasahiro Yamada# Read KERNELRELEASE from include/config/kernel.release (if it exists)
336 2c1f4f12SMasahiro YamadaKERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
337 2c1f4f12SMasahiro YamadaKERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
338 2c1f4f12SMasahiro Yamadaexport VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
339 2c1f4f12SMasahiro Yamada
340 b2d35fa5SAnders Roxellinclude scripts/subarch.include
341 1da177e4SLinus Torvalds
342 1da177e4SLinus Torvalds# Cross compiling and selecting different set of gcc/bin-utils
343 1da177e4SLinus Torvalds# ---------------------------------------------------------------------------
344 1da177e4SLinus Torvalds#
345 1da177e4SLinus Torvalds# When performing cross compilation for other architectures ARCH shall be set
346 1da177e4SLinus Torvalds# to the target architecture. (See arch/* for the possibilities).
347 1da177e4SLinus Torvalds# ARCH can be set during invocation of make:
348 1da177e4SLinus Torvalds# make ARCH=ia64
349 1da177e4SLinus Torvalds# Another way is to have ARCH set in the environment.
350 1da177e4SLinus Torvalds# The default ARCH is the host where make is executed.
351 1da177e4SLinus Torvalds
352 1da177e4SLinus Torvalds# CROSS_COMPILE specify the prefix used for all executables used
353 1da177e4SLinus Torvalds# during compilation. Only gcc and related bin-utils executables
354 1da177e4SLinus Torvalds# are prefixed with $(CROSS_COMPILE).
355 1da177e4SLinus Torvalds# CROSS_COMPILE can be set on the command line
356 1da177e4SLinus Torvalds# make CROSS_COMPILE=ia64-linux-
357 1da177e4SLinus Torvalds# Alternatively CROSS_COMPILE can be set in the environment.
358 1da177e4SLinus Torvalds# Default value for CROSS_COMPILE is not to prefix executables
359 1da177e4SLinus Torvalds# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
360 2331d1a6SSam RavnborgARCH		?= $(SUBARCH)
361 1da177e4SLinus Torvalds
362 1da177e4SLinus Torvalds# Architecture as present in compile.h
363 1da177e4SLinus TorvaldsUTS_MACHINE 	:= $(ARCH)
364 6752ed90SThomas GleixnerSRCARCH 	:= $(ARCH)
365 1da177e4SLinus Torvalds
366 d746d647SSam Ravnborg# Additional ARCH settings for x86
367 d746d647SSam Ravnborgifeq ($(ARCH),i386)
368 d746d647SSam Ravnborg        SRCARCH := x86
369 d746d647SSam Ravnborgendif
370 d746d647SSam Ravnborgifeq ($(ARCH),x86_64)
371 d746d647SSam Ravnborg        SRCARCH := x86
372 d746d647SSam Ravnborgendif
373 74b469f2SSam Ravnborg
374 5e538790SSam Ravnborg# Additional ARCH settings for sparc
375 e69f58c0SNamhyung Kimifeq ($(ARCH),sparc32)
376 e69f58c0SNamhyung Kim       SRCARCH := sparc
377 e69f58c0SNamhyung Kimendif
378 a439fe51SSam Ravnborgifeq ($(ARCH),sparc64)
379 5e538790SSam Ravnborg       SRCARCH := sparc
380 a439fe51SSam Ravnborgendif
381 2fb9b1bdSSam Ravnborg
382 3cc000b5SPaul Mundt# Additional ARCH settings for sh
383 3cc000b5SPaul Mundtifeq ($(ARCH),sh64)
384 3cc000b5SPaul Mundt       SRCARCH := sh
385 3cc000b5SPaul Mundtendif
386 3cc000b5SPaul Mundt
387 14cdd3c4SRoman ZippelKCONFIG_CONFIG	?= .config
388 41263fc6SBen Gardinerexport KCONFIG_CONFIG
389 14cdd3c4SRoman Zippel
390 1da177e4SLinus Torvalds# SHELL used by kbuild
391 858805b3SMasahiro YamadaCONFIG_SHELL := sh
392 1da177e4SLinus Torvalds
393 6d79a7b4SMasahiro YamadaHOST_LFS_CFLAGS := $(shell getconf LFS_CFLAGS 2>/dev/null)
394 6d79a7b4SMasahiro YamadaHOST_LFS_LDFLAGS := $(shell getconf LFS_LDFLAGS 2>/dev/null)
395 6d79a7b4SMasahiro YamadaHOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
396 d7f14c66SUwe Kleine-König
397 1da177e4SLinus TorvaldsHOSTCC       = gcc
398 1da177e4SLinus TorvaldsHOSTCXX      = g++
399 96f14fe7SLaura AbbottKBUILD_HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \
400 f92d19e0SLaura Abbott		-fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \
401 f92d19e0SLaura Abbott		$(HOSTCFLAGS)
402 f92d19e0SLaura AbbottKBUILD_HOSTCXXFLAGS := -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
403 f92d19e0SLaura AbbottKBUILD_HOSTLDFLAGS  := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
404 f92d19e0SLaura AbbottKBUILD_HOSTLDLIBS   := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
405 1da177e4SLinus Torvalds
406 1da177e4SLinus Torvalds# Make variables (CC, etc...)
407 1da177e4SLinus TorvaldsAS		= $(CROSS_COMPILE)as
408 1da177e4SLinus TorvaldsLD		= $(CROSS_COMPILE)ld
409 1da177e4SLinus TorvaldsCC		= $(CROSS_COMPILE)gcc
410 1da177e4SLinus TorvaldsCPP		= $(CC) -E
411 1da177e4SLinus TorvaldsAR		= $(CROSS_COMPILE)ar
412 1da177e4SLinus TorvaldsNM		= $(CROSS_COMPILE)nm
413 1da177e4SLinus TorvaldsSTRIP		= $(CROSS_COMPILE)strip
414 1da177e4SLinus TorvaldsOBJCOPY		= $(CROSS_COMPILE)objcopy
415 1da177e4SLinus TorvaldsOBJDUMP		= $(CROSS_COMPILE)objdump
416 7bac9870SVasily GorbikOBJSIZE		= $(CROSS_COMPILE)size
417 eefb8c12SDmitry GolovinREADELF		= $(CROSS_COMPILE)readelf
418 e83b9f55SAndrii NakryikoPAHOLE		= pahole
419 73a4f6dbSMasahiro YamadaLEX		= flex
420 73a4f6dbSMasahiro YamadaYACC		= bison
421 1da177e4SLinus TorvaldsAWK		= awk
422 caa27b66SSam RavnborgINSTALLKERNEL  := installkernel
423 1da177e4SLinus TorvaldsDEPMOD		= /sbin/depmod
424 1da177e4SLinus TorvaldsPERL		= perl
425 011bf125SMasahiro YamadaPYTHON		= python
426 e9781b52SMasahiro YamadaPYTHON2		= python2
427 e9781b52SMasahiro YamadaPYTHON3		= python3
428 1da177e4SLinus TorvaldsCHECK		= sparse
429 858805b3SMasahiro YamadaBASH		= bash
430 1da177e4SLinus Torvalds
431 80a7d1d9SHannes EderCHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
432 6c49f359SLuc Van Oostenryck		  -Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
433 0c22be07SDouglas AndersonNOSTDINC_FLAGS :=
434 6588169dSSam RavnborgCFLAGS_MODULE   =
435 6588169dSSam RavnborgAFLAGS_MODULE   =
436 6588169dSSam RavnborgLDFLAGS_MODULE  =
437 1da177e4SLinus TorvaldsCFLAGS_KERNEL	=
438 1da177e4SLinus TorvaldsAFLAGS_KERNEL	=
439 b36fad65SMichal MarekLDFLAGS_vmlinux =
440 1da177e4SLinus Torvalds
441 abbf1590SDavid Howells# Use USERINCLUDE when you must reference the UAPI directories only.
442 abbf1590SDavid HowellsUSERINCLUDE    := \
443 9d022c54SMasahiro Yamada		-I$(srctree)/arch/$(SRCARCH)/include/uapi \
444 9d022c54SMasahiro Yamada		-I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \
445 abbf1590SDavid Howells		-I$(srctree)/include/uapi \
446 3308b285SArnd Bergmann		-I$(objtree)/include/generated/uapi \
447 abbf1590SDavid Howells                -include $(srctree)/include/linux/kconfig.h
448 abbf1590SDavid Howells
449 1da177e4SLinus Torvalds# Use LINUXINCLUDE when you must reference the include/ directory.
450 1da177e4SLinus Torvalds# Needed to be compatible with the O= option
451 abbf1590SDavid HowellsLINUXINCLUDE    := \
452 9d022c54SMasahiro Yamada		-I$(srctree)/arch/$(SRCARCH)/include \
453 9d022c54SMasahiro Yamada		-I$(objtree)/arch/$(SRCARCH)/include/generated \
454 051f278eSMasahiro Yamada		$(if $(building_out_of_srctree),-I$(srctree)/include) \
455 f8224f7fSMasahiro Yamada		-I$(objtree)/include \
456 f8224f7fSMasahiro Yamada		$(USERINCLUDE)
457 1da177e4SLinus Torvalds
458 42a92bccSMasahiro YamadaKBUILD_AFLAGS   := -D__ASSEMBLY__ -fno-PIE
459 eeb5687aSMasahiro YamadaKBUILD_CFLAGS   := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
460 42a92bccSMasahiro Yamada		   -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
461 b89f25eaSLuc Van Oostenryck		   -Werror=implicit-function-declaration -Werror=implicit-int \
462 51b97e35SKirill A. Shutemov		   -Wno-format-security \
463 433dc2ebSMasahiro Yamada		   -std=gnu89
464 433dc2ebSMasahiro YamadaKBUILD_CPPFLAGS := -D__KERNEL__
465 80c00ba9SSam RavnborgKBUILD_AFLAGS_KERNEL :=
466 80c00ba9SSam RavnborgKBUILD_CFLAGS_KERNEL :=
467 6588169dSSam RavnborgKBUILD_AFLAGS_MODULE  := -DMODULE
468 6588169dSSam RavnborgKBUILD_CFLAGS_MODULE  := -DMODULE
469 10df0638SMasahiro YamadaKBUILD_LDFLAGS_MODULE :=
470 10df0638SMasahiro Yamadaexport KBUILD_LDS_MODULE := $(srctree)/scripts/module-common.lds
471 d503ac53SMasahiro YamadaKBUILD_LDFLAGS :=
472 433dc2ebSMasahiro YamadaGCC_PLUGINS_CFLAGS :=
473 5241ab4cSMasahiro YamadaCLANG_FLAGS :=
474 1da177e4SLinus Torvalds
475 858805b3SMasahiro Yamadaexport ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC
476 eefb8c12SDmitry Golovinexport CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE LEX YACC AWK INSTALLKERNEL
477 7bac9870SVasily Gorbikexport PERL PYTHON PYTHON2 PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
478 7bac9870SVasily Gorbikexport KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
479 1da177e4SLinus Torvalds
480 d503ac53SMasahiro Yamadaexport KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
481 0e410e15SAndrey Konovalovexport KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
482 0e410e15SAndrey Konovalovexport CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN
483 222d394dSSam Ravnborgexport KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
484 6588169dSSam Ravnborgexport KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
485 80c00ba9SSam Ravnborgexport KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
486 1da177e4SLinus Torvalds
487 1da177e4SLinus Torvalds# Files to ignore in find ... statements
488 1da177e4SLinus Torvalds
489 ae63b2d7SPrarit Bhargavaexport RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o    \
490 ae63b2d7SPrarit Bhargava			  -name CVS -o -name .pc -o -name .hg -o -name .git \) \
491 ae63b2d7SPrarit Bhargava			  -prune -o
492 450c6076SJesper Juhlexport RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
493 450c6076SJesper Juhl			 --exclude CVS --exclude .pc --exclude .hg --exclude .git
494 1da177e4SLinus Torvalds
495 1da177e4SLinus Torvalds# ===========================================================================
496 1da177e4SLinus Torvalds# Rules shared between *config targets and build targets
497 1da177e4SLinus Torvalds
498 312a3d09SCao jin# Basic helpers built in scripts/basic/
499 4f193362SPaul SmithPHONY += scripts_basic
500 1da177e4SLinus Torvaldsscripts_basic:
501 1da177e4SLinus Torvalds	$(Q)$(MAKE) $(build)=scripts/basic
502 638adb05SSteven Rostedt	$(Q)rm -f .tmp_quiet_recordmcount
503 1da177e4SLinus Torvalds
504 4f193362SPaul SmithPHONY += outputmakefile
505 e8e83a23SMasahiro Yamada# Before starting out-of-tree build, make sure the source tree is clean.
506 fd5f0cd6SJan Beulich# outputmakefile generates a Makefile in the output directory, if using a
507 fd5f0cd6SJan Beulich# separate output directory. This allows convenient use of make in the
508 fd5f0cd6SJan Beulich# output directory.
509 3a51ff34SVladimir Kondratiev# At the same time when output Makefile generated, generate .gitignore to
510 3a51ff34SVladimir Kondratiev# ignore whole output directory
511 1da177e4SLinus Torvaldsoutputmakefile:
512 051f278eSMasahiro Yamadaifdef building_out_of_srctree
513 e8e83a23SMasahiro Yamada	$(Q)if [ -f $(srctree)/.config -o \
514 e8e83a23SMasahiro Yamada		 -d $(srctree)/include/config -o \
515 e8e83a23SMasahiro Yamada		 -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
516 e8e83a23SMasahiro Yamada		echo >&2 "***"; \
517 e8e83a23SMasahiro Yamada		echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
518 e8e83a23SMasahiro Yamada		echo >&2 "*** in $(abs_srctree)";\
519 e8e83a23SMasahiro Yamada		echo >&2 "***"; \
520 e8e83a23SMasahiro Yamada		false; \
521 e8e83a23SMasahiro Yamada	fi
522 92979997SAndi Kleen	$(Q)ln -fsn $(srctree) source
523 4fd61277SMasahiro Yamada	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
524 156e7cbbSMasahiro Yamada	$(Q)test -e .gitignore || \
525 156e7cbbSMasahiro Yamada	{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
526 fd5f0cd6SJan Beulichendif
527 1da177e4SLinus Torvalds
528 99516742SMasahiro Yamadaifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
529 ae6b289aSChris Friesifneq ($(CROSS_COMPILE),)
530 5241ab4cSMasahiro YamadaCLANG_FLAGS	+= --target=$(notdir $(CROSS_COMPILE:%-=%))
531 ad15006cSNick DesaulniersGCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
532 238bcbc4SMasahiro YamadaCLANG_FLAGS	+= --prefix=$(GCC_TOOLCHAIN_DIR)
533 ef8c4ed9SStefan AgnerGCC_TOOLCHAIN	:= $(realpath $(GCC_TOOLCHAIN_DIR)/..)
534 ae6b289aSChris Friesendif
535 ae6b289aSChris Friesifneq ($(GCC_TOOLCHAIN),)
536 238bcbc4SMasahiro YamadaCLANG_FLAGS	+= --gcc-toolchain=$(GCC_TOOLCHAIN)
537 ae6b289aSChris Friesendif
538 876a0600SNathan Chancellorifeq ($(shell $(AS) --version 2>&1 | head -n 1 | grep clang),)
539 238bcbc4SMasahiro YamadaCLANG_FLAGS	+= -no-integrated-as
540 876a0600SNathan Chancellorendif
541 589834b3SNathan ChancellorCLANG_FLAGS	+= -Werror=unknown-warning-option
542 238bcbc4SMasahiro YamadaKBUILD_CFLAGS	+= $(CLANG_FLAGS)
543 238bcbc4SMasahiro YamadaKBUILD_AFLAGS	+= $(CLANG_FLAGS)
544 3bd98050SJoel Stanleyexport CLANG_FLAGS
545 ae6b289aSChris Friesendif
546 ae6b289aSChris Fries
547 315bab4eSMasahiro Yamada# The expansion should be delayed until arch/$(SRCARCH)/Makefile is included.
548 315bab4eSMasahiro Yamada# Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.
549 315bab4eSMasahiro Yamada# CC_VERSION_TEXT is referenced from Kconfig (so it needs export),
550 315bab4eSMasahiro Yamada# and from include/config/auto.conf.cmd to detect the compiler upgrade.
551 902a6898SMasahiro YamadaCC_VERSION_TEXT = $(shell $(CC) --version 2>/dev/null | head -n 1)
552 315bab4eSMasahiro Yamada
553 2042b548SMasahiro Yamadaifdef config-build
554 1da177e4SLinus Torvalds# ===========================================================================
555 1da177e4SLinus Torvalds# *config targets only - make sure prerequisites are updated, and descend
556 1da177e4SLinus Torvalds# in scripts/kconfig to make the *config target
557 1da177e4SLinus Torvalds
558 1da177e4SLinus Torvalds# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
559 1da177e4SLinus Torvalds# KBUILD_DEFCONFIG may point out an alternative default configuration
560 1da177e4SLinus Torvalds# used for 'make defconfig'
561 a436bb7bSMasahiro Yamadainclude arch/$(SRCARCH)/Makefile
562 315bab4eSMasahiro Yamadaexport KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
563 1da177e4SLinus Torvalds
564 36de077bSMasahiro Yamadaconfig: outputmakefile scripts_basic FORCE
565 31110ebbSSam Ravnborg	$(Q)$(MAKE) $(build)=scripts/kconfig $@
566 31110ebbSSam Ravnborg
567 36de077bSMasahiro Yamada%config: outputmakefile scripts_basic FORCE
568 1da177e4SLinus Torvalds	$(Q)$(MAKE) $(build)=scripts/kconfig $@
569 1da177e4SLinus Torvalds
570 2042b548SMasahiro Yamadaelse #!config-build
571 1da177e4SLinus Torvalds# ===========================================================================
572 1da177e4SLinus Torvalds# Build targets only - this includes vmlinux, arch specific targets, clean
573 1da177e4SLinus Torvalds# targets and others. In general all targets except *config targets.
574 1da177e4SLinus Torvalds
575 2c1f4f12SMasahiro Yamada# If building an external module we do not care about the all: rule
576 2c1f4f12SMasahiro Yamada# but instead _all depend on modules
577 2c1f4f12SMasahiro YamadaPHONY += all
578 2c1f4f12SMasahiro Yamadaifeq ($(KBUILD_EXTMOD),)
579 2c1f4f12SMasahiro Yamada_all: all
580 2c1f4f12SMasahiro Yamadaelse
581 2c1f4f12SMasahiro Yamada_all: modules
582 2c1f4f12SMasahiro Yamadaendif
583 2c1f4f12SMasahiro Yamada
584 2c1f4f12SMasahiro Yamada# Decide whether to build built-in, modular, or both.
585 2c1f4f12SMasahiro Yamada# Normally, just do built-in.
586 2c1f4f12SMasahiro Yamada
587 2c1f4f12SMasahiro YamadaKBUILD_MODULES :=
588 2c1f4f12SMasahiro YamadaKBUILD_BUILTIN := 1
589 2c1f4f12SMasahiro Yamada
590 2c1f4f12SMasahiro Yamada# If we have only "make modules", don't compile built-in objects.
591 2c1f4f12SMasahiro Yamada# When we're building modules with modversions, we need to consider
592 2c1f4f12SMasahiro Yamada# the built-in objects during the descend as well, in order to
593 2c1f4f12SMasahiro Yamada# make sure the checksums are up to date before we record them.
594 2c1f4f12SMasahiro Yamada
595 2c1f4f12SMasahiro Yamadaifeq ($(MAKECMDGOALS),modules)
596 2c1f4f12SMasahiro Yamada  KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
597 2c1f4f12SMasahiro Yamadaendif
598 2c1f4f12SMasahiro Yamada
599 2c1f4f12SMasahiro Yamada# If we have "make <whatever> modules", compile modules
600 2c1f4f12SMasahiro Yamada# in addition to whatever we do anyway.
601 2c1f4f12SMasahiro Yamada# Just "make" or "make all" shall build modules as well
602 2c1f4f12SMasahiro Yamada
603 d85103acSMasahiro Yamadaifneq ($(filter all _all modules nsdeps,$(MAKECMDGOALS)),)
604 2c1f4f12SMasahiro Yamada  KBUILD_MODULES := 1
605 2c1f4f12SMasahiro Yamadaendif
606 2c1f4f12SMasahiro Yamada
607 2c1f4f12SMasahiro Yamadaifeq ($(MAKECMDGOALS),)
608 2c1f4f12SMasahiro Yamada  KBUILD_MODULES := 1
609 2c1f4f12SMasahiro Yamadaendif
610 2c1f4f12SMasahiro Yamada
611 2c1f4f12SMasahiro Yamadaexport KBUILD_MODULES KBUILD_BUILTIN
612 2c1f4f12SMasahiro Yamada
613 2042b548SMasahiro Yamadaifdef need-config
614 d93a18f2SMasahiro Yamadainclude include/config/auto.conf
615 d93a18f2SMasahiro Yamadaendif
616 d93a18f2SMasahiro Yamada
617 1da177e4SLinus Torvaldsifeq ($(KBUILD_EXTMOD),)
618 1da177e4SLinus Torvalds# Objects we will link into vmlinux / subdirs we need to visit
619 1da177e4SLinus Torvaldsinit-y		:= init/
620 f96182e9SMasahiro Yamadadrivers-y	:= drivers/ sound/
621 d93a18f2SMasahiro Yamadadrivers-$(CONFIG_SAMPLES) += samples/
622 1da177e4SLinus Torvaldsnet-y		:= net/
623 1da177e4SLinus Torvaldslibs-y		:= lib/
624 1da177e4SLinus Torvaldscore-y		:= usr/
625 37d9fe47SFeng Wuvirt-y		:= virt/
626 1da177e4SLinus Torvaldsendif # KBUILD_EXTMOD
627 1da177e4SLinus Torvalds
628 315bab4eSMasahiro Yamada# The all: target is the default when no target is given on the
629 315bab4eSMasahiro Yamada# command line.
630 315bab4eSMasahiro Yamada# This allow a user to issue only 'make' to build a kernel including modules
631 315bab4eSMasahiro Yamada# Defaults to vmlinux, but the arch makefile usually adds further targets
632 315bab4eSMasahiro Yamadaall: vmlinux
633 315bab4eSMasahiro Yamada
634 315bab4eSMasahiro YamadaCFLAGS_GCOV	:= -fprofile-arcs -ftest-coverage \
635 315bab4eSMasahiro Yamada	$(call cc-option,-fno-tree-loop-im) \
636 315bab4eSMasahiro Yamada	$(call cc-disable-warning,maybe-uninitialized,)
637 5aadfdebSMasahiro Yamadaexport CFLAGS_GCOV
638 315bab4eSMasahiro Yamada
639 b1f4ff74SPaulo Zanoni# The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later.
640 b1f4ff74SPaulo Zanoniifdef CONFIG_FUNCTION_TRACER
641 b1f4ff74SPaulo Zanoni  CC_FLAGS_FTRACE := -pg
642 b1f4ff74SPaulo Zanoniendif
643 b1f4ff74SPaulo Zanoni
644 669e06b1SMasahiro YamadaRETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register
645 669e06b1SMasahiro YamadaRETPOLINE_VDSO_CFLAGS_GCC := -mindirect-branch=thunk-inline -mindirect-branch-register
646 669e06b1SMasahiro YamadaRETPOLINE_CFLAGS_CLANG := -mretpoline-external-thunk
647 669e06b1SMasahiro YamadaRETPOLINE_VDSO_CFLAGS_CLANG := -mretpoline
648 669e06b1SMasahiro YamadaRETPOLINE_CFLAGS := $(call cc-option,$(RETPOLINE_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_CFLAGS_CLANG)))
649 669e06b1SMasahiro YamadaRETPOLINE_VDSO_CFLAGS := $(call cc-option,$(RETPOLINE_VDSO_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_VDSO_CFLAGS_CLANG)))
650 669e06b1SMasahiro Yamadaexport RETPOLINE_CFLAGS
651 669e06b1SMasahiro Yamadaexport RETPOLINE_VDSO_CFLAGS
652 669e06b1SMasahiro Yamada
653 315bab4eSMasahiro Yamadainclude arch/$(SRCARCH)/Makefile
654 315bab4eSMasahiro Yamada
655 2042b548SMasahiro Yamadaifdef need-config
656 2042b548SMasahiro Yamadaifdef may-sync-config
657 315bab4eSMasahiro Yamada# Read in dependencies to all Kconfig* files, make sure to run syncconfig if
658 315bab4eSMasahiro Yamada# changes are detected. This should be included after arch/$(SRCARCH)/Makefile
659 315bab4eSMasahiro Yamada# because some architectures define CROSS_COMPILE there.
660 d2f8ae0eSMasahiro Yamadainclude include/config/auto.conf.cmd
661 1da177e4SLinus Torvalds
662 05850719SMasahiro Yamada$(KCONFIG_CONFIG):
663 05850719SMasahiro Yamada	@echo >&2 '***'
664 05850719SMasahiro Yamada	@echo >&2 '*** Configuration file "$@" not found!'
665 05850719SMasahiro Yamada	@echo >&2 '***'
666 05850719SMasahiro Yamada	@echo >&2 '*** Please run some configurator (e.g. "make oldconfig" or'
667 05850719SMasahiro Yamada	@echo >&2 '*** "make menuconfig" or "make xconfig").'
668 05850719SMasahiro Yamada	@echo >&2 '***'
669 05850719SMasahiro Yamada	@/bin/false
670 1da177e4SLinus Torvalds
671 61277981SUlf Magnusson# The actual configuration files used during the build are stored in
672 61277981SUlf Magnusson# include/generated/ and include/config/. Update them if .config is newer than
673 61277981SUlf Magnusson# include/config/auto.conf (which mirrors .config).
674 9390dff6SMasahiro Yamada#
675 9390dff6SMasahiro Yamada# This exploits the 'multi-target pattern rule' trick.
676 9390dff6SMasahiro Yamada# The syncconfig should be executed only once to make all the targets.
677 *8b41fc44SMasahiro Yamada%/auto.conf %/auto.conf.cmd: $(KCONFIG_CONFIG)
678 911a91c3SMasahiro Yamada	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
679 2042b548SMasahiro Yamadaelse # !may-sync-config
680 d7942413SMasahiro Yamada# External modules and some install targets need include/generated/autoconf.h
681 d7942413SMasahiro Yamada# and include/config/auto.conf but do not care if they are up-to-date.
682 d7942413SMasahiro Yamada# Use auto.conf to trigger the test
683 9ee4e336SSam RavnborgPHONY += include/config/auto.conf
684 9ee4e336SSam Ravnborg
685 9ee4e336SSam Ravnborginclude/config/auto.conf:
686 264a2683SSam Ravnborg	$(Q)test -e include/generated/autoconf.h -a -e $@ || (		\
687 5369f550SMichal Marek	echo >&2;							\
688 5369f550SMichal Marek	echo >&2 "  ERROR: Kernel configuration is invalid.";		\
689 5369f550SMichal Marek	echo >&2 "         include/generated/autoconf.h or $@ are missing.";\
690 5369f550SMichal Marek	echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix it.";	\
691 5369f550SMichal Marek	echo >&2 ;							\
692 9ee4e336SSam Ravnborg	/bin/false)
693 9ee4e336SSam Ravnborg
694 d7942413SMasahiro Yamadaendif # may-sync-config
695 2042b548SMasahiro Yamadaendif # need-config
696 1da177e4SLinus Torvalds
697 a1c48bb1SGeert UytterhoevenKBUILD_CFLAGS	+= $(call cc-option,-fno-delete-null-pointer-checks,)
698 ef6000b4SLinus TorvaldsKBUILD_CFLAGS	+= $(call cc-disable-warning,frame-address,)
699 bd664f6bSLinus TorvaldsKBUILD_CFLAGS	+= $(call cc-disable-warning, format-truncation)
700 bd664f6bSLinus TorvaldsKBUILD_CFLAGS	+= $(call cc-disable-warning, format-overflow)
701 6f303d60SLinus TorvaldsKBUILD_CFLAGS	+= $(call cc-disable-warning, address-of-packed-member)
702 a1c48bb1SGeert Uytterhoeven
703 15f5db60SMasahiro Yamadaifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
704 a0f97e06SSam RavnborgKBUILD_CFLAGS += -O2
705 15f5db60SMasahiro Yamadaelse ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3
706 15f5db60SMasahiro YamadaKBUILD_CFLAGS += -O3
707 15f5db60SMasahiro Yamadaelse ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
708 15f5db60SMasahiro YamadaKBUILD_CFLAGS += -Os
709 1da177e4SLinus Torvaldsendif
710 1da177e4SLinus Torvalds
711 b303c6dfSMasahiro Yamadaifdef CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED
712 b303c6dfSMasahiro YamadaKBUILD_CFLAGS   += -Wno-maybe-uninitialized
713 b303c6dfSMasahiro Yamadaendif
714 a76bcf55SArnd Bergmann
715 69102311SJiri Kosina# Tell gcc to never replace conditional load with a non-conditional one
716 69102311SJiri KosinaKBUILD_CFLAGS	+= $(call cc-option,--param=allow-store-data-races=0)
717 69102311SJiri Kosina
718 d677a4d6SVictor Chibotaruinclude scripts/Makefile.kcov
719 6b90bd4bSEmese Revfyinclude scripts/Makefile.gcc-plugins
720 6b90bd4bSEmese Revfy
721 1873e870SAndi Kleenifdef CONFIG_READABLE_ASM
722 1873e870SAndi Kleen# Disable optimizations that make assembler listings hard to read.
723 1873e870SAndi Kleen# reorder blocks reorders the control in the function
724 1873e870SAndi Kleen# ipa clone creates specialized cloned functions
725 1873e870SAndi Kleen# partial inlining inlines only parts of functions
726 1873e870SAndi KleenKBUILD_CFLAGS += $(call cc-option,-fno-reorder-blocks,) \
727 1873e870SAndi Kleen                 $(call cc-option,-fno-ipa-cp-clone,) \
728 1873e870SAndi Kleen                 $(call cc-option,-fno-partial-inlining)
729 1873e870SAndi Kleenendif
730 1873e870SAndi Kleen
731 08f67461SMike Frysingerifneq ($(CONFIG_FRAME_WARN),0)
732 35bb5b1eSAndi KleenKBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
733 35bb5b1eSAndi Kleenendif
734 35bb5b1eSAndi Kleen
735 2a61f474SMasahiro Yamadastackp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector
736 050e9baaSLinus Torvaldsstackp-flags-$(CONFIG_STACKPROTECTOR)             := -fstack-protector
737 050e9baaSLinus Torvaldsstackp-flags-$(CONFIG_STACKPROTECTOR_STRONG)      := -fstack-protector-strong
738 2a61f474SMasahiro Yamada
739 2a61f474SMasahiro YamadaKBUILD_CFLAGS += $(stackp-flags-y)
740 e06b8b98SSam Ravnborg
741 076f421dSMasahiro Yamadaifdef CONFIG_CC_IS_CLANG
742 a1494304SMasahiro YamadaKBUILD_CPPFLAGS += -Qunused-arguments
743 a1494304SMasahiro YamadaKBUILD_CFLAGS += -Wno-format-invalid-specifier
744 a1494304SMasahiro YamadaKBUILD_CFLAGS += -Wno-gnu
745 cfe17c9bSMasahiro Yamada# Quiet clang warning: comparison of unsigned expression < 0 is always false
746 a1494304SMasahiro YamadaKBUILD_CFLAGS += -Wno-tautological-compare
747 cfe17c9bSMasahiro Yamada# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
748 cfe17c9bSMasahiro Yamada# source of a reference will be _MergedGlobals and not on of the whitelisted names.
749 cfe17c9bSMasahiro Yamada# See modpost pattern 2
750 a1494304SMasahiro YamadaKBUILD_CFLAGS += -mno-global-merge
751 cfe17c9bSMasahiro Yamadaelse
752 cfe17c9bSMasahiro Yamada
753 cfe17c9bSMasahiro Yamada# These warnings generated too much noise in a regular build.
754 cfe17c9bSMasahiro Yamada# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
755 9df3e7a7SMasahiro YamadaKBUILD_CFLAGS += -Wno-unused-but-set-variable
756 e2079e93SNathan Chancellor
757 e2079e93SNathan Chancellor# Warn about unmarked fall-throughs in switch statement.
758 e2079e93SNathan Chancellor# Disabled for clang while comment to attribute conversion happens and
759 e2079e93SNathan Chancellor# https://github.com/ClangBuiltLinux/linux/issues/636 is discussed.
760 e2079e93SNathan ChancellorKBUILD_CFLAGS += $(call cc-option,-Wimplicit-fallthrough,)
761 cfe17c9bSMasahiro Yamadaendif
762 cfe17c9bSMasahiro Yamada
763 0a5f4176SSodagudi PrasadKBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
764 1da177e4SLinus Torvaldsifdef CONFIG_FRAME_POINTER
765 a0f97e06SSam RavnborgKBUILD_CFLAGS	+= -fno-omit-frame-pointer -fno-optimize-sibling-calls
766 1da177e4SLinus Torvaldselse
767 7e9501fdSRabin Vincent# Some targets (ARM with Thumb2, for example), can't be built with frame
768 7e9501fdSRabin Vincent# pointers.  For those, we don't have FUNCTION_TRACER automatically
769 7e9501fdSRabin Vincent# select FRAME_POINTER.  However, FUNCTION_TRACER adds -pg, and this is
770 7e9501fdSRabin Vincent# incompatible with -fomit-frame-pointer with current GCC, so we don't use
771 7e9501fdSRabin Vincent# -fomit-frame-pointer with FUNCTION_TRACER.
772 7e9501fdSRabin Vincentifndef CONFIG_FUNCTION_TRACER
773 a0f97e06SSam RavnborgKBUILD_CFLAGS	+= -fomit-frame-pointer
774 1da177e4SLinus Torvaldsendif
775 7e9501fdSRabin Vincentendif
776 1da177e4SLinus Torvalds
777 709a972eSKees Cook# Initialize all stack variables with a pattern, if desired.
778 709a972eSKees Cookifdef CONFIG_INIT_STACK_ALL
779 709a972eSKees CookKBUILD_CFLAGS	+= -ftrivial-auto-var-init=pattern
780 709a972eSKees Cookendif
781 709a972eSKees Cook
782 1e88e415SMasahiro YamadaDEBUG_CFLAGS	:= $(call cc-option, -fno-var-tracking-assignments)
783 2062afb4SLinus Torvalds
784 1da177e4SLinus Torvaldsifdef CONFIG_DEBUG_INFO
785 866ced95SAndi Kleenifdef CONFIG_DEBUG_INFO_SPLIT
786 9d937444SMasahiro YamadaDEBUG_CFLAGS	+= -gsplit-dwarf
787 866ced95SAndi Kleenelse
788 1e88e415SMasahiro YamadaDEBUG_CFLAGS	+= -g
789 866ced95SAndi Kleenendif
790 2288328cSBehan WebsterKBUILD_AFLAGS	+= -Wa,-gdwarf-2
791 1da177e4SLinus Torvaldsendif
792 bfaf2dd3SAndi Kleenifdef CONFIG_DEBUG_INFO_DWARF4
793 9d937444SMasahiro YamadaDEBUG_CFLAGS	+= -gdwarf-4
794 bfaf2dd3SAndi Kleenendif
795 1da177e4SLinus Torvalds
796 d6f4ceb7SAndi Kleenifdef CONFIG_DEBUG_INFO_REDUCED
797 1e88e415SMasahiro YamadaDEBUG_CFLAGS	+= $(call cc-option, -femit-struct-debug-baseonly) \
798 e82c4bb8SAndi Kleen		   $(call cc-option,-fno-var-tracking)
799 d6f4ceb7SAndi Kleenendif
800 d6f4ceb7SAndi Kleen
801 1e88e415SMasahiro YamadaKBUILD_CFLAGS += $(DEBUG_CFLAGS)
802 1e88e415SMasahiro Yamadaexport DEBUG_CFLAGS
803 1e88e415SMasahiro Yamada
804 606576ceSSteven Rostedtifdef CONFIG_FUNCTION_TRACER
805 07d04081SVasily Gorbikifdef CONFIG_FTRACE_MCOUNT_RECORD
806 07d04081SVasily Gorbik  # gcc 5 supports generating the mcount tables directly
807 07d04081SVasily Gorbik  ifeq ($(call cc-option-yn,-mrecord-mcount),y)
808 07d04081SVasily Gorbik    CC_FLAGS_FTRACE	+= -mrecord-mcount
809 07d04081SVasily Gorbik    export CC_USING_RECORD_MCOUNT := 1
810 a2546faeSSteven Rostedt  endif
811 2f4df001SVasily Gorbik  ifdef CONFIG_HAVE_NOP_MCOUNT
812 2f4df001SVasily Gorbik    ifeq ($(call cc-option-yn, -mnop-mcount),y)
813 2f4df001SVasily Gorbik      CC_FLAGS_FTRACE	+= -mnop-mcount
814 2f4df001SVasily Gorbik      CC_FLAGS_USING	+= -DCC_USING_NOP_MCOUNT
815 2f4df001SVasily Gorbik    endif
816 2f4df001SVasily Gorbik  endif
817 07d04081SVasily Gorbikendif
818 a2546faeSSteven Rostedtifdef CONFIG_HAVE_FENTRY
819 f28bc3c3SVasily Gorbik  ifeq ($(call cc-option-yn, -mfentry),y)
820 f28bc3c3SVasily Gorbik    CC_FLAGS_FTRACE	+= -mfentry
821 f28bc3c3SVasily Gorbik    CC_FLAGS_USING	+= -DCC_USING_FENTRY
822 a2546faeSSteven Rostedt  endif
823 f28bc3c3SVasily Gorbikendif
824 f28bc3c3SVasily Gorbikexport CC_FLAGS_FTRACE
825 f28bc3c3SVasily GorbikKBUILD_CFLAGS	+= $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING)
826 f28bc3c3SVasily GorbikKBUILD_AFLAGS	+= $(CC_FLAGS_USING)
827 72441cb1SSteven Rostedtifdef CONFIG_DYNAMIC_FTRACE
828 cf4db259SSteven Rostedt	ifdef CONFIG_HAVE_C_RECORDMCOUNT
829 72441cb1SSteven Rostedt		BUILD_C_RECORDMCOUNT := y
830 72441cb1SSteven Rostedt		export BUILD_C_RECORDMCOUNT
831 72441cb1SSteven Rostedt	endif
832 72441cb1SSteven Rostedtendif
833 16444a8aSArnaldo Carvalho de Meloendif
834 16444a8aSArnaldo Carvalho de Melo
835 91341d4bSSam Ravnborg# We trigger additional mismatches with less inlining
836 91341d4bSSam Ravnborgifdef CONFIG_DEBUG_SECTION_MISMATCH
837 91341d4bSSam RavnborgKBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
838 91341d4bSSam Ravnborgendif
839 91341d4bSSam Ravnborg
840 90ad4052SMasahiro Yamadaifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
841 e85d1d65SMasahiro YamadaKBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
842 e85d1d65SMasahiro YamadaLDFLAGS_vmlinux += --gc-sections
843 90ad4052SMasahiro Yamadaendif
844 90ad4052SMasahiro Yamada
845 43bd3a95SMiroslav Benesifdef CONFIG_LIVEPATCH
846 43bd3a95SMiroslav BenesKBUILD_CFLAGS += $(call cc-option, -flive-patching=inline-clone)
847 43bd3a95SMiroslav Benesendif
848 43bd3a95SMiroslav Benes
849 e8e69931SSam Ravnborg# arch Makefile may override CC so keep this after arch Makefile is included
850 e08d6de4SMasahiro YamadaNOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
851 e8e69931SSam Ravnborg
852 1da177e4SLinus Torvalds# warn about C99 declaration after statement
853 a33e7ae2SMasahiro YamadaKBUILD_CFLAGS += -Wdeclaration-after-statement
854 1da177e4SLinus Torvalds
855 0bb95f80SKees Cook# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
856 8289f913SMasahiro YamadaKBUILD_CFLAGS += -Wvla
857 0bb95f80SKees Cook
858 070b98bfSSam Ravnborg# disable pointer signed / unsigned warnings in gcc 4.0
859 fb073a4bSMasahiro YamadaKBUILD_CFLAGS += -Wno-pointer-sign
860 1da177e4SLinus Torvalds
861 217c3e01SStephen Rothwell# disable stringop warnings in gcc 8+
862 217c3e01SStephen RothwellKBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
863 217c3e01SStephen Rothwell
864 fe8d0a41SKirill Smelkov# disable invalid "can't wrap" optimizations for signed / pointers
865 a137802eSLinus TorvaldsKBUILD_CFLAGS	+= $(call cc-option,-fno-strict-overflow)
866 d0115552SLinus Torvalds
867 87e0d4f0SDaniel Borkmann# clang sets -fmerge-all-constants by default as optimization, but this
868 87e0d4f0SDaniel Borkmann# is non-conforming behavior for C and in fact breaks the kernel, so we
869 87e0d4f0SDaniel Borkmann# need to disable it here generally.
870 87e0d4f0SDaniel BorkmannKBUILD_CFLAGS	+= $(call cc-option,-fno-merge-all-constants)
871 87e0d4f0SDaniel Borkmann
872 87e0d4f0SDaniel Borkmann# for gcc -fno-merge-all-constants disables everything, but it is fine
873 87e0d4f0SDaniel Borkmann# to have actual conforming behavior enabled.
874 87e0d4f0SDaniel BorkmannKBUILD_CFLAGS	+= $(call cc-option,-fmerge-constants)
875 87e0d4f0SDaniel Borkmann
876 3ce120b1SLinus Torvalds# Make sure -fstack-check isn't enabled (like gentoo apparently did)
877 3ce120b1SLinus TorvaldsKBUILD_CFLAGS  += $(call cc-option,-fno-stack-check,)
878 3ce120b1SLinus Torvalds
879 8f7f5c9fSAndi Kleen# conserve stack if available
880 8f7f5c9fSAndi KleenKBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)
881 8f7f5c9fSAndi Kleen
882 fe7c36c7SJosh Triplett# Prohibit date/time macros, which would make the build non-deterministic
883 fe7c36c7SJosh TriplettKBUILD_CFLAGS   += $(call cc-option,-Werror=date-time)
884 fe7c36c7SJosh Triplett
885 ea8daa7bSDaniel Wagner# enforce correct pointer usage
886 ea8daa7bSDaniel WagnerKBUILD_CFLAGS   += $(call cc-option,-Werror=incompatible-pointer-types)
887 ea8daa7bSDaniel Wagner
888 c834f0e8SKees Cook# Require designated initializers for all marked structures
889 c834f0e8SKees CookKBUILD_CFLAGS   += $(call cc-option,-Werror=designated-init)
890 c834f0e8SKees Cook
891 a73619a8SMasahiro Yamada# change __FILE__ to the relative path from the srctree
892 a73619a8SMasahiro YamadaKBUILD_CFLAGS	+= $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
893 a73619a8SMasahiro Yamada
894 29be86d7SSeth Forshee# ensure -fcf-protection is disabled when using retpoline as it is
895 29be86d7SSeth Forshee# incompatible with -mindirect-branch=thunk-extern
896 29be86d7SSeth Forsheeifdef CONFIG_RETPOLINE
897 29be86d7SSeth ForsheeKBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
898 29be86d7SSeth Forsheeendif
899 29be86d7SSeth Forshee
900 a436bb7bSMasahiro Yamadainclude scripts/Makefile.kasan
901 a436bb7bSMasahiro Yamadainclude scripts/Makefile.extrawarn
902 c6d30853SAndrey Ryabinininclude scripts/Makefile.ubsan
903 a86fe353SMasahiro Yamada
904 8cc7af75SMasahiro Yamada# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
905 8cc7af75SMasahiro YamadaKBUILD_CPPFLAGS += $(KCPPFLAGS)
906 8cc7af75SMasahiro YamadaKBUILD_AFLAGS   += $(KAFLAGS)
907 8cc7af75SMasahiro YamadaKBUILD_CFLAGS   += $(KCFLAGS)
908 52bcc330SSam Ravnborg
909 89ff7131SMasahiro YamadaKBUILD_LDFLAGS_MODULE += --build-id
910 89ff7131SMasahiro YamadaLDFLAGS_vmlinux += --build-id
911 18991197SRoland McGrath
912 5d7d18f5SDavid Howellsifeq ($(CONFIG_STRIP_ASM_SYMS),y)
913 d79a2719SAndi KleenLDFLAGS_vmlinux	+= $(call ld-option, -X,)
914 5d7d18f5SDavid Howellsendif
915 5d7d18f5SDavid Howells
916 5cf896fbSPeter Collingbourneifeq ($(CONFIG_RELR),y)
917 5cf896fbSPeter CollingbourneLDFLAGS_vmlinux	+= --pack-dyn-relocs=relr
918 5cf896fbSPeter Collingbourneendif
919 5cf896fbSPeter Collingbourne
920 80591e61SLuc Van Oostenryck# make the checker run with the right architecture
921 80591e61SLuc Van OostenryckCHECKFLAGS += --arch=$(ARCH)
922 80591e61SLuc Van Oostenryck
923 14516765SLuc Van Oostenryck# insure the checker run with the right endianness
924 14516765SLuc Van OostenryckCHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)
925 14516765SLuc Van Oostenryck
926 1f2f01b1SLuc Van Oostenryck# the checker needs the correct machine size
927 1f2f01b1SLuc Van OostenryckCHECKFLAGS += $(if $(CONFIG_64BIT),-m64,-m32)
928 1f2f01b1SLuc Van Oostenryck
929 1da177e4SLinus Torvalds# Default kernel image to build when no specific target is given.
930 1da177e4SLinus Torvalds# KBUILD_IMAGE may be overruled on the command line or
931 1da177e4SLinus Torvalds# set in the environment
932 1da177e4SLinus Torvalds# Also any assignments in arch/$(ARCH)/Makefile take precedence over
933 1da177e4SLinus Torvalds# this default value
934 1da177e4SLinus Torvaldsexport KBUILD_IMAGE ?= vmlinux
935 1da177e4SLinus Torvalds
936 1da177e4SLinus Torvalds#
937 1da177e4SLinus Torvalds# INSTALL_PATH specifies where to place the updated kernel and system map
938 1da177e4SLinus Torvalds# images. Default is /boot, but you can set it to other values
939 1da177e4SLinus Torvaldsexport	INSTALL_PATH ?= /boot
940 1da177e4SLinus Torvalds
941 1da177e4SLinus Torvalds#
942 f4d4ffc0SJason Cooper# INSTALL_DTBS_PATH specifies a prefix for relocations required by build roots.
943 f4d4ffc0SJason Cooper# Like INSTALL_MOD_PATH, it isn't defined in the Makefile, but can be passed as
944 f4d4ffc0SJason Cooper# an argument if needed. Otherwise it defaults to the kernel install path
945 f4d4ffc0SJason Cooper#
946 f4d4ffc0SJason Cooperexport INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE)
947 f4d4ffc0SJason Cooper
948 f4d4ffc0SJason Cooper#
949 1da177e4SLinus Torvalds# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
950 1da177e4SLinus Torvalds# relocations required by build roots.  This is not defined in the
951 070b98bfSSam Ravnborg# makefile but the argument can be passed to make if needed.
952 1da177e4SLinus Torvalds#
953 1da177e4SLinus Torvalds
954 df9df036SSam RavnborgMODLIB	= $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
955 1da177e4SLinus Torvaldsexport MODLIB
956 1da177e4SLinus Torvalds
957 ac031f26STheodore Ts'o#
958 2ea03891SSam Ravnborg# INSTALL_MOD_STRIP, if defined, will cause modules to be
959 2ea03891SSam Ravnborg# stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
960 2ea03891SSam Ravnborg# the default option --strip-debug will be used.  Otherwise,
961 177b241dSGilles Espinasse# INSTALL_MOD_STRIP value will be used as the options to the strip command.
962 2ea03891SSam Ravnborg
963 ac031f26STheodore Ts'oifdef INSTALL_MOD_STRIP
964 ac031f26STheodore Ts'oifeq ($(INSTALL_MOD_STRIP),1)
965 2ea03891SSam Ravnborgmod_strip_cmd = $(STRIP) --strip-debug
966 ac031f26STheodore Ts'oelse
967 2ea03891SSam Ravnborgmod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
968 ac031f26STheodore Ts'oendif # INSTALL_MOD_STRIP=1
969 ac031f26STheodore Ts'oelse
970 2ea03891SSam Ravnborgmod_strip_cmd = true
971 ac031f26STheodore Ts'oendif # INSTALL_MOD_STRIP
972 ac031f26STheodore Ts'oexport mod_strip_cmd
973 ac031f26STheodore Ts'o
974 beb50df3SBertrand Jacquin# CONFIG_MODULE_COMPRESS, if defined, will cause module to be compressed
975 beb50df3SBertrand Jacquin# after they are installed in agreement with CONFIG_MODULE_COMPRESS_GZIP
976 beb50df3SBertrand Jacquin# or CONFIG_MODULE_COMPRESS_XZ.
977 beb50df3SBertrand Jacquin
978 beb50df3SBertrand Jacquinmod_compress_cmd = true
979 beb50df3SBertrand Jacquinifdef CONFIG_MODULE_COMPRESS
980 beb50df3SBertrand Jacquin  ifdef CONFIG_MODULE_COMPRESS_GZIP
981 3d1450d5SJason A. Donenfeld    mod_compress_cmd = gzip -n -f
982 beb50df3SBertrand Jacquin  endif # CONFIG_MODULE_COMPRESS_GZIP
983 beb50df3SBertrand Jacquin  ifdef CONFIG_MODULE_COMPRESS_XZ
984 3d1450d5SJason A. Donenfeld    mod_compress_cmd = xz -f
985 beb50df3SBertrand Jacquin  endif # CONFIG_MODULE_COMPRESS_XZ
986 beb50df3SBertrand Jacquinendif # CONFIG_MODULE_COMPRESS
987 beb50df3SBertrand Jacquinexport mod_compress_cmd
988 beb50df3SBertrand Jacquin
989 d9d8d7edSMichal Marekifdef CONFIG_MODULE_SIG_ALL
990 3ee550f1SDavid Woodhouse$(eval $(call config_filename,MODULE_SIG_KEY))
991 3ee550f1SDavid Woodhouse
992 3ee550f1SDavid Woodhousemod_sign_cmd = scripts/sign-file $(CONFIG_MODULE_SIG_HASH) $(MODULE_SIG_KEY_SRCPREFIX)$(CONFIG_MODULE_SIG_KEY) certs/signing_key.x509
993 e2a666d5SRusty Russellelse
994 e2a666d5SRusty Russellmod_sign_cmd = true
995 e2a666d5SRusty Russellendif
996 e2a666d5SRusty Russellexport mod_sign_cmd
997 e2a666d5SRusty Russell
998 056d28d1SRolf Eike BeerHOST_LIBELF_LIBS = $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf)
999 056d28d1SRolf Eike Beer
1000 9f0c18aeSJosh Poimboeufifdef CONFIG_STACK_VALIDATION
1001 9f0c18aeSJosh Poimboeuf  has_libelf := $(call try-run,\
1002 056d28d1SRolf Eike Beer		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
1003 9f0c18aeSJosh Poimboeuf  ifeq ($(has_libelf),1)
1004 9f0c18aeSJosh Poimboeuf    objtool_target := tools/objtool FORCE
1005 9f0c18aeSJosh Poimboeuf  else
1006 9f0c18aeSJosh Poimboeuf    SKIP_STACK_VALIDATION := 1
1007 9f0c18aeSJosh Poimboeuf    export SKIP_STACK_VALIDATION
1008 9f0c18aeSJosh Poimboeuf  endif
1009 9f0c18aeSJosh Poimboeufendif
1010 9f0c18aeSJosh Poimboeuf
1011 e00d8880SMasahiro YamadaPHONY += prepare0
1012 e2a666d5SRusty Russell
1013 394053f4SMasahiro Yamadaexport MODORDER := $(extmod-prefix)modules.order
1014 bc35d4bdSMasahiro Yamadaexport MODULES_NSDEPS := $(extmod-prefix)modules.nsdeps
1015 47801c97SMasahiro Yamada
1016 1da177e4SLinus Torvaldsifeq ($(KBUILD_EXTMOD),)
1017 cfc411e7SDavid Howellscore-y		+= kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
1018 1da177e4SLinus Torvalds
1019 1da177e4SLinus Torvaldsvmlinux-dirs	:= $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
1020 1da177e4SLinus Torvalds		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
1021 37d9fe47SFeng Wu		     $(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y)))
1022 1da177e4SLinus Torvalds
1023 1eaca4b9SMasahiro Yamadavmlinux-alldirs	:= $(sort $(vmlinux-dirs) Documentation \
1024 1eaca4b9SMasahiro Yamada		     $(patsubst %/,%,$(filter %/, $(init-) $(core-) \
1025 1eaca4b9SMasahiro Yamada			$(drivers-) $(net-) $(libs-) $(virt-))))
1026 1da177e4SLinus Torvalds
1027 c99f3918SMasahiro Yamadabuild-dirs	:= $(vmlinux-dirs)
1028 76cd306dSMasahiro Yamadaclean-dirs	:= $(vmlinux-alldirs)
1029 c99f3918SMasahiro Yamada
1030 f49821eeSNicholas Piggininit-y		:= $(patsubst %/, %/built-in.a, $(init-y))
1031 f49821eeSNicholas Piggincore-y		:= $(patsubst %/, %/built-in.a, $(core-y))
1032 f49821eeSNicholas Piggindrivers-y	:= $(patsubst %/, %/built-in.a, $(drivers-y))
1033 f49821eeSNicholas Pigginnet-y		:= $(patsubst %/, %/built-in.a, $(net-y))
1034 1da177e4SLinus Torvaldslibs-y1		:= $(patsubst %/, %/lib.a, $(libs-y))
1035 f49821eeSNicholas Pigginlibs-y2		:= $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y)))
1036 f49821eeSNicholas Pigginvirt-y		:= $(patsubst %/, %/built-in.a, $(virt-y))
1037 1da177e4SLinus Torvalds
1038 1f2bfbd0SSam Ravnborg# Externally visible symbols (used by link-vmlinux.sh)
1039 d151e971SMasahiro Yamadaexport KBUILD_VMLINUX_OBJS := $(head-y) $(init-y) $(core-y) $(libs-y2) \
1040 d151e971SMasahiro Yamada			      $(drivers-y) $(net-y) $(virt-y)
1041 3a166fc2SNicholas Pigginexport KBUILD_VMLINUX_LIBS := $(libs-y1)
1042 95698570SSam Ravnborgexport KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
1043 1f2bfbd0SSam Ravnborgexport LDFLAGS_vmlinux
1044 85f0ae7eSMasahiro Yamada# used by scripts/Makefile.package
1045 233c741dSMasahiro Yamadaexport KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
1046 1da177e4SLinus Torvalds
1047 d151e971SMasahiro Yamadavmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
1048 1da177e4SLinus Torvalds
1049 3fdc7d3fSMasahiro Yamada# Recurse until adjust_autoksyms.sh is satisfied
1050 3fdc7d3fSMasahiro YamadaPHONY += autoksyms_recursive
1051 2441e78bSNicolas Pitreifdef CONFIG_TRIM_UNUSED_KSYMS
1052 c99f3918SMasahiro Yamadaautoksyms_recursive: descend modules.order
1053 ba79d401SNicolas Ferre	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
1054 86556392SNicolas Pitre	  "$(MAKE) -f $(srctree)/Makefile vmlinux"
1055 2441e78bSNicolas Pitreendif
1056 23121ca2SNicolas Pitre
1057 1f50b80aSMasahiro Yamada# For the kernel to actually contain only the needed exported symbols,
1058 1f50b80aSMasahiro Yamada# we have to build modules as well to determine what those symbols are.
1059 1f50b80aSMasahiro Yamada# (this can be evaluated only once include/config/auto.conf has been included)
1060 1f50b80aSMasahiro Yamadaifdef CONFIG_TRIM_UNUSED_KSYMS
1061 1f50b80aSMasahiro Yamada  KBUILD_MODULES := 1
1062 1f50b80aSMasahiro Yamadaendif
1063 1f50b80aSMasahiro Yamada
1064 07a422bbSMasahiro Yamadaautoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)
1065 07a422bbSMasahiro Yamada
1066 07a422bbSMasahiro Yamada$(autoksyms_h):
1067 07a422bbSMasahiro Yamada	$(Q)mkdir -p $(dir $@)
1068 07a422bbSMasahiro Yamada	$(Q)touch $@
1069 23121ca2SNicolas Pitre
1070 fbe6e37dSNicholas PigginARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
1071 fbe6e37dSNicholas Piggin
1072 fbe6e37dSNicholas Piggin# Final link of vmlinux with optional arch pass after final link
1073 fbe6e37dSNicholas Piggincmd_link-vmlinux =                                                 \
1074 d503ac53SMasahiro Yamada	$(CONFIG_SHELL) $< $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_vmlinux) ;    \
1075 fbe6e37dSNicholas Piggin	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
1076 2441e78bSNicolas Pitre
1077 3fdc7d3fSMasahiro Yamadavmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
1078 1f2bfbd0SSam Ravnborg	+$(call if_changed,link-vmlinux)
1079 741f98feSSam Ravnborg
1080 392885eeSMasahiro Yamadatargets := vmlinux
1081 392885eeSMasahiro Yamada
1082 1da177e4SLinus Torvalds# The actual objects are generated when descending,
1083 1da177e4SLinus Torvalds# make sure no implicit rule kicks in
1084 c99f3918SMasahiro Yamada$(sort $(vmlinux-deps)): descend ;
1085 1da177e4SLinus Torvalds
1086 ba97df45SMasahiro Yamadafilechk_kernel.release = \
1087 0d0e7718SMichal Marek	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1088 0d0e7718SMichal Marek
1089 83a35e36SGeert Uytterhoeven# Store (new) KERNELRELEASE string in include/config/kernel.release
1090 24512795SMasahiro Yamadainclude/config/kernel.release: FORCE
1091 0d0e7718SMichal Marek	$(call filechk,kernel.release)
1092 cb58455cSSam Ravnborg
1093 d8821622SMasahiro Yamada# Additional helpers built in scripts/
1094 d8821622SMasahiro Yamada# Carefully list dependencies so we do not try to build scripts twice
1095 d8821622SMasahiro Yamada# in parallel
1096 d8821622SMasahiro YamadaPHONY += scripts
1097 60df1aeeSMasahiro Yamadascripts: scripts_basic scripts_dtc
1098 d8821622SMasahiro Yamada	$(Q)$(MAKE) $(build)=$(@)
1099 cb58455cSSam Ravnborg
1100 1da177e4SLinus Torvalds# Things we need to do before we recursively start building the kernel
1101 5bb78269SSam Ravnborg# or the modules are listed in "prepare".
1102 5bb78269SSam Ravnborg# A multi level approach is used. prepareN is processed before prepareN-1.
1103 5bb78269SSam Ravnborg# archprepare is used in arch Makefiles and when processed asm symlink,
1104 5bb78269SSam Ravnborg# version.h and scripts_basic is processed / created.
1105 1da177e4SLinus Torvalds
1106 a5139fb3SMasahiro YamadaPHONY += prepare archprepare
1107 5bb78269SSam Ravnborg
1108 36de077bSMasahiro Yamadaarchprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
1109 30527cefSMasahiro Yamada	asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h
1110 5bb78269SSam Ravnborg
1111 65bba042SMasahiro Yamadaprepare0: archprepare
1112 60df1aeeSMasahiro Yamada	$(Q)$(MAKE) $(build)=scripts/mod
1113 8d36a623SSam Ravnborg	$(Q)$(MAKE) $(build)=.
1114 86feeaa8SSam Ravnborg
1115 1da177e4SLinus Torvalds# All the preparing..
1116 b9ab5ebbSJosh Poimboeufprepare: prepare0 prepare-objtool
1117 b9ab5ebbSJosh Poimboeuf
1118 2c1f4f12SMasahiro Yamada# Support for using generic headers in asm-generic
1119 7d0e5c20SMasahiro Yamadaasm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj
1120 7d0e5c20SMasahiro Yamada
1121 2c1f4f12SMasahiro YamadaPHONY += asm-generic uapi-asm-generic
1122 2c1f4f12SMasahiro Yamadaasm-generic: uapi-asm-generic
1123 037fc336SMasahiro Yamada	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm \
1124 037fc336SMasahiro Yamada	generic=include/asm-generic
1125 2c1f4f12SMasahiro Yamadauapi-asm-generic:
1126 037fc336SMasahiro Yamada	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \
1127 037fc336SMasahiro Yamada	generic=include/uapi/asm-generic
1128 2c1f4f12SMasahiro Yamada
1129 b9ab5ebbSJosh PoimboeufPHONY += prepare-objtool
1130 3b27a0c8SJosh Poimboeufprepare-objtool: $(objtool_target)
1131 ef7cfd00SMasahiro Yamadaifeq ($(SKIP_STACK_VALIDATION),1)
1132 ef7cfd00SMasahiro Yamadaifdef CONFIG_UNWINDER_ORC
1133 ef7cfd00SMasahiro Yamada	@echo "error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2
1134 ef7cfd00SMasahiro Yamada	@false
1135 ef7cfd00SMasahiro Yamadaelse
1136 ef7cfd00SMasahiro Yamada	@echo "warning: Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2
1137 ef7cfd00SMasahiro Yamadaendif
1138 ef7cfd00SMasahiro Yamadaendif
1139 1da177e4SLinus Torvalds
1140 1da177e4SLinus Torvalds# Generate some files
1141 1da177e4SLinus Torvalds# ---------------------------------------------------------------------------
1142 1da177e4SLinus Torvalds
1143 1da177e4SLinus Torvalds# KERNELRELEASE can change from a few different places, meaning version.h
1144 1da177e4SLinus Torvalds# needs to be updated, so this check is forced on all builds
1145 1da177e4SLinus Torvalds
1146 1da177e4SLinus Torvaldsuts_len := 64
1147 63104eecSSam Ravnborgdefine filechk_utsrelease.h
1148 1da177e4SLinus Torvalds	if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
1149 1da177e4SLinus Torvalds	  echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2;    \
1150 1da177e4SLinus Torvalds	  exit 1;                                                         \
1151 1da177e4SLinus Torvalds	fi;                                                               \
1152 ad774086SMasahiro Yamada	echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
1153 1da177e4SLinus Torvaldsendef
1154 1da177e4SLinus Torvalds
1155 63104eecSSam Ravnborgdefine filechk_version.h
1156 ad774086SMasahiro Yamada	echo \#define LINUX_VERSION_CODE $(shell                         \
1157 78d3bb44SMichal Marek	expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \
1158 ad774086SMasahiro Yamada	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'
1159 63104eecSSam Ravnborgendef
1160 63104eecSSam Ravnborg
1161 43fee2b2SMasahiro Yamada$(version_h): FORCE
1162 1da177e4SLinus Torvalds	$(call filechk,version.h)
1163 223c24a7SMichal Marek	$(Q)rm -f $(old_version_h)
1164 1da177e4SLinus Torvalds
1165 273b281fSSam Ravnborginclude/generated/utsrelease.h: include/config/kernel.release FORCE
1166 63104eecSSam Ravnborg	$(call filechk,utsrelease.h)
1167 63104eecSSam Ravnborg
1168 179efcb4SVegard NossumPHONY += headerdep
1169 179efcb4SVegard Nossumheaderdep:
1170 9663d989SPeter Foley	$(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \
1171 9663d989SPeter Foley	$(srctree)/scripts/headerdep.pl -I$(srctree)/include
1172 179efcb4SVegard Nossum
1173 1da177e4SLinus Torvalds# ---------------------------------------------------------------------------
1174 8d730cfbSDavid Woodhouse# Kernel headers
1175 8d730cfbSDavid Woodhouse
1176 e6883b18SSam Ravnborg#Default location for installed headers
1177 e6883b18SSam Ravnborgexport INSTALL_HDR_PATH = $(objtree)/usr
1178 e6883b18SSam Ravnborg
1179 59b2bd05SMasahiro Yamadaquiet_cmd_headers_install = INSTALL $(INSTALL_HDR_PATH)/include
1180 59b2bd05SMasahiro Yamada      cmd_headers_install = \
1181 59b2bd05SMasahiro Yamada	mkdir -p $(INSTALL_HDR_PATH); \
1182 59b2bd05SMasahiro Yamada	rsync -mrl --include='*/' --include='*\.h' --exclude='*' \
1183 59b2bd05SMasahiro Yamada	usr/include $(INSTALL_HDR_PATH)
1184 6d716275SDavid Woodhouse
1185 8d730cfbSDavid WoodhousePHONY += headers_install
1186 59b2bd05SMasahiro Yamadaheaders_install: headers
1187 59b2bd05SMasahiro Yamada	$(call cmd,headers_install)
1188 4f193362SPaul Smith
1189 1da177e4SLinus TorvaldsPHONY += archheaders archscripts
1190 1da177e4SLinus Torvalds
1191 a5bae54cSMasahiro Yamadahdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
1192 1da177e4SLinus Torvalds
1193 59b2bd05SMasahiro YamadaPHONY += headers
1194 59b2bd05SMasahiro Yamadaheaders: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
1195 9d022c54SMasahiro Yamada	$(if $(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/Kbuild),, \
1196 2fb9b1bdSSam Ravnborg	  $(error Headers not exportable for the $(SRCARCH) architecture))
1197 d5470d14SMasahiro Yamada	$(Q)$(MAKE) $(hdr-inst)=include/uapi
1198 d5470d14SMasahiro Yamada	$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi
1199 1f85712eSMike Frysinger
1200 7ecaf069SMasahiro Yamada# Deprecated. It is no-op now.
1201 68475359SDavid WoodhousePHONY += headers_check
1202 7ecaf069SMasahiro Yamadaheaders_check:
1203 7ecaf069SMasahiro Yamada	@:
1204 68475359SDavid Woodhouse
1205 e949f4c2SMasahiro Yamadaifdef CONFIG_HEADERS_INSTALL
1206 59b2bd05SMasahiro Yamadaprepare: headers
1207 e949f4c2SMasahiro Yamadaendif
1208 1da177e4SLinus Torvalds
1209 bdd7714bSMasahiro YamadaPHONY += scripts_unifdef
1210 bdd7714bSMasahiro Yamadascripts_unifdef: scripts_basic
1211 bdd7714bSMasahiro Yamada	$(Q)$(MAKE) $(build)=scripts scripts/unifdef
1212 bdd7714bSMasahiro Yamada
1213 1da177e4SLinus Torvalds# ---------------------------------------------------------------------------
1214 5a5da78bSShuah Khan# Kernel selftest
1215 5a5da78bSShuah Khan
1216 5a5da78bSShuah KhanPHONY += kselftest
1217 5a5da78bSShuah Khankselftest:
1218 2bc84526SShuah Khan	$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
1219 5a5da78bSShuah Khan
1220 17eac6c2SShuah Khankselftest-%: FORCE
1221 17eac6c2SShuah Khan	$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests $*
1222 dcb825a9SWang Long
1223 3d6dee7aSBamvor Jian ZhangPHONY += kselftest-merge
1224 3d6dee7aSBamvor Jian Zhangkselftest-merge:
1225 3d6dee7aSBamvor Jian Zhang	$(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!))
1226 6d3db46cSDan Rue	$(Q)find $(srctree)/tools/testing/selftests -name config | \
1227 6d3db46cSDan Rue		xargs $(srctree)/scripts/kconfig/merge_config.sh -m $(objtree)/.config
1228 3e4c6948SMasahiro Yamada	$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
1229 3d6dee7aSBamvor Jian Zhang
1230 5a5da78bSShuah Khan# ---------------------------------------------------------------------------
1231 37c8a5faSRob Herring# Devicetree files
1232 37c8a5faSRob Herring
1233 37c8a5faSRob Herringifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),)
1234 37c8a5faSRob Herringdtstree := arch/$(SRCARCH)/boot/dts
1235 37c8a5faSRob Herringendif
1236 37c8a5faSRob Herring
1237 37c8a5faSRob Herringifneq ($(dtstree),)
1238 37c8a5faSRob Herring
1239 a5139fb3SMasahiro Yamada%.dtb: include/config/kernel.release scripts_dtc
1240 37c8a5faSRob Herring	$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
1241 37c8a5faSRob Herring
1242 4f0e3a57SRob HerringPHONY += dtbs dtbs_install dt_binding_check
1243 a5139fb3SMasahiro Yamadadtbs dtbs_check: include/config/kernel.release scripts_dtc
1244 37c8a5faSRob Herring	$(Q)$(MAKE) $(build)=$(dtstree)
1245 37c8a5faSRob Herring
1246 4f0e3a57SRob Herringdtbs_check: export CHECK_DTBS=1
1247 4f0e3a57SRob Herringdtbs_check: dt_binding_check
1248 4f0e3a57SRob Herring
1249 37c8a5faSRob Herringdtbs_install:
1250 37c8a5faSRob Herring	$(Q)$(MAKE) $(dtbinst)=$(dtstree)
1251 37c8a5faSRob Herring
1252 37c8a5faSRob Herringifdef CONFIG_OF_EARLY_FLATTREE
1253 37c8a5faSRob Herringall: dtbs
1254 37c8a5faSRob Herringendif
1255 37c8a5faSRob Herring
1256 37c8a5faSRob Herringendif
1257 37c8a5faSRob Herring
1258 37c8a5faSRob HerringPHONY += scripts_dtc
1259 37c8a5faSRob Herringscripts_dtc: scripts_basic
1260 37c8a5faSRob Herring	$(Q)$(MAKE) $(build)=scripts/dtc
1261 37c8a5faSRob Herring
1262 4f0e3a57SRob Herringdt_binding_check: scripts_dtc
1263 4f0e3a57SRob Herring	$(Q)$(MAKE) $(build)=Documentation/devicetree/bindings
1264 4f0e3a57SRob Herring
1265 37c8a5faSRob Herring# ---------------------------------------------------------------------------
1266 1da177e4SLinus Torvalds# Modules
1267 1da177e4SLinus Torvalds
1268 1da177e4SLinus Torvaldsifdef CONFIG_MODULES
1269 1da177e4SLinus Torvalds
1270 1da177e4SLinus Torvalds# By default, build modules as well
1271 1da177e4SLinus Torvalds
1272 73d1393eSMichal Marekall: modules
1273 1da177e4SLinus Torvalds
1274 1da177e4SLinus Torvalds# Build modules
1275 551559e1STejun Heo#
1276 551559e1STejun Heo# A module can be listed more than once in obj-m resulting in
1277 551559e1STejun Heo# duplicate lines in modules.order files.  Those are removed
1278 551559e1STejun Heo# using awk while concatenating to the final file.
1279 1da177e4SLinus Torvalds
1280 4f193362SPaul SmithPHONY += modules
1281 *8b41fc44SMasahiro Yamadamodules: $(if $(KBUILD_BUILTIN),vmlinux) modules.order
1282 b805aa0eSSam Ravnborg	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
1283 3a48a919SMasahiro Yamada	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh
1284 1da177e4SLinus Torvalds
1285 c99f3918SMasahiro Yamadamodules.order: descend
1286 c99f3918SMasahiro Yamada	$(Q)$(AWK) '!x[$$0]++' $(addsuffix /$@, $(build-dirs)) > $@
1287 a6c36632SMichal Marek
1288 1da177e4SLinus Torvalds# Target to prepare building external modules
1289 4f193362SPaul SmithPHONY += modules_prepare
1290 059bc9fcSMasahiro Yamadamodules_prepare: prepare
1291 1da177e4SLinus Torvalds
1292 1da177e4SLinus Torvalds# Target to install modules
1293 4f193362SPaul SmithPHONY += modules_install
1294 1da177e4SLinus Torvaldsmodules_install: _modinst_ _modinst_post
1295 1da177e4SLinus Torvalds
1296 4f193362SPaul SmithPHONY += _modinst_
1297 2da30e70SMichal Marek_modinst_:
1298 1da177e4SLinus Torvalds	@rm -rf $(MODLIB)/kernel
1299 1da177e4SLinus Torvalds	@rm -f $(MODLIB)/source
1300 1da177e4SLinus Torvalds	@mkdir -p $(MODLIB)/kernel
1301 8e9b4667SMasahiro Yamada	@ln -s $(abspath $(srctree)) $(MODLIB)/source
1302 1da177e4SLinus Torvalds	@if [ ! $(objtree) -ef  $(MODLIB)/build ]; then \
1303 1da177e4SLinus Torvalds		rm -f $(MODLIB)/build ; \
1304 7e1c0477SMichal Marek		ln -s $(CURDIR) $(MODLIB)/build ; \
1305 1da177e4SLinus Torvalds	fi
1306 1bd9a468SMasahiro Yamada	@sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order
1307 *8b41fc44SMasahiro Yamada	@cp -f modules.builtin $(MODLIB)/
1308 898490c0SAlexey Gladkov	@cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
1309 b805aa0eSSam Ravnborg	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
1310 1da177e4SLinus Torvalds
1311 50a8ec31SSam Ravnborg# This depmod is only for convenience to give the initial
1312 1da177e4SLinus Torvalds# boot a modules.dep even before / is mounted read-write.  However the
1313 1da177e4SLinus Torvalds# boot script depmod is the master version.
1314 4f193362SPaul SmithPHONY += _modinst_post
1315 6d128e1eSLinus Torvalds_modinst_post: _modinst_
1316 50a8ec31SSam Ravnborg	$(call cmd,depmod)
1317 1da177e4SLinus Torvalds
1318 d890f510SJosh Boyerifeq ($(CONFIG_MODULE_SIG), y)
1319 d890f510SJosh BoyerPHONY += modules_sign
1320 d890f510SJosh Boyermodules_sign:
1321 d890f510SJosh Boyer	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modsign
1322 d890f510SJosh Boyerendif
1323 d890f510SJosh Boyer
1324 1da177e4SLinus Torvaldselse # CONFIG_MODULES
1325 1da177e4SLinus Torvalds
1326 1da177e4SLinus Torvalds# Modules not configured
1327 1da177e4SLinus Torvalds# ---------------------------------------------------------------------------
1328 1da177e4SLinus Torvalds
1329 612e47ceSMasahiro YamadaPHONY += modules modules_install
1330 612e47ceSMasahiro Yamadamodules modules_install:
1331 5369f550SMichal Marek	@echo >&2
1332 5369f550SMichal Marek	@echo >&2 "The present kernel configuration has modules disabled."
1333 5369f550SMichal Marek	@echo >&2 "Type 'make config' and enable loadable module support."
1334 5369f550SMichal Marek	@echo >&2 "Then build a kernel with module support enabled."
1335 5369f550SMichal Marek	@echo >&2
1336 1da177e4SLinus Torvalds	@exit 1
1337 1da177e4SLinus Torvalds
1338 1da177e4SLinus Torvaldsendif # CONFIG_MODULES
1339 1da177e4SLinus Torvalds
1340 1da177e4SLinus Torvalds###
1341 1da177e4SLinus Torvalds# Cleaning is done on three levels.
1342 1da177e4SLinus Torvalds# make clean     Delete most generated files
1343 1da177e4SLinus Torvalds#                Leave enough to build external modules
1344 1da177e4SLinus Torvalds# make mrproper  Delete the current configuration, and all generated files
1345 1da177e4SLinus Torvalds# make distclean Remove editor backup files, patch leftover files and the like
1346 1da177e4SLinus Torvalds
1347 1da177e4SLinus Torvalds# Directories & files removed with 'make clean'
1348 b7dca6ddSMasahiro YamadaCLEAN_DIRS  += include/ksym
1349 *8b41fc44SMasahiro YamadaCLEAN_FILES += modules.builtin modules.builtin.modinfo modules.nsdeps
1350 1da177e4SLinus Torvalds
1351 1da177e4SLinus Torvalds# Directories & files removed with 'make mrproper'
1352 d6fc9fcbSMasahiro YamadaMRPROPER_DIRS  += include/config include/generated          \
1353 46a63d4bSMasahiro Yamada		  arch/$(SRCARCH)/include/generated .tmp_objdiff \
1354 46a63d4bSMasahiro Yamada		  debian/ snap/ tar-install/
1355 278ae604SMasahiro YamadaMRPROPER_FILES += .config .config.old .version \
1356 46457133SMasahiro Yamada		  Module.symvers \
1357 fb117949SDavid Woodhouse		  signing_key.pem signing_key.priv signing_key.x509	\
1358 fb117949SDavid Woodhouse		  x509.genkey extra_certificates signing_key.x509.keyid	\
1359 46a63d4bSMasahiro Yamada		  signing_key.x509.signer vmlinux-gdb.py \
1360 46a63d4bSMasahiro Yamada		  *.spec
1361 1da177e4SLinus Torvalds
1362 46457133SMasahiro Yamada# Directories & files removed with 'make distclean'
1363 46457133SMasahiro YamadaDISTCLEAN_DIRS  +=
1364 46457133SMasahiro YamadaDISTCLEAN_FILES += tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS
1365 46457133SMasahiro Yamada
1366 1da177e4SLinus Torvalds# clean - Delete most, but leave enough to build external modules
1367 1da177e4SLinus Torvalds#
1368 1da177e4SLinus Torvaldsclean: rm-dirs  := $(CLEAN_DIRS)
1369 1da177e4SLinus Torvaldsclean: rm-files := $(CLEAN_FILES)
1370 1da177e4SLinus Torvalds
1371 76cd306dSMasahiro YamadaPHONY += archclean vmlinuxclean
1372 1da177e4SLinus Torvalds
1373 bd1ee804SPawel Mollvmlinuxclean:
1374 bd1ee804SPawel Moll	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean
1375 fbe6e37dSNicholas Piggin	$(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean)
1376 bd1ee804SPawel Moll
1377 bd1ee804SPawel Mollclean: archclean vmlinuxclean
1378 1da177e4SLinus Torvalds
1379 1da177e4SLinus Torvalds# mrproper - Delete all generated files, including .config
1380 1da177e4SLinus Torvalds#
1381 1da177e4SLinus Torvaldsmrproper: rm-dirs  := $(wildcard $(MRPROPER_DIRS))
1382 1da177e4SLinus Torvaldsmrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1383 cb43fb57SMauro Carvalho Chehabmrproper-dirs      := $(addprefix _mrproper_,scripts)
1384 1da177e4SLinus Torvalds
1385 b421b8a6SMasahiro YamadaPHONY += $(mrproper-dirs) mrproper
1386 1da177e4SLinus Torvalds$(mrproper-dirs):
1387 1da177e4SLinus Torvalds	$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
1388 1da177e4SLinus Torvalds
1389 b421b8a6SMasahiro Yamadamrproper: clean $(mrproper-dirs)
1390 1da177e4SLinus Torvalds	$(call cmd,rmdirs)
1391 1da177e4SLinus Torvalds	$(call cmd,rmfiles)
1392 1da177e4SLinus Torvalds
1393 1da177e4SLinus Torvalds# distclean
1394 1da177e4SLinus Torvalds#
1395 46457133SMasahiro Yamadadistclean: rm-dirs  := $(wildcard $(DISTCLEAN_DIRS))
1396 46457133SMasahiro Yamadadistclean: rm-files := $(wildcard $(DISTCLEAN_FILES))
1397 46457133SMasahiro Yamada
1398 4f193362SPaul SmithPHONY += distclean
1399 1da177e4SLinus Torvalds
1400 1da177e4SLinus Torvaldsdistclean: mrproper
1401 46457133SMasahiro Yamada	$(call cmd,rmdirs)
1402 46457133SMasahiro Yamada	$(call cmd,rmfiles)
1403 1da177e4SLinus Torvalds	@find $(srctree) $(RCS_FIND_IGNORE) \
1404 1da177e4SLinus Torvalds		\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
1405 f78271dfSMasahiro Yamada		-o -name '*.bak' -o -name '#*#' -o -name '*%' \
1406 f78271dfSMasahiro Yamada		-o -name 'core' \) \
1407 1da177e4SLinus Torvalds		-type f -print | xargs rm -f
1408 1da177e4SLinus Torvalds
1409 1da177e4SLinus Torvalds
1410 1da177e4SLinus Torvalds# Packaging of the kernel to various formats
1411 1da177e4SLinus Torvalds# ---------------------------------------------------------------------------
1412 1da177e4SLinus Torvalds
1413 bafb6747SArnaldo Carvalho de Melo%src-pkg: FORCE
1414 000ec95fSMasahiro Yamada	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
1415 031ecc6dSZach Brown%pkg: include/config/kernel.release FORCE
1416 000ec95fSMasahiro Yamada	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
1417 1da177e4SLinus Torvalds
1418 1da177e4SLinus Torvalds# Brief documentation of the typical targets used
1419 1da177e4SLinus Torvalds# ---------------------------------------------------------------------------
1420 1da177e4SLinus Torvalds
1421 5dffbe81SSegher Boessenkoolboards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig)
1422 a1e7b7bbSKonstantin Khlebnikovboards := $(sort $(notdir $(boards)))
1423 5dffbe81SSegher Boessenkoolboard-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig))
1424 5dffbe81SSegher Boessenkoolboard-dirs := $(sort $(notdir $(board-dirs:/=)))
1425 1da177e4SLinus Torvalds
1426 fe69b420SMasahiro YamadaPHONY += help
1427 1da177e4SLinus Torvaldshelp:
1428 1da177e4SLinus Torvalds	@echo  'Cleaning targets:'
1429 5ea084efSSamuel Tardieu	@echo  '  clean		  - Remove most generated files but keep the config and'
1430 5cc8d246SJesper Juhl	@echo  '                    enough build support to build external modules'
1431 5ea084efSSamuel Tardieu	@echo  '  mrproper	  - Remove all generated files + config + various backup files'
1432 5cc8d246SJesper Juhl	@echo  '  distclean	  - mrproper + remove editor backup and patch files'
1433 1da177e4SLinus Torvalds	@echo  ''
1434 1da177e4SLinus Torvalds	@echo  'Configuration targets:'
1435 1da177e4SLinus Torvalds	@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
1436 1da177e4SLinus Torvalds	@echo  ''
1437 1da177e4SLinus Torvalds	@echo  'Other generic targets:'
1438 1da177e4SLinus Torvalds	@echo  '  all		  - Build all targets marked with [*]'
1439 1da177e4SLinus Torvalds	@echo  '* vmlinux	  - Build the bare kernel'
1440 1da177e4SLinus Torvalds	@echo  '* modules	  - Build all modules'
1441 9cc5d74cSBodo Eggert	@echo  '  modules_install - Install all modules to INSTALL_MOD_PATH (default: /)'
1442 1da177e4SLinus Torvalds	@echo  '  dir/            - Build all files in dir and below'
1443 40ab87a4SWang YanQing	@echo  '  dir/file.[ois]  - Build specified target only'
1444 433db3e2SVinícius Tinti	@echo  '  dir/file.ll     - Build the LLVM assembly file'
1445 433db3e2SVinícius Tinti	@echo  '                    (requires compiler support for LLVM assembly generation)'
1446 62718979SJoe Perches	@echo  '  dir/file.lst    - Build specified mixed source/assembly target only'
1447 62718979SJoe Perches	@echo  '                    (requires a recent binutils and recent build (System.map))'
1448 155ad605SSam Ravnborg	@echo  '  dir/file.ko     - Build module including final link'
1449 c4d5ee67SRobert P. J. Day	@echo  '  modules_prepare - Set up for building external modules'
1450 1da177e4SLinus Torvalds	@echo  '  tags/TAGS	  - Generate tags file for editors'
1451 1da177e4SLinus Torvalds	@echo  '  cscope	  - Generate cscope index'
1452 f4ed1009SJianbin Kang	@echo  '  gtags           - Generate GNU GLOBAL index'
1453 3f1d9a6cSMichal Marek	@echo  '  kernelrelease	  - Output the release version string (use with make -s)'
1454 3f1d9a6cSMichal Marek	@echo  '  kernelversion	  - Output the version stored in Makefile (use with make -s)'
1455 3f1d9a6cSMichal Marek	@echo  '  image_name	  - Output the image name (use with make -s)'
1456 2fb9b1bdSSam Ravnborg	@echo  '  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
1457 59df3230SGeert Uytterhoeven	 echo  '                    (default: $(INSTALL_HDR_PATH))'; \
1458 2fb9b1bdSSam Ravnborg	 echo  ''
1459 31b8cc80SRandy Dunlap	@echo  'Static analysers:'
1460 1da177e4SLinus Torvalds	@echo  '  checkstack      - Generate a list of stack hogs'
1461 1da177e4SLinus Torvalds	@echo  '  namespacecheck  - Name space analysis on compiled kernel'
1462 aa025e7dSSam Ravnborg	@echo  '  versioncheck    - Sanity check on version.h usage'
1463 ec2d987fSRandy Dunlap	@echo  '  includecheck    - Check for duplicate included header files'
1464 295ac051SAdrian Bunk	@echo  '  export_report   - List the usages of all exported symbols'
1465 74425eeeSNicolas Palix	@echo  '  headerdep       - Detect inclusion cycles in headers'
1466 7f855fc8SMasahiro Yamada	@echo  '  coccicheck      - Check with Coccinelle'
1467 74425eeeSNicolas Palix	@echo  ''
1468 eb8305aeSMatthias Maennich	@echo  'Tools:'
1469 eb8305aeSMatthias Maennich	@echo  '  nsdeps          - Generate missing symbol namespace dependencies'
1470 eb8305aeSMatthias Maennich	@echo  ''
1471 31b8cc80SRandy Dunlap	@echo  'Kernel selftest:'
1472 5a5da78bSShuah Khan	@echo  '  kselftest       - Build and run kernel selftest (run as root)'
1473 5a5da78bSShuah Khan	@echo  '                    Build, install, and boot kernel before'
1474 5a5da78bSShuah Khan	@echo  '                    running kselftest on it'
1475 dcb825a9SWang Long	@echo  '  kselftest-clean - Remove all generated kselftest files'
1476 bbfe63b6SRandy Dunlap	@echo  '  kselftest-merge - Merge all the config dependencies of kselftest to existing'
1477 3d6dee7aSBamvor Jian Zhang	@echo  '                    .config.'
1478 5a5da78bSShuah Khan	@echo  ''
1479 37c8a5faSRob Herring	@$(if $(dtstree), \
1480 37c8a5faSRob Herring		echo 'Devicetree:'; \
1481 37c8a5faSRob Herring		echo '* dtbs             - Build device tree blobs for enabled boards'; \
1482 37c8a5faSRob Herring		echo '  dtbs_install     - Install dtbs to $(INSTALL_DTBS_PATH)'; \
1483 7aa8dd91SStephen Boyd		echo '  dt_binding_check - Validate device tree binding documents'; \
1484 7aa8dd91SStephen Boyd		echo '  dtbs_check       - Validate device tree source files';\
1485 37c8a5faSRob Herring		echo '')
1486 37c8a5faSRob Herring
1487 31b8cc80SRandy Dunlap	@echo 'Userspace tools targets:'
1488 31b8cc80SRandy Dunlap	@echo '  use "make tools/help"'
1489 31b8cc80SRandy Dunlap	@echo '  or  "cd tools; make help"'
1490 31b8cc80SRandy Dunlap	@echo  ''
1491 1da177e4SLinus Torvalds	@echo  'Kernel packaging:'
1492 000ec95fSMasahiro Yamada	@$(MAKE) -f $(srctree)/scripts/Makefile.package help
1493 1da177e4SLinus Torvalds	@echo  ''
1494 1da177e4SLinus Torvalds	@echo  'Documentation targets:'
1495 cb43fb57SMauro Carvalho Chehab	@$(MAKE) -f $(srctree)/Documentation/Makefile dochelp
1496 1da177e4SLinus Torvalds	@echo  ''
1497 01dee188SAndres Salomon	@echo  'Architecture specific targets ($(SRCARCH)):'
1498 1da177e4SLinus Torvalds	@$(if $(archhelp),$(archhelp),\
1499 01dee188SAndres Salomon		echo '  No architecture specific help defined for $(SRCARCH)')
1500 1da177e4SLinus Torvalds	@echo  ''
1501 1da177e4SLinus Torvalds	@$(if $(boards), \
1502 1da177e4SLinus Torvalds		$(foreach b, $(boards), \
1503 4234448bSGeert Uytterhoeven		printf "  %-27s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
1504 1da177e4SLinus Torvalds		echo '')
1505 5dffbe81SSegher Boessenkool	@$(if $(board-dirs), \
1506 5dffbe81SSegher Boessenkool		$(foreach b, $(board-dirs), \
1507 5dffbe81SSegher Boessenkool		printf "  %-16s - Show %s-specific targets\\n" help-$(b) $(b);) \
1508 5dffbe81SSegher Boessenkool		printf "  %-16s - Show all of the above\\n" help-boards; \
1509 5dffbe81SSegher Boessenkool		echo '')
1510 1da177e4SLinus Torvalds
1511 1da177e4SLinus Torvalds	@echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
1512 45d506bdSSam Ravnborg	@echo  '  make V=2   [targets] 2 => give reason for rebuild of target'
1513 1da177e4SLinus Torvalds	@echo  '  make O=dir [targets] Locate all output files in "dir", including .config'
1514 a64c0440SGeert Uytterhoeven	@echo  '  make C=1   [targets] Check re-compiled c source with $$CHECK'
1515 a64c0440SGeert Uytterhoeven	@echo  '                       (sparse by default)'
1516 701842e3SDustin Kirkland	@echo  '  make C=2   [targets] Force check of all c source with $$CHECK'
1517 af07ce3eSIngo Molnar	@echo  '  make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
1518 e27128dbSMasahiro Yamada	@echo  '  make W=n   [targets] Enable extra build checks, n=1,2,3 where'
1519 28bc20dcSSam Ravnborg	@echo  '		1: warnings which may be relevant and do not occur too often'
1520 28bc20dcSSam Ravnborg	@echo  '		2: warnings which occur quite often but may still be relevant'
1521 28bc20dcSSam Ravnborg	@echo  '		3: more obscure warnings, can most likely be ignored'
1522 a6de553dSMichal Marek	@echo  '		Multiple levels can be combined with W=12 or W=123'
1523 1da177e4SLinus Torvalds	@echo  ''
1524 1da177e4SLinus Torvalds	@echo  'Execute "make" or "make all" to build all targets marked with [*] '
1525 1da177e4SLinus Torvalds	@echo  'For further info see the ./README file'
1526 1da177e4SLinus Torvalds
1527 1da177e4SLinus Torvalds
1528 5dffbe81SSegher Boessenkoolhelp-board-dirs := $(addprefix help-,$(board-dirs))
1529 5dffbe81SSegher Boessenkool
1530 5dffbe81SSegher Boessenkoolhelp-boards: $(help-board-dirs)
1531 5dffbe81SSegher Boessenkool
1532 fbae4d58SMichal Marekboards-per-dir = $(sort $(notdir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/$*/*_defconfig)))
1533 5dffbe81SSegher Boessenkool
1534 5dffbe81SSegher Boessenkool$(help-board-dirs): help-%:
1535 5dffbe81SSegher Boessenkool	@echo  'Architecture specific targets ($(SRCARCH) $*):'
1536 5dffbe81SSegher Boessenkool	@$(if $(boards-per-dir), \
1537 5dffbe81SSegher Boessenkool		$(foreach b, $(boards-per-dir), \
1538 5dffbe81SSegher Boessenkool		printf "  %-24s - Build for %s\\n" $*/$(b) $(subst _defconfig,,$(b));) \
1539 5dffbe81SSegher Boessenkool		echo '')
1540 5dffbe81SSegher Boessenkool
1541 5dffbe81SSegher Boessenkool
1542 1da177e4SLinus Torvalds# Documentation targets
1543 1da177e4SLinus Torvalds# ---------------------------------------------------------------------------
1544 e8939222SJani NikulaDOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
1545 e8939222SJani Nikula	       linkcheckdocs dochelp refcheckdocs
1546 22cba31bSJani NikulaPHONY += $(DOC_TARGETS)
1547 bc7b752aSMasahiro Yamada$(DOC_TARGETS):
1548 cb43fb57SMauro Carvalho Chehab	$(Q)$(MAKE) $(build)=Documentation $@
1549 1da177e4SLinus Torvalds
1550 67274c08SMasahiro Yamada# Misc
1551 67274c08SMasahiro Yamada# ---------------------------------------------------------------------------
1552 67274c08SMasahiro Yamada
1553 67274c08SMasahiro YamadaPHONY += scripts_gdb
1554 7a739ce5SMasahiro Yamadascripts_gdb: prepare0
1555 1e5ff84fSMasahiro Yamada	$(Q)$(MAKE) $(build)=scripts/gdb
1556 8d2e5200SMasahiro Yamada	$(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py)
1557 67274c08SMasahiro Yamada
1558 67274c08SMasahiro Yamadaifdef CONFIG_GDB_SCRIPTS
1559 67274c08SMasahiro Yamadaall: scripts_gdb
1560 67274c08SMasahiro Yamadaendif
1561 67274c08SMasahiro Yamada
1562 1da177e4SLinus Torvaldselse # KBUILD_EXTMOD
1563 1da177e4SLinus Torvalds
1564 1da177e4SLinus Torvalds###
1565 1da177e4SLinus Torvalds# External module support.
1566 1da177e4SLinus Torvalds# When building external modules the kernel used as basis is considered
1567 1da177e4SLinus Torvalds# read-only, and no consistency checks are made and the make
1568 1da177e4SLinus Torvalds# system is not used on the basis kernel. If updates are required
1569 1da177e4SLinus Torvalds# in the basis kernel ordinary make commands (without M=...) must
1570 1da177e4SLinus Torvalds# be used.
1571 1da177e4SLinus Torvalds#
1572 1da177e4SLinus Torvalds# The following are the only valid targets when building external
1573 1da177e4SLinus Torvalds# modules.
1574 1da177e4SLinus Torvalds# make M=dir clean     Delete all automatically generated files
1575 1da177e4SLinus Torvalds# make M=dir modules   Make all modules in specified dir
1576 1da177e4SLinus Torvalds# make M=dir	       Same as 'make M=dir modules'
1577 1da177e4SLinus Torvalds# make M=dir modules_install
1578 070b98bfSSam Ravnborg#                      Install the modules built in the module directory
1579 1da177e4SLinus Torvalds#                      Assumes install directory is already created
1580 1da177e4SLinus Torvalds
1581 1da177e4SLinus Torvalds# We are always building modules
1582 1da177e4SLinus TorvaldsKBUILD_MODULES := 1
1583 1da177e4SLinus Torvalds
1584 4f193362SPaul SmithPHONY += $(objtree)/Module.symvers
1585 1da177e4SLinus Torvalds$(objtree)/Module.symvers:
1586 1da177e4SLinus Torvalds	@test -e $(objtree)/Module.symvers || ( \
1587 1da177e4SLinus Torvalds	echo; \
1588 1da177e4SLinus Torvalds	echo "  WARNING: Symbol version dump $(objtree)/Module.symvers"; \
1589 1da177e4SLinus Torvalds	echo "           is missing; modules will have no dependencies and modversions."; \
1590 1da177e4SLinus Torvalds	echo )
1591 1da177e4SLinus Torvalds
1592 c99f3918SMasahiro Yamadabuild-dirs := $(KBUILD_EXTMOD)
1593 c99f3918SMasahiro YamadaPHONY += modules
1594 c99f3918SMasahiro Yamadamodules: descend $(objtree)/Module.symvers
1595 b805aa0eSSam Ravnborg	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
1596 1da177e4SLinus Torvalds
1597 4f193362SPaul SmithPHONY += modules_install
1598 a67dc21aSSam Ravnborgmodules_install: _emodinst_ _emodinst_post
1599 a67dc21aSSam Ravnborg
1600 a67dc21aSSam Ravnborginstall-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra)
1601 4f193362SPaul SmithPHONY += _emodinst_
1602 a67dc21aSSam Ravnborg_emodinst_:
1603 a67dc21aSSam Ravnborg	$(Q)mkdir -p $(MODLIB)/$(install-dir)
1604 b805aa0eSSam Ravnborg	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
1605 1da177e4SLinus Torvalds
1606 4f193362SPaul SmithPHONY += _emodinst_post
1607 a67dc21aSSam Ravnborg_emodinst_post: _emodinst_
1608 a67dc21aSSam Ravnborg	$(call cmd,depmod)
1609 a67dc21aSSam Ravnborg
1610 76cd306dSMasahiro Yamadaclean-dirs := $(KBUILD_EXTMOD)
1611 bc35d4bdSMasahiro Yamadaclean: rm-files := $(KBUILD_EXTMOD)/Module.symvers $(KBUILD_EXTMOD)/modules.nsdeps
1612 1da177e4SLinus Torvalds
1613 d4945049SMasahiro YamadaPHONY += /
1614 d4945049SMasahiro Yamada/:
1615 d4945049SMasahiro Yamada	@echo >&2 '"$(MAKE) /" is no longer supported. Please use "$(MAKE) ./" instead.'
1616 d4945049SMasahiro Yamada
1617 fe69b420SMasahiro YamadaPHONY += help
1618 1da177e4SLinus Torvaldshelp:
1619 1da177e4SLinus Torvalds	@echo  '  Building external modules.'
1620 1da177e4SLinus Torvalds	@echo  '  Syntax: make -C path/to/kernel/src M=$$PWD target'
1621 1da177e4SLinus Torvalds	@echo  ''
1622 1da177e4SLinus Torvalds	@echo  '  modules         - default target, build the module(s)'
1623 1da177e4SLinus Torvalds	@echo  '  modules_install - install the module'
1624 1da177e4SLinus Torvalds	@echo  '  clean           - remove generated files in module directory only'
1625 1da177e4SLinus Torvalds	@echo  ''
1626 06300b21SSam Ravnborg
1627 059bc9fcSMasahiro YamadaPHONY += prepare
1628 1da177e4SLinus Torvaldsendif # KBUILD_EXTMOD
1629 1da177e4SLinus Torvalds
1630 b1fbfcb4SMasahiro Yamada# Single targets
1631 b1fbfcb4SMasahiro Yamada# ---------------------------------------------------------------------------
1632 b1fbfcb4SMasahiro Yamada# To build individual files in subdirectories, you can do like this:
1633 b1fbfcb4SMasahiro Yamada#
1634 b1fbfcb4SMasahiro Yamada#   make foo/bar/baz.s
1635 b1fbfcb4SMasahiro Yamada#
1636 b1fbfcb4SMasahiro Yamada# The supported suffixes for single-target are listed in 'single-targets'
1637 b1fbfcb4SMasahiro Yamada#
1638 b1fbfcb4SMasahiro Yamada# To build only under specific subdirectories, you can do like this:
1639 b1fbfcb4SMasahiro Yamada#
1640 b1fbfcb4SMasahiro Yamada#   make foo/bar/baz/
1641 b1fbfcb4SMasahiro Yamada
1642 b1fbfcb4SMasahiro Yamadaifdef single-build
1643 b1fbfcb4SMasahiro Yamada
1644 b1fbfcb4SMasahiro Yamada# .ko is special because modpost is needed
1645 b1fbfcb4SMasahiro Yamadasingle-ko := $(sort $(filter %.ko, $(MAKECMDGOALS)))
1646 b1fbfcb4SMasahiro Yamadasingle-no-ko := $(sort $(patsubst %.ko,%.mod, $(MAKECMDGOALS)))
1647 b1fbfcb4SMasahiro Yamada
1648 b1fbfcb4SMasahiro Yamada$(single-ko): single_modpost
1649 b1fbfcb4SMasahiro Yamada	@:
1650 b1fbfcb4SMasahiro Yamada$(single-no-ko): descend
1651 b1fbfcb4SMasahiro Yamada	@:
1652 b1fbfcb4SMasahiro Yamada
1653 b1fbfcb4SMasahiro Yamadaifeq ($(KBUILD_EXTMOD),)
1654 b1fbfcb4SMasahiro Yamada# For the single build of in-tree modules, use a temporary file to avoid
1655 b1fbfcb4SMasahiro Yamada# the situation of modules_install installing an invalid modules.order.
1656 b1fbfcb4SMasahiro YamadaMODORDER := .modules.tmp
1657 b1fbfcb4SMasahiro Yamadaendif
1658 b1fbfcb4SMasahiro Yamada
1659 b1fbfcb4SMasahiro YamadaPHONY += single_modpost
1660 b1fbfcb4SMasahiro Yamadasingle_modpost: $(single-no-ko)
1661 b1fbfcb4SMasahiro Yamada	$(Q){ $(foreach m, $(single-ko), echo $(extmod-prefix)$m;) } > $(MODORDER)
1662 b1fbfcb4SMasahiro Yamada	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
1663 b1fbfcb4SMasahiro Yamada
1664 b1fbfcb4SMasahiro YamadaKBUILD_MODULES := 1
1665 b1fbfcb4SMasahiro Yamada
1666 b1fbfcb4SMasahiro Yamadaexport KBUILD_SINGLE_TARGETS := $(addprefix $(extmod-prefix), $(single-no-ko))
1667 b1fbfcb4SMasahiro Yamada
1668 b1fbfcb4SMasahiro Yamada# trim unrelated directories
1669 b1fbfcb4SMasahiro Yamadabuild-dirs := $(foreach d, $(build-dirs), \
1670 b1fbfcb4SMasahiro Yamada			$(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d)))
1671 b1fbfcb4SMasahiro Yamada
1672 b1fbfcb4SMasahiro Yamadaendif
1673 b1fbfcb4SMasahiro Yamada
1674 c99f3918SMasahiro Yamada# Handle descending into subdirectories listed in $(build-dirs)
1675 c99f3918SMasahiro Yamada# Preset locale variables to speed up the build process. Limit locale
1676 c99f3918SMasahiro Yamada# tweaks to this spot to avoid wrong language settings when running
1677 c99f3918SMasahiro Yamada# make menuconfig etc.
1678 c99f3918SMasahiro Yamada# Error messages still appears in the original language
1679 c99f3918SMasahiro YamadaPHONY += descend $(build-dirs)
1680 c99f3918SMasahiro Yamadadescend: $(build-dirs)
1681 c99f3918SMasahiro Yamada$(build-dirs): prepare
1682 b1fbfcb4SMasahiro Yamada	$(Q)$(MAKE) $(build)=$@ \
1683 b1fbfcb4SMasahiro Yamada	single-build=$(if $(filter-out $@/, $(single-no-ko)),1) \
1684 b1fbfcb4SMasahiro Yamada	need-builtin=1 need-modorder=1
1685 c99f3918SMasahiro Yamada
1686 76cd306dSMasahiro Yamadaclean-dirs := $(addprefix _clean_, $(clean-dirs))
1687 76cd306dSMasahiro YamadaPHONY += $(clean-dirs) clean
1688 76cd306dSMasahiro Yamada$(clean-dirs):
1689 76cd306dSMasahiro Yamada	$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1690 76cd306dSMasahiro Yamada
1691 88d7be03SMichal Marekclean: $(clean-dirs)
1692 88d7be03SMichal Marek	$(call cmd,rmdirs)
1693 88d7be03SMichal Marek	$(call cmd,rmfiles)
1694 43f67c98SKevin Cernekee	@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1695 ef46d9b3SMasahiro Yamada		\( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \
1696 4f0e3a57SRob Herring		-o -name '*.ko.*' \
1697 4f0e3a57SRob Herring		-o -name '*.dtb' -o -name '*.dtb.S' -o -name '*.dt.yaml' \
1698 ef46d9b3SMasahiro Yamada		-o -name '*.dwo' -o -name '*.lst' \
1699 bbc55bdeSMasahiro Yamada		-o -name '*.su' -o -name '*.mod' \
1700 88d7be03SMichal Marek		-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
1701 9a8dfb39SMasahiro Yamada		-o -name '*.lex.c' -o -name '*.tab.[ch]' \
1702 4fa8bc94SMasahiro Yamada		-o -name '*.asn1.[ch]' \
1703 88d7be03SMichal Marek		-o -name '*.symtypes' -o -name 'modules.order' \
1704 *8b41fc44SMasahiro Yamada		-o -name '.tmp_*.o.*' \
1705 6b90bd4bSEmese Revfy		-o -name '*.c.[012]*.*' \
1706 433db3e2SVinícius Tinti		-o -name '*.ll' \
1707 88d7be03SMichal Marek		-o -name '*.gcno' \) -type f -print | xargs rm -f
1708 88d7be03SMichal Marek
1709 1da177e4SLinus Torvalds# Generate tags for editors
1710 1da177e4SLinus Torvalds# ---------------------------------------------------------------------------
1711 a680eedcSSam Ravnborgquiet_cmd_tags = GEN     $@
1712 858805b3SMasahiro Yamada      cmd_tags = $(BASH) $(srctree)/scripts/tags.sh $@
1713 1da177e4SLinus Torvalds
1714 f4ed1009SJianbin Kangtags TAGS cscope gtags: FORCE
1715 1da177e4SLinus Torvalds	$(call cmd,tags)
1716 1da177e4SLinus Torvalds
1717 eb8305aeSMatthias Maennich# Script to generate missing namespace dependencies
1718 eb8305aeSMatthias Maennich# ---------------------------------------------------------------------------
1719 eb8305aeSMatthias Maennich
1720 eb8305aeSMatthias MaennichPHONY += nsdeps
1721 bff9c62bSMasahiro Yamadansdeps: export KBUILD_NSDEPS=1
1722 eb8305aeSMatthias Maennichnsdeps: modules
1723 bff9c62bSMasahiro Yamada	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/nsdeps
1724 eb8305aeSMatthias Maennich
1725 1da177e4SLinus Torvalds# Scripts to check various things for consistency
1726 1da177e4SLinus Torvalds# ---------------------------------------------------------------------------
1727 1da177e4SLinus Torvalds
1728 279f3dd3SPeter FoleyPHONY += includecheck versioncheck coccicheck namespacecheck export_report
1729 279f3dd3SPeter Foley
1730 1da177e4SLinus Torvaldsincludecheck:
1731 436f876cSPeter Foley	find $(srctree)/* $(RCS_FIND_IGNORE) \
1732 1da177e4SLinus Torvalds		-name '*.[hcS]' -type f -print | sort \
1733 80007434SGeert Uytterhoeven		| xargs $(PERL) -w $(srctree)/scripts/checkincludes.pl
1734 1da177e4SLinus Torvalds
1735 1da177e4SLinus Torvaldsversioncheck:
1736 2ee2d292SPeter Foley	find $(srctree)/* $(RCS_FIND_IGNORE) \
1737 1da177e4SLinus Torvalds		-name '*.[hcS]' -type f -print | sort \
1738 80007434SGeert Uytterhoeven		| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
1739 1da177e4SLinus Torvalds
1740 74425eeeSNicolas Palixcoccicheck:
1741 858805b3SMasahiro Yamada	$(Q)$(BASH) $(srctree)/scripts/$@
1742 74425eeeSNicolas Palix
1743 1da177e4SLinus Torvaldsnamespacecheck:
1744 1da177e4SLinus Torvalds	$(PERL) $(srctree)/scripts/namespace.pl
1745 1da177e4SLinus Torvalds
1746 295ac051SAdrian Bunkexport_report:
1747 295ac051SAdrian Bunk	$(PERL) $(srctree)/scripts/export_report.pl
1748 295ac051SAdrian Bunk
1749 c398ff00SMike MarciniszynPHONY += checkstack kernelrelease kernelversion image_name
1750 e3ccf6e3SJeff Dike
1751 011e3a9aSJeff Dike# UML needs a little special treatment here.  It wants to use the host
1752 011e3a9aSJeff Dike# toolchain, so needs $(SUBARCH) passed to checkstack.pl.  Everyone
1753 011e3a9aSJeff Dike# else wants $(ARCH), including people doing cross-builds, which means
1754 011e3a9aSJeff Dike# that $(SUBARCH) doesn't work here.
1755 011e3a9aSJeff Dikeifeq ($(ARCH), um)
1756 011e3a9aSJeff DikeCHECKSTACK_ARCH := $(SUBARCH)
1757 011e3a9aSJeff Dikeelse
1758 011e3a9aSJeff DikeCHECKSTACK_ARCH := $(ARCH)
1759 011e3a9aSJeff Dikeendif
1760 1da177e4SLinus Torvaldscheckstack:
1761 1da177e4SLinus Torvalds	$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
1762 75dd4747SMasahiro Yamada	$(PERL) $(srctree)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
1763 1da177e4SLinus Torvalds
1764 7b8ea53dSAmerigo Wangkernelrelease:
1765 7b8ea53dSAmerigo Wang	@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1766 01ab1788SAmerigo Wang
1767 cb58455cSSam Ravnborgkernelversion:
1768 2244cbd8SSam Ravnborg	@echo $(KERNELVERSION)
1769 1da177e4SLinus Torvalds
1770 c398ff00SMike Marciniszynimage_name:
1771 c398ff00SMike Marciniszyn	@echo $(KBUILD_IMAGE)
1772 c398ff00SMike Marciniszyn
1773 ea01fa9fSBorislav Petkov# Clear a bunch of variables before executing the submake
1774 f47a23ceSMasahiro Yamada
1775 f47a23ceSMasahiro Yamadaifeq ($(quiet),silent_)
1776 f47a23ceSMasahiro Yamadatools_silent=s
1777 f47a23ceSMasahiro Yamadaendif
1778 f47a23ceSMasahiro Yamada
1779 ea01fa9fSBorislav Petkovtools/: FORCE
1780 bf35182fSDavid Howells	$(Q)mkdir -p $(objtree)/tools
1781 75dd4747SMasahiro Yamada	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/
1782 ea01fa9fSBorislav Petkov
1783 ea01fa9fSBorislav Petkovtools/%: FORCE
1784 bf35182fSDavid Howells	$(Q)mkdir -p $(objtree)/tools
1785 75dd4747SMasahiro Yamada	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $*
1786 ea01fa9fSBorislav Petkov
1787 1da177e4SLinus Torvalds# FIXME Should go into a make.lib or something
1788 1da177e4SLinus Torvalds# ===========================================================================
1789 1da177e4SLinus Torvalds
1790 1da177e4SLinus Torvaldsquiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN   $(wildcard $(rm-dirs)))
1791 1da177e4SLinus Torvalds      cmd_rmdirs = rm -rf $(rm-dirs)
1792 1da177e4SLinus Torvalds
1793 1da177e4SLinus Torvaldsquiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
1794 1da177e4SLinus Torvalds      cmd_rmfiles = rm -f $(rm-files)
1795 1da177e4SLinus Torvalds
1796 bc3c26feSUwe Kleine-König# Run depmod only if we have System.map and depmod is executable
1797 50a8ec31SSam Ravnborgquiet_cmd_depmod = DEPMOD  $(KERNELRELEASE)
1798 569658ddSMichal Marek      cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \
1799 5a144a1aSMasahiro Yamada                   $(KERNELRELEASE)
1800 50a8ec31SSam Ravnborg
1801 392885eeSMasahiro Yamada# read saved command lines for existing targets
1802 392885eeSMasahiro Yamadaexisting-targets := $(wildcard $(sort $(targets)))
1803 1da177e4SLinus Torvalds
1804 b999923cSMasahiro Yamada-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
1805 1da177e4SLinus Torvalds
1806 2042b548SMasahiro Yamadaendif # config-targets
1807 2042b548SMasahiro Yamadaendif # mixed-build
1808 688931a5SMasahiro Yamadaendif # need-sub-make
1809 1da177e4SLinus Torvalds
1810 4f193362SPaul SmithPHONY += FORCE
1811 1da177e4SLinus TorvaldsFORCE:
1812 4f193362SPaul Smith
1813 bd412d81SUlf Magnusson# Declare the contents of the PHONY variable as phony.  We keep that
1814 fe8d0a41SKirill Smelkov# information in a variable so we can use it in if_changed and friends.
1815 4f193362SPaul Smith.PHONY: $(PHONY)
1816