Makefile 60.3 KB
Newer Older
1
# SPDX-License-Identifier: GPL-2.0
2
VERSION = 5
3
PATCHLEVEL = 7
4
SUBLEVEL = 10
5
EXTRAVERSION =
6
NAME = Kleptomaniac Octopus
7
8
9
10
11
12
13

# *DOCUMENTATION*
# To see a list of typical targets execute "make help"
# More info can be located in ./README
# Comments in this file are targeted only to the developer, do not
# expect to learn how to build the kernel reading this file.

14
15
16
17
# That's our default target when none is given on the command line
PHONY := _all
_all:

18
19
20
21
22
23
# We are using a recursive build, so we need to do a little thinking
# to get the ordering right.
#
# Most importantly: sub-Makefiles should only ever modify files in
# their own directory. If in some directory we have a dependency on
# a file in another dir (which doesn't happen often, but it's often
24
# unavoidable when linking the built-in.a targets which finally
25
26
27
28
29
30
31
32
33
# turn into vmlinux), we will call a sub make in that other dir, and
# after that we are sure that everything which is in that other dir
# is now up to date.
#
# The only cases where we need to modify files which have global
# effects are thus separated out and done before the recursive
# descending is started. They are now explicitly listed as the
# prepare rule.

34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
ifneq ($(sub_make_done),1)

# Do not use make's built-in rules and variables
# (this increases performance and avoids hard-to-debug behaviour)
MAKEFLAGS += -rR

# Avoid funny character set dependencies
unexport LC_ALL
LC_COLLATE=C
LC_NUMERIC=C
export LC_COLLATE LC_NUMERIC

# Avoid interference with shell env settings
unexport GREP_OPTIONS

49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Beautify output
# ---------------------------------------------------------------------------
#
# Normally, we echo the whole command before executing it. By making
# that echo $($(quiet)$(cmd)), we now have the possibility to set
# $(quiet) to choose other forms of output instead, e.g.
#
#         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
#
# If $(quiet) is empty, the whole command will be printed.
# If it is set to "quiet_", only the short version will be printed.
# If it is set to "silent_", nothing will be printed at all, since
# the variable $(silent_cmd_cc_o_c) doesn't exist.
#
# A simple variant is to prefix commands with $(Q) - that's useful
# for commands that shall be hidden in non-verbose mode.
#
#	$(Q)ln $@ :<
#
# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
# If KBUILD_VERBOSE equals 1 then the above command is displayed.
71
# If KBUILD_VERBOSE equals 2 then give the reason why each target is rebuilt.
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#
# To put more focus on warnings, be less verbose as default
# Use 'make V=1' to see the full commands

ifeq ("$(origin V)", "command line")
  KBUILD_VERBOSE = $(V)
endif
ifndef KBUILD_VERBOSE
  KBUILD_VERBOSE = 0
endif

ifeq ($(KBUILD_VERBOSE),1)
  quiet =
  Q =
else
  quiet=quiet_
  Q = @
endif

# If the user is running make -s (silent mode), suppress echoing of
# commands

94
ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
95
96
97
98
99
  quiet=silent_
endif

export quiet Q KBUILD_VERBOSE

100
101
102
103
104
105
106
107
108
109
# Kbuild will save output files in the current working directory.
# This does not need to match to the root of the kernel source tree.
#
# For example, you can do this:
#
#  cd /dir/to/store/output/files; make -f /dir/to/kernel/source/Makefile
#
# If you want to save output files in a different location, there are
# two syntaxes to specify it.
#
110
111
112
113
# 1) O=
# Use "make O=dir/to/store/output/files/"
#
# 2) Set KBUILD_OUTPUT
114
115
# Set the environment variable KBUILD_OUTPUT to point to the output directory.
# export KBUILD_OUTPUT=dir/to/store/output/files/; make
116
117
118
119
#
# The O= assignment takes precedence over the KBUILD_OUTPUT environment
# variable.

120
# Do we want to change the working directory?
121
122
123
124
ifeq ("$(origin O)", "command line")
  KBUILD_OUTPUT := $(O)
endif

125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
ifneq ($(KBUILD_OUTPUT),)
# Make's built-in functions such as $(abspath ...), $(realpath ...) cannot
# expand a shell special character '~'. We use a somewhat tedious way here.
abs_objtree := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd)
$(if $(abs_objtree),, \
     $(error failed to create output directory "$(KBUILD_OUTPUT)"))

# $(realpath ...) resolves symlinks
abs_objtree := $(realpath $(abs_objtree))
else
abs_objtree := $(CURDIR)
endif # ifneq ($(KBUILD_OUTPUT),)

ifeq ($(abs_objtree),$(CURDIR))
# Suppress "Entering directory ..." unless we are changing the work directory.
MAKEFLAGS += --no-print-directory
else
need-sub-make := 1
143
144
endif

145
abs_srctree := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
146

147
148
149
150
151
ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
$(error source directory cannot contain spaces or colons)
endif

ifneq ($(abs_srctree),$(abs_objtree))
152
153
154
# Look for make include files relative to root of kernel src
#
# This does not become effective immediately because MAKEFLAGS is re-parsed
155
156
# once after the Makefile is read. We need to invoke sub-make.
MAKEFLAGS += --include-dir=$(abs_srctree)
157
need-sub-make := 1
158
endif
159
160
161
162
163
164
165
166
167

ifneq ($(filter 3.%,$(MAKE_VERSION)),)
# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x
# We need to invoke sub-make to avoid implicit rules in the top Makefile.
need-sub-make := 1
# Cancel implicit rules for this Makefile.
$(lastword $(MAKEFILE_LIST)): ;
endif

168
export abs_srctree abs_objtree
169
170
171
172
export sub_make_done := 1

ifeq ($(need-sub-make),1)

173
174
PHONY += $(MAKECMDGOALS) sub-make

175
$(filter-out _all sub-make $(lastword $(MAKEFILE_LIST)), $(MAKECMDGOALS)) _all: sub-make
176
177
	@:

178
# Invoke a second make in the output directory, passing relevant variables
179
sub-make:
180
	$(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
181

182
183
endif # need-sub-make
endif # sub_make_done
184
185

# We process the rest of the Makefile if this is the final invocation of make
186
ifeq ($(need-sub-make),)
187
188
189
190
191
192
193
194
195
196
197
198
199

# Do not print "Entering directory ...",
# but we want to display it when entering to the output directory
# so that IDEs/editors are able to understand relative filenames.
MAKEFLAGS += --no-print-directory

# Call a source code checker (by default, "sparse") as part of the
# C compilation.
#
# Use 'make C=1' to enable checking of only re-compiled files.
# Use 'make C=2' to enable checking of *all* source files, regardless
# of whether they are re-compiled or not.
#
200
201
# See the file "Documentation/dev-tools/sparse.rst" for more details,
# including where to get the "sparse" utility.
202
203
204
205
206
207
208
209

ifeq ("$(origin C)", "command line")
  KBUILD_CHECKSRC = $(C)
endif
ifndef KBUILD_CHECKSRC
  KBUILD_CHECKSRC = 0
endif

210
211
# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the
# directory of external module to build. Setting M= takes precedence.
212
213
214
215
ifeq ("$(origin M)", "command line")
  KBUILD_EXTMOD := $(M)
endif

216
217
export KBUILD_CHECKSRC KBUILD_EXTMOD

218
219
extmod-prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)

220
ifeq ($(abs_srctree),$(abs_objtree))
221
222
        # building in the source tree
        srctree := .
223
	building_out_of_srctree :=
224
else
225
        ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
226
227
228
                # building in a subdirectory of the source tree
                srctree := ..
        else
229
                srctree := $(abs_srctree)
230
        endif
231
	building_out_of_srctree := 1
232
endif
233

234
235
236
ifneq ($(KBUILD_ABS_SRCTREE),)
srctree := $(abs_srctree)
endif
237

238
objtree		:= .
239
VPATH		:= $(srctree)
240

241
export building_out_of_srctree srctree objtree VPATH
242

243
244
245
246
247
248
249
250
251
252
253
# To make sure we do not include .config for any of the *config targets
# catch them early, and hand them over to scripts/kconfig/Makefile
# It is allowed to specify more targets when calling make, including
# mixing *config targets and build targets.
# For example 'make oldconfig all'.
# Detect when mixed targets is specified, and make a second invocation
# of make so .config is not included in this case either (for *config).

version_h := include/generated/uapi/linux/version.h
old_version_h := include/linux/version.h

254
255
clean-targets := %clean mrproper cleandocs
no-dot-config-targets := $(clean-targets) \
256
			 cscope gtags TAGS tags help% %docs check% coccicheck \
257
			 $(version_h) headers headers_% archheaders archscripts \
258
259
			 %asm-generic kernelversion %src-pkg dt_binding_check \
			 outputmakefile
260
261
no-sync-config-targets := $(no-dot-config-targets) install %install \
			   kernelrelease
262
single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
263

264
265
266
267
268
config-build	:=
mixed-build	:=
need-config	:= 1
may-sync-config	:= 1
single-build	:=
269
270
271

ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
272
		need-config :=
273
274
275
	endif
endif

276
277
ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
278
		may-sync-config :=
279
280
281
282
	endif
endif

ifneq ($(KBUILD_EXTMOD),)
283
	may-sync-config :=
284
285
endif

286
287
ifeq ($(KBUILD_EXTMOD),)
        ifneq ($(filter config %config,$(MAKECMDGOALS)),)
288
		config-build := 1
289
                ifneq ($(words $(MAKECMDGOALS)),1)
290
			mixed-build := 1
291
292
293
                endif
        endif
endif
294

295
296
297
298
299
300
301
302
# We cannot build single targets and the others at the same time
ifneq ($(filter $(single-targets), $(MAKECMDGOALS)),)
	single-build := 1
	ifneq ($(filter-out $(single-targets), $(MAKECMDGOALS)),)
		mixed-build := 1
	endif
endif

303
304
305
# For "make -j clean all", "make -j mrproper defconfig all", etc.
ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),)
        ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),)
306
		mixed-build := 1
307
308
309
        endif
endif

310
311
312
# install and modules_install need also be processed one by one
ifneq ($(filter install,$(MAKECMDGOALS)),)
        ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
313
		mixed-build := 1
314
315
316
        endif
endif

317
ifdef mixed-build
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
# ===========================================================================
# We're called with mixed targets (*config and build targets).
# Handle them one by one.

PHONY += $(MAKECMDGOALS) __build_one_by_one

$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
	@:

__build_one_by_one:
	$(Q)set -e; \
	for i in $(MAKECMDGOALS); do \
		$(MAKE) -f $(srctree)/Makefile $$i; \
	done

333
else # !mixed-build
334
335
336
337
338
339
340
341

include scripts/Kbuild.include

# Read KERNELRELEASE from include/config/kernel.release (if it exists)
KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION

342
include scripts/subarch.include
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363

# Cross compiling and selecting different set of gcc/bin-utils
# ---------------------------------------------------------------------------
#
# When performing cross compilation for other architectures ARCH shall be set
# to the target architecture. (See arch/* for the possibilities).
# ARCH can be set during invocation of make:
# make ARCH=ia64
# Another way is to have ARCH set in the environment.
# The default ARCH is the host where make is executed.

# CROSS_COMPILE specify the prefix used for all executables used
# during compilation. Only gcc and related bin-utils executables
# are prefixed with $(CROSS_COMPILE).
# CROSS_COMPILE can be set on the command line
# make CROSS_COMPILE=ia64-linux-
# Alternatively CROSS_COMPILE can be set in the environment.
# Default value for CROSS_COMPILE is not to prefix executables
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
ARCH		?= $(SUBARCH)

364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
# Architecture as present in compile.h
UTS_MACHINE 	:= $(ARCH)
SRCARCH 	:= $(ARCH)

# Additional ARCH settings for x86
ifeq ($(ARCH),i386)
        SRCARCH := x86
endif
ifeq ($(ARCH),x86_64)
        SRCARCH := x86
endif

# Additional ARCH settings for sparc
ifeq ($(ARCH),sparc32)
       SRCARCH := sparc
endif
ifeq ($(ARCH),sparc64)
       SRCARCH := sparc
endif

# Additional ARCH settings for sh
ifeq ($(ARCH),sh64)
       SRCARCH := sh
endif

389
390
391
KCONFIG_CONFIG	?= .config
export KCONFIG_CONFIG

392
393
394
# Default file for 'make defconfig'. This may be overridden by arch-Makefile.
export KBUILD_DEFCONFIG := defconfig

395
# SHELL used by kbuild
396
CONFIG_SHELL := sh
397

398
399
400
HOST_LFS_CFLAGS := $(shell getconf LFS_CFLAGS 2>/dev/null)
HOST_LFS_LDFLAGS := $(shell getconf LFS_LDFLAGS 2>/dev/null)
HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
401

402
403
404
405
406
407
408
ifneq ($(LLVM),)
HOSTCC	= clang
HOSTCXX	= clang++
else
HOSTCC	= gcc
HOSTCXX	= g++
endif
409
410
411
KBUILD_HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \
		-fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \
		$(HOSTCFLAGS)
412
KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
413
414
KBUILD_HOSTLDFLAGS  := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
KBUILD_HOSTLDLIBS   := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
415
416
417

# Make variables (CC, etc...)
CPP		= $(CC) -E
418
419
420
421
422
423
424
425
426
427
428
429
430
ifneq ($(LLVM),)
CC		= clang
LD		= ld.lld
AR		= llvm-ar
NM		= llvm-nm
OBJCOPY		= llvm-objcopy
OBJDUMP		= llvm-objdump
READELF		= llvm-readelf
OBJSIZE		= llvm-size
STRIP		= llvm-strip
else
CC		= $(CROSS_COMPILE)gcc
LD		= $(CROSS_COMPILE)ld
431
432
433
434
AR		= $(CROSS_COMPILE)ar
NM		= $(CROSS_COMPILE)nm
OBJCOPY		= $(CROSS_COMPILE)objcopy
OBJDUMP		= $(CROSS_COMPILE)objdump
435
READELF		= $(CROSS_COMPILE)readelf
436
437
438
OBJSIZE		= $(CROSS_COMPILE)size
STRIP		= $(CROSS_COMPILE)strip
endif
439
PAHOLE		= pahole
440
441
LEX		= flex
YACC		= bison
442
443
444
445
446
AWK		= awk
INSTALLKERNEL  := installkernel
DEPMOD		= /sbin/depmod
PERL		= perl
PYTHON		= python
447
PYTHON3		= python3
448
CHECK		= sparse
449
BASH		= bash
450
451

CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
452
		  -Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
453
NOSTDINC_FLAGS :=
454
455
456
457
458
459
460
461
462
CFLAGS_MODULE   =
AFLAGS_MODULE   =
LDFLAGS_MODULE  =
CFLAGS_KERNEL	=
AFLAGS_KERNEL	=
LDFLAGS_vmlinux =

# Use USERINCLUDE when you must reference the UAPI directories only.
USERINCLUDE    := \
463
464
		-I$(srctree)/arch/$(SRCARCH)/include/uapi \
		-I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \
465
		-I$(srctree)/include/uapi \
466
		-I$(objtree)/include/generated/uapi \
467
468
469
470
471
                -include $(srctree)/include/linux/kconfig.h

# Use LINUXINCLUDE when you must reference the include/ directory.
# Needed to be compatible with the O= option
LINUXINCLUDE    := \
472
473
		-I$(srctree)/arch/$(SRCARCH)/include \
		-I$(objtree)/arch/$(SRCARCH)/include/generated \
474
		$(if $(building_out_of_srctree),-I$(srctree)/include) \
475
476
		-I$(objtree)/include \
		$(USERINCLUDE)
477

478
479
480
481
KBUILD_AFLAGS   := -D__ASSEMBLY__ -fno-PIE
KBUILD_CFLAGS   := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
		   -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
		   -Werror=implicit-function-declaration -Werror=implicit-int \
482
		   -Wno-format-security \
483
484
		   -std=gnu89
KBUILD_CPPFLAGS := -D__KERNEL__
485
486
487
488
KBUILD_AFLAGS_KERNEL :=
KBUILD_CFLAGS_KERNEL :=
KBUILD_AFLAGS_MODULE  := -DMODULE
KBUILD_CFLAGS_MODULE  := -DMODULE
489
490
KBUILD_LDFLAGS_MODULE :=
export KBUILD_LDS_MODULE := $(srctree)/scripts/module-common.lds
491
KBUILD_LDFLAGS :=
492
GCC_PLUGINS_CFLAGS :=
493
CLANG_FLAGS :=
494

495
export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC
496
export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE LEX YACC AWK INSTALLKERNEL
497
export PERL PYTHON PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
498
export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
499

500
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
501
502
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL

# Files to ignore in find ... statements

export RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o    \
			  -name CVS -o -name .pc -o -name .hg -o -name .git \) \
			  -prune -o
export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
			 --exclude CVS --exclude .pc --exclude .hg --exclude .git

# ===========================================================================
# Rules shared between *config targets and build targets

518
# Basic helpers built in scripts/basic/
519
520
521
522
523
524
PHONY += scripts_basic
scripts_basic:
	$(Q)$(MAKE) $(build)=scripts/basic
	$(Q)rm -f .tmp_quiet_recordmcount

PHONY += outputmakefile
525
# Before starting out-of-tree build, make sure the source tree is clean.
526
527
528
# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
# output directory.
529
530
# At the same time when output Makefile generated, generate .gitignore to
# ignore whole output directory
531
outputmakefile:
532
ifdef building_out_of_srctree
533
534
535
536
537
538
539
540
541
	$(Q)if [ -f $(srctree)/.config -o \
		 -d $(srctree)/include/config -o \
		 -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
		echo >&2 "***"; \
		echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
		echo >&2 "*** in $(abs_srctree)";\
		echo >&2 "***"; \
		false; \
	fi
542
	$(Q)ln -fsn $(srctree) source
543
544
545
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
	$(Q)test -e .gitignore || \
	{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
546
547
endif

548
ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
549
ifneq ($(CROSS_COMPILE),)
550
CLANG_FLAGS	+= --target=$(notdir $(CROSS_COMPILE:%-=%))
551
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
552
CLANG_FLAGS	+= --prefix=$(GCC_TOOLCHAIN_DIR)
553
GCC_TOOLCHAIN	:= $(realpath $(GCC_TOOLCHAIN_DIR)/..)
554
endif
555
ifneq ($(GCC_TOOLCHAIN),)
556
CLANG_FLAGS	+= --gcc-toolchain=$(GCC_TOOLCHAIN)
557
endif
558
ifneq ($(LLVM_IAS),1)
559
CLANG_FLAGS	+= -no-integrated-as
560
endif
561
CLANG_FLAGS	+= -Werror=unknown-warning-option
562
563
564
KBUILD_CFLAGS	+= $(CLANG_FLAGS)
KBUILD_AFLAGS	+= $(CLANG_FLAGS)
export CLANG_FLAGS
565
566
endif

567
568
569
570
# The expansion should be delayed until arch/$(SRCARCH)/Makefile is included.
# Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.
# CC_VERSION_TEXT is referenced from Kconfig (so it needs export),
# and from include/config/auto.conf.cmd to detect the compiler upgrade.
571
CC_VERSION_TEXT = $(shell $(CC) --version 2>/dev/null | head -n 1)
572

573
ifdef config-build
574
575
576
577
578
579
580
581
# ===========================================================================
# *config targets only - make sure prerequisites are updated, and descend
# in scripts/kconfig to make the *config target

# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
# KBUILD_DEFCONFIG may point out an alternative default configuration
# used for 'make defconfig'
include arch/$(SRCARCH)/Makefile
582
export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
583

584
config: outputmakefile scripts_basic FORCE
585
586
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

587
%config: outputmakefile scripts_basic FORCE
588
589
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

590
else #!config-build
591
592
593
594
# ===========================================================================
# Build targets only - this includes vmlinux, arch specific targets, clean
# targets and others. In general all targets except *config targets.

595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
# If building an external module we do not care about the all: rule
# but instead _all depend on modules
PHONY += all
ifeq ($(KBUILD_EXTMOD),)
_all: all
else
_all: modules
endif

# Decide whether to build built-in, modular, or both.
# Normally, just do built-in.

KBUILD_MODULES :=
KBUILD_BUILTIN := 1

# If we have only "make modules", don't compile built-in objects.
ifeq ($(MAKECMDGOALS),modules)
612
  KBUILD_BUILTIN :=
613
614
615
616
617
618
endif

# If we have "make <whatever> modules", compile modules
# in addition to whatever we do anyway.
# Just "make" or "make all" shall build modules as well

619
ifneq ($(filter all _all modules nsdeps,$(MAKECMDGOALS)),)
620
621
622
623
624
625
626
627
628
  KBUILD_MODULES := 1
endif

ifeq ($(MAKECMDGOALS),)
  KBUILD_MODULES := 1
endif

export KBUILD_MODULES KBUILD_BUILTIN

629
ifdef need-config
630
631
632
include include/config/auto.conf
endif

633
634
635
ifeq ($(KBUILD_EXTMOD),)
# Objects we will link into vmlinux / subdirs we need to visit
init-y		:= init/
636
drivers-y	:= drivers/ sound/
637
drivers-$(CONFIG_SAMPLES) += samples/
638
639
640
641
642
643
net-y		:= net/
libs-y		:= lib/
core-y		:= usr/
virt-y		:= virt/
endif # KBUILD_EXTMOD

644
645
646
647
648
# The all: target is the default when no target is given on the
# command line.
# This allow a user to issue only 'make' to build a kernel including modules
# Defaults to vmlinux, but the arch makefile usually adds further targets
all: vmlinux
649

650
651
652
653
654
CFLAGS_GCOV	:= -fprofile-arcs -ftest-coverage \
	$(call cc-option,-fno-tree-loop-im) \
	$(call cc-disable-warning,maybe-uninitialized,)
export CFLAGS_GCOV

655
656
657
658
659
# The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later.
ifdef CONFIG_FUNCTION_TRACER
  CC_FLAGS_FTRACE := -pg
endif

660
661
662
663
664
665
666
667
668
RETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register
RETPOLINE_VDSO_CFLAGS_GCC := -mindirect-branch=thunk-inline -mindirect-branch-register
RETPOLINE_CFLAGS_CLANG := -mretpoline-external-thunk
RETPOLINE_VDSO_CFLAGS_CLANG := -mretpoline
RETPOLINE_CFLAGS := $(call cc-option,$(RETPOLINE_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_CFLAGS_CLANG)))
RETPOLINE_VDSO_CFLAGS := $(call cc-option,$(RETPOLINE_VDSO_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_VDSO_CFLAGS_CLANG)))
export RETPOLINE_CFLAGS
export RETPOLINE_VDSO_CFLAGS

669
670
include arch/$(SRCARCH)/Makefile

671
672
ifdef need-config
ifdef may-sync-config
673
674
675
# Read in dependencies to all Kconfig* files, make sure to run syncconfig if
# changes are detected. This should be included after arch/$(SRCARCH)/Makefile
# because some architectures define CROSS_COMPILE there.
676
include include/config/auto.conf.cmd
677

678
679
680
681
682
683
684
685
$(KCONFIG_CONFIG):
	@echo >&2 '***'
	@echo >&2 '*** Configuration file "$@" not found!'
	@echo >&2 '***'
	@echo >&2 '*** Please run some configurator (e.g. "make oldconfig" or'
	@echo >&2 '*** "make menuconfig" or "make xconfig").'
	@echo >&2 '***'
	@/bin/false
686

687
688
689
# The actual configuration files used during the build are stored in
# include/generated/ and include/config/. Update them if .config is newer than
# include/config/auto.conf (which mirrors .config).
690
691
692
#
# This exploits the 'multi-target pattern rule' trick.
# The syncconfig should be executed only once to make all the targets.
693
694
# (Note: use the grouped target '&:' when we bump to GNU Make 4.3)
%/auto.conf %/auto.conf.cmd: $(KCONFIG_CONFIG)
695
	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
696
else # !may-sync-config
697
698
699
# External modules and some install targets need include/generated/autoconf.h
# and include/config/auto.conf but do not care if they are up-to-date.
# Use auto.conf to trigger the test
700
701
702
703
704
705
706
707
708
709
710
PHONY += include/config/auto.conf

include/config/auto.conf:
	$(Q)test -e include/generated/autoconf.h -a -e $@ || (		\
	echo >&2;							\
	echo >&2 "  ERROR: Kernel configuration is invalid.";		\
	echo >&2 "         include/generated/autoconf.h or $@ are missing.";\
	echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix it.";	\
	echo >&2 ;							\
	/bin/false)

711
endif # may-sync-config
712
endif # need-config
713
714

KBUILD_CFLAGS	+= $(call cc-option,-fno-delete-null-pointer-checks,)
715
KBUILD_CFLAGS	+= $(call cc-disable-warning,frame-address,)
716
717
KBUILD_CFLAGS	+= $(call cc-disable-warning, format-truncation)
KBUILD_CFLAGS	+= $(call cc-disable-warning, format-overflow)
718
KBUILD_CFLAGS	+= $(call cc-disable-warning, address-of-packed-member)
719

720
721
722
723
724
725
ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
KBUILD_CFLAGS += -O2
else ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3
KBUILD_CFLAGS += -O3
else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS += -Os
726
727
728
729
endif

# Tell gcc to never replace conditional load with a non-conditional one
KBUILD_CFLAGS	+= $(call cc-option,--param=allow-store-data-races=0)
730
KBUILD_CFLAGS	+= $(call cc-option,-fno-allow-store-data-races)
731

732
include scripts/Makefile.kcov
733
734
include scripts/Makefile.gcc-plugins

735
736
737
738
739
740
741
742
743
744
745
ifdef CONFIG_READABLE_ASM
# Disable optimizations that make assembler listings hard to read.
# reorder blocks reorders the control in the function
# ipa clone creates specialized cloned functions
# partial inlining inlines only parts of functions
KBUILD_CFLAGS += $(call cc-option,-fno-reorder-blocks,) \
                 $(call cc-option,-fno-ipa-cp-clone,) \
                 $(call cc-option,-fno-partial-inlining)
endif

ifneq ($(CONFIG_FRAME_WARN),0)
746
KBUILD_CFLAGS += -Wframe-larger-than=$(CONFIG_FRAME_WARN)
747
748
endif

749
750
751
752
753
stackp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector
stackp-flags-$(CONFIG_STACKPROTECTOR)             := -fstack-protector
stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG)      := -fstack-protector-strong

KBUILD_CFLAGS += $(stackp-flags-y)
754

755
ifdef CONFIG_CC_IS_CLANG
756
757
758
KBUILD_CPPFLAGS += -Qunused-arguments
KBUILD_CFLAGS += -Wno-format-invalid-specifier
KBUILD_CFLAGS += -Wno-gnu
759
760
761
# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
# source of a reference will be _MergedGlobals and not on of the whitelisted names.
# See modpost pattern 2
762
KBUILD_CFLAGS += -mno-global-merge
763
764
765
else

# These warnings generated too much noise in a regular build.
766
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
767
KBUILD_CFLAGS += -Wno-unused-but-set-variable
768
769
770
771
772

# Warn about unmarked fall-throughs in switch statement.
# Disabled for clang while comment to attribute conversion happens and
# https://github.com/ClangBuiltLinux/linux/issues/636 is discussed.
KBUILD_CFLAGS += $(call cc-option,-Wimplicit-fallthrough,)
773
774
endif

775
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
776
777
778
779
780
781
782
783
784
785
786
787
788
ifdef CONFIG_FRAME_POINTER
KBUILD_CFLAGS	+= -fno-omit-frame-pointer -fno-optimize-sibling-calls
else
# Some targets (ARM with Thumb2, for example), can't be built with frame
# pointers.  For those, we don't have FUNCTION_TRACER automatically
# select FRAME_POINTER.  However, FUNCTION_TRACER adds -pg, and this is
# incompatible with -fomit-frame-pointer with current GCC, so we don't use
# -fomit-frame-pointer with FUNCTION_TRACER.
ifndef CONFIG_FUNCTION_TRACER
KBUILD_CFLAGS	+= -fomit-frame-pointer
endif
endif

789
790
791
792
793
# Initialize all stack variables with a pattern, if desired.
ifdef CONFIG_INIT_STACK_ALL
KBUILD_CFLAGS	+= -ftrivial-auto-var-init=pattern
endif

794
DEBUG_CFLAGS	:= $(call cc-option, -fno-var-tracking-assignments)
795
796
797

ifdef CONFIG_DEBUG_INFO
ifdef CONFIG_DEBUG_INFO_SPLIT
798
DEBUG_CFLAGS	+= -gsplit-dwarf
799
else
800
DEBUG_CFLAGS	+= -g
801
802
803
804
endif
KBUILD_AFLAGS	+= -Wa,-gdwarf-2
endif
ifdef CONFIG_DEBUG_INFO_DWARF4
805
DEBUG_CFLAGS	+= -gdwarf-4
806
807
808
endif

ifdef CONFIG_DEBUG_INFO_REDUCED
809
DEBUG_CFLAGS	+= $(call cc-option, -femit-struct-debug-baseonly) \
810
811
812
		   $(call cc-option,-fno-var-tracking)
endif

813
814
815
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
export DEBUG_CFLAGS

816
ifdef CONFIG_FUNCTION_TRACER
817
818
819
820
821
822
823
824
825
826
827
828
ifdef CONFIG_FTRACE_MCOUNT_RECORD
  # gcc 5 supports generating the mcount tables directly
  ifeq ($(call cc-option-yn,-mrecord-mcount),y)
    CC_FLAGS_FTRACE	+= -mrecord-mcount
    export CC_USING_RECORD_MCOUNT := 1
  endif
  ifdef CONFIG_HAVE_NOP_MCOUNT
    ifeq ($(call cc-option-yn, -mnop-mcount),y)
      CC_FLAGS_FTRACE	+= -mnop-mcount
      CC_FLAGS_USING	+= -DCC_USING_NOP_MCOUNT
    endif
  endif
829
830
endif
ifdef CONFIG_HAVE_FENTRY
831
832
833
834
  ifeq ($(call cc-option-yn, -mfentry),y)
    CC_FLAGS_FTRACE	+= -mfentry
    CC_FLAGS_USING	+= -DCC_USING_FENTRY
  endif
835
endif
836
837
838
export CC_FLAGS_FTRACE
KBUILD_CFLAGS	+= $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING)
KBUILD_AFLAGS	+= $(CC_FLAGS_USING)
839
840
841
842
843
844
845
846
847
848
849
850
851
ifdef CONFIG_DYNAMIC_FTRACE
	ifdef CONFIG_HAVE_C_RECORDMCOUNT
		BUILD_C_RECORDMCOUNT := y
		export BUILD_C_RECORDMCOUNT
	endif
endif
endif

# We trigger additional mismatches with less inlining
ifdef CONFIG_DEBUG_SECTION_MISMATCH
KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
endif

852
ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
853
854
KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
LDFLAGS_vmlinux += --gc-sections
855
856
endif

857
858
859
860
ifdef CONFIG_LIVEPATCH
KBUILD_CFLAGS += $(call cc-option, -flive-patching=inline-clone)
endif

861
# arch Makefile may override CC so keep this after arch Makefile is included
862
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
863
864

# warn about C99 declaration after statement
865
866
867
KBUILD_CFLAGS += -Wdeclaration-after-statement

# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
868
KBUILD_CFLAGS += -Wvla
869
870

# disable pointer signed / unsigned warnings in gcc 4.0
871
KBUILD_CFLAGS += -Wno-pointer-sign
872

873
874
875
# disable stringop warnings in gcc 8+
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)

876
877
878
879
880
881
882
883
884
885
886
# We'll want to enable this eventually, but it's not going away for 5.7 at least
KBUILD_CFLAGS += $(call cc-disable-warning, zero-length-bounds)
KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds)
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow)

# Another good warning that we'll want to enable eventually
KBUILD_CFLAGS += $(call cc-disable-warning, restrict)

# Enabled with W=2, disabled by default as noisy
KBUILD_CFLAGS += $(call cc-disable-warning, maybe-uninitialized)

887
888
889
# disable invalid "can't wrap" optimizations for signed / pointers
KBUILD_CFLAGS	+= $(call cc-option,-fno-strict-overflow)

890
891
892
893
894
895
896
897
898
# clang sets -fmerge-all-constants by default as optimization, but this
# is non-conforming behavior for C and in fact breaks the kernel, so we
# need to disable it here generally.
KBUILD_CFLAGS	+= $(call cc-option,-fno-merge-all-constants)

# for gcc -fno-merge-all-constants disables everything, but it is fine
# to have actual conforming behavior enabled.
KBUILD_CFLAGS	+= $(call cc-option,-fmerge-constants)

899
900
901
# Make sure -fstack-check isn't enabled (like gentoo apparently did)
KBUILD_CFLAGS  += $(call cc-option,-fno-stack-check,)

902
903
904
905
906
907
908
909
910
# conserve stack if available
KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)

# Prohibit date/time macros, which would make the build non-deterministic
KBUILD_CFLAGS   += $(call cc-option,-Werror=date-time)

# enforce correct pointer usage
KBUILD_CFLAGS   += $(call cc-option,-Werror=incompatible-pointer-types)

911
912
913
# Require designated initializers for all marked structures
KBUILD_CFLAGS   += $(call cc-option,-Werror=designated-init)

914
915
916
# change __FILE__ to the relative path from the srctree
KBUILD_CFLAGS	+= $(call cc-option,-fmacro-prefix-map=$(srctree)/=)

917
918
919
920
921
922
# ensure -fcf-protection is disabled when using retpoline as it is
# incompatible with -mindirect-branch=thunk-extern
ifdef CONFIG_RETPOLINE
KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
endif

923
924
925
926
include scripts/Makefile.kasan
include scripts/Makefile.extrawarn
include scripts/Makefile.ubsan

927
928
929
930
# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
KBUILD_CPPFLAGS += $(KCPPFLAGS)
KBUILD_AFLAGS   += $(KAFLAGS)
KBUILD_CFLAGS   += $(KCFLAGS)
931

932
933
KBUILD_LDFLAGS_MODULE += --build-id
LDFLAGS_vmlinux += --build-id
934
935
936
937
938

ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
LDFLAGS_vmlinux	+= $(call ld-option, -X,)
endif

939
940
941
942
943
944
945
ifeq ($(CONFIG_RELR),y)
LDFLAGS_vmlinux	+= --pack-dyn-relocs=relr
endif

# make the checker run with the right architecture
CHECKFLAGS += --arch=$(ARCH)

946
947
948
949
950
951
# insure the checker run with the right endianness
CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)

# the checker needs the correct machine size
CHECKFLAGS += $(if $(CONFIG_64BIT),-m64,-m32)

952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
# Default kernel image to build when no specific target is given.
# KBUILD_IMAGE may be overruled on the command line or
# set in the environment
# Also any assignments in arch/$(ARCH)/Makefile take precedence over
# this default value
export KBUILD_IMAGE ?= vmlinux

#
# INSTALL_PATH specifies where to place the updated kernel and system map
# images. Default is /boot, but you can set it to other values
export	INSTALL_PATH ?= /boot

#
# INSTALL_DTBS_PATH specifies a prefix for relocations required by build roots.
# Like INSTALL_MOD_PATH, it isn't defined in the Makefile, but can be passed as
# an argument if needed. Otherwise it defaults to the kernel install path
#
export INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE)

#
# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
# relocations required by build roots.  This is not defined in the
# makefile but the argument can be passed to make if needed.
#

MODLIB	= $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
export MODLIB

#
# INSTALL_MOD_STRIP, if defined, will cause modules to be
# stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
# the default option --strip-debug will be used.  Otherwise,
# INSTALL_MOD_STRIP value will be used as the options to the strip command.

ifdef INSTALL_MOD_STRIP
ifeq ($(INSTALL_MOD_STRIP),1)
mod_strip_cmd = $(STRIP) --strip-debug
else
mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
endif # INSTALL_MOD_STRIP=1
else
mod_strip_cmd = true
endif # INSTALL_MOD_STRIP
export mod_strip_cmd

# CONFIG_MODULE_COMPRESS, if defined, will cause module to be compressed
# after they are installed in agreement with CONFIG_MODULE_COMPRESS_GZIP
# or CONFIG_MODULE_COMPRESS_XZ.

mod_compress_cmd = true
ifdef CONFIG_MODULE_COMPRESS
  ifdef CONFIG_MODULE_COMPRESS_GZIP
    mod_compress_cmd = gzip -n -f
  endif # CONFIG_MODULE_COMPRESS_GZIP
  ifdef CONFIG_MODULE_COMPRESS_XZ
    mod_compress_cmd = xz -f
  endif # CONFIG_MODULE_COMPRESS_XZ
endif # CONFIG_MODULE_COMPRESS
export mod_compress_cmd

ifdef CONFIG_MODULE_SIG_ALL
$(eval $(call config_filename,MODULE_SIG_KEY))

mod_sign_cmd = scripts/sign-file $(CONFIG_MODULE_SIG_HASH) $(MODULE_SIG_KEY_SRCPREFIX)$(CONFIG_MODULE_SIG_KEY) certs/signing_key.x509
else
mod_sign_cmd = true
endif
export mod_sign_cmd

1021
1022
HOST_LIBELF_LIBS = $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf)

1023
1024
ifdef CONFIG_STACK_VALIDATION
  has_libelf := $(call try-run,\
1025
		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
1026
1027
1028
1029
1030
1031
1032
1033
  ifeq ($(has_libelf),1)
    objtool_target := tools/objtool FORCE
  else
    SKIP_STACK_VALIDATION := 1
    export SKIP_STACK_VALIDATION
  endif
endif

1034
PHONY += prepare0
1035

1036
export MODORDER := $(extmod-prefix)modules.order
1037
export MODULES_NSDEPS := $(extmod-prefix)modules.nsdeps
1038

1039
1040
1041
1042
1043
1044
1045
ifeq ($(KBUILD_EXTMOD),)
core-y		+= kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/

vmlinux-dirs	:= $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
		     $(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y)))

1046
1047
1048
vmlinux-alldirs	:= $(sort $(vmlinux-dirs) Documentation \
		     $(patsubst %/,%,$(filter %/, $(init-) $(core-) \
			$(drivers-) $(net-) $(libs-) $(virt-))))
1049

1050
1051
1052
build-dirs	:= $(vmlinux-dirs)
clean-dirs	:= $(vmlinux-alldirs)

1053
1054
1055
1056
init-y		:= $(patsubst %/, %/built-in.a, $(init-y))
core-y		:= $(patsubst %/, %/built-in.a, $(core-y))
drivers-y	:= $(patsubst %/, %/built-in.a, $(drivers-y))
net-y		:= $(patsubst %/, %/built-in.a, $(net-y))
1057
1058
1059
1060
1061
libs-y2		:= $(patsubst %/, %/built-in.a, $(filter %/, $(libs-y)))
ifdef CONFIG_MODULES
libs-y1		:= $(filter-out %/, $(libs-y))
libs-y2		+= $(patsubst %/, %/lib.a, $(filter %/, $(libs-y)))
else
1062
libs-y1		:= $(patsubst %/, %/lib.a, $(libs-y))
1063
endif
1064
virt-y		:= $(patsubst %/, %/built-in.a, $(virt-y))
1065
1066

# Externally visible symbols (used by link-vmlinux.sh)
1067
1068
export KBUILD_VMLINUX_OBJS := $(head-y) $(init-y) $(core-y) $(libs-y2) \
			      $(drivers-y) $(net-y) $(virt-y)
1069
export KBUILD_VMLINUX_LIBS := $(libs-y1)
1070
1071
export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
export LDFLAGS_vmlinux
1072
# used by scripts/Makefile.package
1073
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
1074

1075
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
1076

1077
1078
# Recurse until adjust_autoksyms.sh is satisfied
PHONY += autoksyms_recursive
1079
ifdef CONFIG_TRIM_UNUSED_KSYMS
1080
autoksyms_recursive: descend modules.order
1081
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
1082
	  "$(MAKE) -f $(srctree)/Makefile vmlinux"
1083
1084
endif

1085
1086
1087
1088
1089
1090
1091
1092
1093
# For the kernel to actually contain only the needed exported symbols,
# we have to build modules as well to determine what those symbols are.
# (this can be evaluated only once include/config/auto.conf has been included)
ifdef CONFIG_TRIM_UNUSED_KSYMS
  KBUILD_MODULES := 1
endif

autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)

1094
1095
1096
1097
quiet_cmd_autoksyms_h = GEN     $@
      cmd_autoksyms_h = mkdir -p $(dir $@); \
			$(CONFIG_SHELL) $(srctree)/scripts/gen_autoksyms.sh $@

1098
$(autoksyms_h):
1099
	$(call cmd,autoksyms_h)
1100

1101
1102
1103
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)

# Final link of vmlinux with optional arch pass after final link
1104
cmd_link-vmlinux =                                                 \
1105
	$(CONFIG_SHELL) $< $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_vmlinux) ;    \
1106
	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
1107

1108
vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
1109
1110
	+$(call if_changed,link-vmlinux)

1111
1112
targets := vmlinux

1113
1114
# The actual objects are generated when descending,
# make sure no implicit rule kicks in
1115
$(sort $(vmlinux-deps)): descend ;
1116

1117
filechk_kernel.release = \
1118
1119
1120
	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"

# Store (new) KERNELRELEASE string in include/config/kernel.release
1121
include/config/kernel.release: FORCE
1122
1123
	$(call filechk,kernel.release)

1124
1125
1126
1127
# Additional helpers built in scripts/
# Carefully list dependencies so we do not try to build scripts twice
# in parallel
PHONY += scripts
1128
scripts: scripts_basic scripts_dtc
1129
	$(Q)$(MAKE) $(build)=$(@)
1130
1131
1132
1133
1134
1135
1136

# Things we need to do before we recursively start building the kernel
# or the modules are listed in "prepare".
# A multi level approach is used. prepareN is processed before prepareN-1.
# archprepare is used in arch Makefiles and when processed asm symlink,
# version.h and scripts_basic is processed / created.

1137
PHONY += prepare archprepare
1138

1139
archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
1140
	asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h
1141

1142
1143
prepare0: archprepare
	$(Q)$(MAKE) $(build)=scripts/mod
1144
1145
1146
1147
1148
	$(Q)$(MAKE) $(build)=.

# All the preparing..
prepare: prepare0 prepare-objtool

1149
# Support for using generic headers in asm-generic
1150
1151
asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj

1152
1153
PHONY += asm-generic uapi-asm-generic
asm-generic: uapi-asm-generic
1154
1155
	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm \
	generic=include/asm-generic
1156
uapi-asm-generic:
1157
1158
	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \
	generic=include/uapi/asm-generic
1159

1160
1161
PHONY += prepare-objtool
prepare-objtool: $(objtool_target)
1162
1163
1164
1165
1166
1167
1168
1169
ifeq ($(SKIP_STACK_VALIDATION),1)
ifdef CONFIG_UNWINDER_ORC
	@echo "error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2
	@false
else
	@echo "warning: Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2
endif
endif
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182

# Generate some files
# ---------------------------------------------------------------------------

# KERNELRELEASE can change from a few different places, meaning version.h
# needs to be updated, so this check is forced on all builds

uts_len := 64
define filechk_utsrelease.h
	if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
	  echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2;    \
	  exit 1;                                                         \
	fi;                                                               \
1183
	echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
1184
1185
1186
endef

define filechk_version.h
1187
	echo \#define LINUX_VERSION_CODE $(shell                         \
1188
	expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \
1189
	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'
1190
1191
endef

1192
$(version_h): FORCE
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
	$(call filechk,version.h)
	$(Q)rm -f $(old_version_h)

include/generated/utsrelease.h: include/config/kernel.release FORCE
	$(call filechk,utsrelease.h)

PHONY += headerdep
headerdep:
	$(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \
	$(srctree)/scripts/headerdep.pl -I$(srctree)/include

# ---------------------------------------------------------------------------
# Kernel headers

#Default location for installed headers
export INSTALL_HDR_PATH = $(objtree)/usr

1210
1211
1212
1213
1214
quiet_cmd_headers_install = INSTALL $(INSTALL_HDR_PATH)/include
      cmd_headers_install = \
	mkdir -p $(INSTALL_HDR_PATH); \
	rsync -mrl --include='*/' --include='*\.h' --exclude='*' \
	usr/include $(INSTALL_HDR_PATH)
1215

1216
1217
1218
PHONY += headers_install
headers_install: headers
	$(call cmd,headers_install)
1219

1220
PHONY += archheaders archscripts
1221

1222
hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
1223

1224
1225
PHONY += headers
headers: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
1226
	$(if $(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/Kbuild),, \
1227
	  $(error Headers not exportable for the $(SRCARCH) architecture))
1228
1229
	$(Q)$(MAKE) $(hdr-inst)=include/uapi
	$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi
1230

1231
# Deprecated. It is no-op now.
1232
PHONY += headers_check
1233
1234
headers_check:
	@:
1235
1236
1237
1238

ifdef CONFIG_HEADERS_INSTALL
prepare: headers
endif
1239

1240
1241
1242
1243
PHONY += scripts_unifdef
scripts_unifdef: scripts_basic
	$(Q)$(MAKE) $(build)=scripts scripts/unifdef

1244
1245
1246
1247
1248
# ---------------------------------------------------------------------------
# Kernel selftest

PHONY += kselftest
kselftest:
1249
	$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
1250

1251
1252
kselftest-%: FORCE
	$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests $*
1253
1254
1255
1256

PHONY += kselftest-merge
kselftest-merge:
	$(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!))
1257
1258
	$(Q)find $(srctree)/tools/testing/selftests -name config | \
		xargs $(srctree)/scripts/kconfig/merge_config.sh -m $(objtree)/.config
1259
	$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
1260

1261
1262
1263
1264
1265
1266
1267
1268
1269
# ---------------------------------------------------------------------------
# Devicetree files

ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),)
dtstree := arch/$(SRCARCH)/boot/dts
endif

ifneq ($(dtstree),)

1270
%.dtb: include/config/kernel.release scripts_dtc
1271
1272
	$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@

1273
PHONY += dtbs dtbs_install dtbs_check
1274
dtbs: include/config/kernel.release scripts_dtc
1275
1276
	$(Q)$(MAKE) $(build)=$(dtstree)

1277
1278
1279
1280
1281
1282
ifneq ($(filter dtbs_check, $(MAKECMDGOALS)),)
export CHECK_DTBS=y
dtbs: dt_binding_check
endif

dtbs_check: dtbs
1283
1284

dtbs_install:
1285
	$(Q)$(MAKE) $(dtbinst)=$(dtstree) dst=$(INSTALL_DTBS_PATH)
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296

ifdef CONFIG_OF_EARLY_FLATTREE
all: dtbs
endif

endif

PHONY += scripts_dtc
scripts_dtc: scripts_basic
	$(Q)$(MAKE) $(build)=scripts/dtc

1297
1298
1299
1300
ifneq ($(filter dt_binding_check, $(MAKECMDGOALS)),)
export CHECK_DT_BINDING=y
endif

1301
PHONY += dt_binding_check
1302
1303
1304
dt_binding_check: scripts_dtc
	$(Q)$(MAKE) $(build)=Documentation/devicetree/bindings

1305
1306
1307
1308
1309
1310
1311
1312
1313
# ---------------------------------------------------------------------------
# Modules

ifdef CONFIG_MODULES

# By default, build modules as well

all: modules

1314
1315
1316
1317
1318
1319
1320
# When we're building modules with modversions, we need to consider
# the built-in objects during the descend as well, in order to
# make sure the checksums are up to date before we record them.
ifdef CONFIG_MODVERSIONS
  KBUILD_BUILTIN := 1
endif

1321
1322
1323
1324
1325
1326
1327
# Build modules
#
# A module can be listed more than once in obj-m resulting in
# duplicate lines in modules.order files.  Those are removed
# using awk while concatenating to the final file.

PHONY += modules
1328
modules: $(if $(KBUILD_BUILTIN),vmlinux) modules.order
1329
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
1330
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh
1331

1332
1333
modules.order: descend
	$(Q)$(AWK) '!x[$$0]++' $(addsuffix /$@, $(build-dirs)) > $@
1334

1335
1336
# Target to prepare building external modules
PHONY += modules_prepare
1337
modules_prepare: prepare
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347

# Target to install modules
PHONY += modules_install
modules_install: _modinst_ _modinst_post

PHONY += _modinst_
_modinst_:
	@