Makefile 61.8 KB
Newer Older
1
# SPDX-License-Identifier: GPL-2.0
2
VERSION = 5
3
PATCHLEVEL = 9
4
SUBLEVEL = 15
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
$(if $(filter __%, $(MAKECMDGOALS)), \
	$(error targets prefixed with '__' are only for internal use))

17
# That's our default target when none is given on the command line
18
19
PHONY := __all
__all:
20

21
22
23
24
25
26
# 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
27
# unavoidable when linking the built-in.a targets which finally
28
29
30
31
32
33
34
35
36
# 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.

37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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

52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 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.
74
# If KBUILD_VERBOSE equals 2 then give the reason why each target is rebuilt.
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#
# 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

97
ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
98
99
100
101
102
  quiet=silent_
endif

export quiet Q KBUILD_VERBOSE

103
104
105
106
107
108
109
110
111
112
# 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.
#
113
114
115
116
# 1) O=
# Use "make O=dir/to/store/output/files/"
#
# 2) Set KBUILD_OUTPUT
117
118
# Set the environment variable KBUILD_OUTPUT to point to the output directory.
# export KBUILD_OUTPUT=dir/to/store/output/files/; make
119
120
121
122
#
# The O= assignment takes precedence over the KBUILD_OUTPUT environment
# variable.

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

128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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
146
147
endif

148
abs_srctree := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
149

150
151
152
153
154
ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
$(error source directory cannot contain spaces or colons)
endif

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

163
164
this-makefile := $(lastword $(MAKEFILE_LIST))

165
166
167
168
169
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.
170
$(this-makefile): ;
171
172
endif

173
export abs_srctree abs_objtree
174
175
176
177
export sub_make_done := 1

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

178
PHONY += $(MAKECMDGOALS) __sub-make
179

180
$(filter-out $(this-makefile), $(MAKECMDGOALS)) __all: __sub-make
181
182
	@:

183
# Invoke a second make in the output directory, passing relevant variables
184
__sub-make:
185
	$(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
186

187
188
endif # need-sub-make
endif # sub_make_done
189
190

# We process the rest of the Makefile if this is the final invocation of make
191
ifeq ($(need-sub-make),)
192
193
194
195
196
197
198
199
200
201
202
203
204

# 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.
#
205
206
# See the file "Documentation/dev-tools/sparse.rst" for more details,
# including where to get the "sparse" utility.
207
208
209
210
211
212
213
214

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

215
216
# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the
# directory of external module to build. Setting M= takes precedence.
217
218
219
220
ifeq ("$(origin M)", "command line")
  KBUILD_EXTMOD := $(M)
endif

221
222
223
$(if $(word 2, $(KBUILD_EXTMOD)), \
	$(error building multiple external modules is not supported))

224
225
export KBUILD_CHECKSRC KBUILD_EXTMOD

226
227
extmod-prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)

228
ifeq ($(abs_srctree),$(abs_objtree))
229
230
        # building in the source tree
        srctree := .
231
	building_out_of_srctree :=
232
else
233
        ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
234
235
236
                # building in a subdirectory of the source tree
                srctree := ..
        else
237
                srctree := $(abs_srctree)
238
        endif
239
	building_out_of_srctree := 1
240
endif
241

242
243
244
ifneq ($(KBUILD_ABS_SRCTREE),)
srctree := $(abs_srctree)
endif
245

246
objtree		:= .
247
VPATH		:= $(srctree)
248

249
export building_out_of_srctree srctree objtree VPATH
250

251
252
253
254
255
256
257
258
259
260
261
# 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

262
263
clean-targets := %clean mrproper cleandocs
no-dot-config-targets := $(clean-targets) \
264
			 cscope gtags TAGS tags help% %docs check% coccicheck \
265
			 $(version_h) headers headers_% archheaders archscripts \
266
267
			 %asm-generic kernelversion %src-pkg dt_binding_check \
			 outputmakefile
268
no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease
269
single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
270

271
272
273
274
275
config-build	:=
mixed-build	:=
need-config	:= 1
may-sync-config	:= 1
single-build	:=
276
277
278

ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
279
		need-config :=
280
281
282
	endif
endif

283
284
ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
285
		may-sync-config :=
286
287
288
289
	endif
endif

ifneq ($(KBUILD_EXTMOD),)
290
	may-sync-config :=
291
292
endif

293
ifeq ($(KBUILD_EXTMOD),)
294
        ifneq ($(filter %config,$(MAKECMDGOALS)),)
295
		config-build := 1
296
                ifneq ($(words $(MAKECMDGOALS)),1)
297
			mixed-build := 1
298
299
300
                endif
        endif
endif
301

302
303
304
305
306
307
308
309
# 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

310
311
312
# For "make -j clean all", "make -j mrproper defconfig all", etc.
ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),)
        ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),)
313
		mixed-build := 1
314
315
316
        endif
endif

317
318
319
# install and modules_install need also be processed one by one
ifneq ($(filter install,$(MAKECMDGOALS)),)
        ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
320
		mixed-build := 1
321
322
323
        endif
endif

324
ifdef mixed-build
325
326
327
328
329
330
# ===========================================================================
# We're called with mixed targets (*config and build targets).
# Handle them one by one.

PHONY += $(MAKECMDGOALS) __build_one_by_one

331
$(MAKECMDGOALS): __build_one_by_one
332
333
334
335
336
337
338
339
	@:

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

340
else # !mixed-build
341
342
343
344
345
346
347
348

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

349
include scripts/subarch.include
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370

# 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)

371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
# 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

396
397
398
KCONFIG_CONFIG	?= .config
export KCONFIG_CONFIG

399
400
401
# Default file for 'make defconfig'. This may be overridden by arch-Makefile.
export KBUILD_DEFCONFIG := defconfig

402
# SHELL used by kbuild
403
CONFIG_SHELL := sh
404

405
406
407
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)
408

409
410
411
412
413
414
415
ifneq ($(LLVM),)
HOSTCC	= clang
HOSTCXX	= clang++
else
HOSTCC	= gcc
HOSTCXX	= g++
endif
416
417
418
419
420
421

export KBUILD_USERCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \
			      -O2 -fomit-frame-pointer -std=gnu89
export KBUILD_USERLDFLAGS :=

KBUILD_HOSTCFLAGS   := $(KBUILD_USERCFLAGS) $(HOST_LFS_CFLAGS) $(HOSTCFLAGS)
422
KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
423
424
KBUILD_HOSTLDFLAGS  := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
KBUILD_HOSTLDLIBS   := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
425
426
427

# Make variables (CC, etc...)
CPP		= $(CC) -E
428
429
430
431
432
433
434
435
436
437
438
439
440
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
441
442
443
444
AR		= $(CROSS_COMPILE)ar
NM		= $(CROSS_COMPILE)nm
OBJCOPY		= $(CROSS_COMPILE)objcopy
OBJDUMP		= $(CROSS_COMPILE)objdump
445
READELF		= $(CROSS_COMPILE)readelf
446
447
448
OBJSIZE		= $(CROSS_COMPILE)size
STRIP		= $(CROSS_COMPILE)strip
endif
449
PAHOLE		= pahole
450
RESOLVE_BTFIDS	= $(objtree)/tools/bpf/resolve_btfids/resolve_btfids
451
452
LEX		= flex
YACC		= bison
453
454
455
456
457
AWK		= awk
INSTALLKERNEL  := installkernel
DEPMOD		= /sbin/depmod
PERL		= perl
PYTHON		= python
458
PYTHON3		= python3
459
CHECK		= sparse
460
BASH		= bash
461
462
463
464
465
466
KGZIP		= gzip
KBZIP2		= bzip2
KLZOP		= lzop
LZMA		= lzma
LZ4		= lz4c
XZ		= xz
467
ZSTD		= zstd
468
469

CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
470
		  -Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
471
NOSTDINC_FLAGS :=
472
473
474
475
476
477
478
479
480
CFLAGS_MODULE   =
AFLAGS_MODULE   =
LDFLAGS_MODULE  =
CFLAGS_KERNEL	=
AFLAGS_KERNEL	=
LDFLAGS_vmlinux =

# Use USERINCLUDE when you must reference the UAPI directories only.
USERINCLUDE    := \
481
482
		-I$(srctree)/arch/$(SRCARCH)/include/uapi \
		-I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \
483
		-I$(srctree)/include/uapi \
484
		-I$(objtree)/include/generated/uapi \
485
486
487
488
489
                -include $(srctree)/include/linux/kconfig.h

# Use LINUXINCLUDE when you must reference the include/ directory.
# Needed to be compatible with the O= option
LINUXINCLUDE    := \
490
491
		-I$(srctree)/arch/$(SRCARCH)/include \
		-I$(objtree)/arch/$(SRCARCH)/include/generated \
492
		$(if $(building_out_of_srctree),-I$(srctree)/include) \
493
494
		-I$(objtree)/include \
		$(USERINCLUDE)
495

496
497
498
499
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 \
500
		   -Wno-format-security \
501
502
		   -std=gnu89
KBUILD_CPPFLAGS := -D__KERNEL__
503
504
505
506
KBUILD_AFLAGS_KERNEL :=
KBUILD_CFLAGS_KERNEL :=
KBUILD_AFLAGS_MODULE  := -DMODULE
KBUILD_CFLAGS_MODULE  := -DMODULE
507
508
KBUILD_LDFLAGS_MODULE :=
export KBUILD_LDS_MODULE := $(srctree)/scripts/module-common.lds
509
KBUILD_LDFLAGS :=
510
CLANG_FLAGS :=
511

512
export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC
513
export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE RESOLVE_BTFIDS LEX YACC AWK INSTALLKERNEL
514
export PERL PYTHON PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
515
export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD
516
export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
517

518
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
519
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
520
export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN CFLAGS_KCSAN
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
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

536
# Basic helpers built in scripts/basic/
537
538
539
540
541
542
PHONY += scripts_basic
scripts_basic:
	$(Q)$(MAKE) $(build)=scripts/basic
	$(Q)rm -f .tmp_quiet_recordmcount

PHONY += outputmakefile
543
# Before starting out-of-tree build, make sure the source tree is clean.
544
545
546
# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
# output directory.
547
548
# At the same time when output Makefile generated, generate .gitignore to
# ignore whole output directory
549
outputmakefile:
550
ifdef building_out_of_srctree
551
552
553
554
555
556
557
558
559
	$(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
560
	$(Q)ln -fsn $(srctree) source
561
562
563
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
	$(Q)test -e .gitignore || \
	{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
564
565
endif

566
ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
567
ifneq ($(CROSS_COMPILE),)
568
CLANG_FLAGS	+= --target=$(notdir $(CROSS_COMPILE:%-=%))
569
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
570
CLANG_FLAGS	+= --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
571
GCC_TOOLCHAIN	:= $(realpath $(GCC_TOOLCHAIN_DIR)/..)
572
endif
573
ifneq ($(GCC_TOOLCHAIN),)
574
CLANG_FLAGS	+= --gcc-toolchain=$(GCC_TOOLCHAIN)
575
endif
576
ifneq ($(LLVM_IAS),1)
577
CLANG_FLAGS	+= -no-integrated-as
578
endif
579
CLANG_FLAGS	+= -Werror=unknown-warning-option
580
581
582
KBUILD_CFLAGS	+= $(CLANG_FLAGS)
KBUILD_AFLAGS	+= $(CLANG_FLAGS)
export CLANG_FLAGS
583
584
endif

585
586
587
588
# 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.
589
CC_VERSION_TEXT = $(shell $(CC) --version 2>/dev/null | head -n 1)
590

591
ifdef config-build
592
593
594
595
596
597
598
599
# ===========================================================================
# *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
600
export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
601

602
config: outputmakefile scripts_basic FORCE
603
604
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

605
%config: outputmakefile scripts_basic FORCE
606
607
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

608
else #!config-build
609
610
611
612
# ===========================================================================
# Build targets only - this includes vmlinux, arch specific targets, clean
# targets and others. In general all targets except *config targets.

613
# If building an external module we do not care about the all: rule
614
# but instead __all depend on modules
615
616
PHONY += all
ifeq ($(KBUILD_EXTMOD),)
617
__all: all
618
else
619
__all: modules
620
621
622
623
624
625
626
627
628
629
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)
630
  KBUILD_BUILTIN :=
631
632
633
634
635
636
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

637
ifneq ($(filter all modules nsdeps,$(MAKECMDGOALS)),)
638
639
640
641
642
643
644
645
646
  KBUILD_MODULES := 1
endif

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

export KBUILD_MODULES KBUILD_BUILTIN

647
ifdef need-config
648
649
650
include include/config/auto.conf
endif

651
652
ifeq ($(KBUILD_EXTMOD),)
# Objects we will link into vmlinux / subdirs we need to visit
653
core-y		:= init/ usr/
654
drivers-y	:= drivers/ sound/
655
drivers-$(CONFIG_SAMPLES) += samples/
656
drivers-y	+= net/ virt/
657
658
659
libs-y		:= lib/
endif # KBUILD_EXTMOD

660
661
662
663
664
# 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
665

666
667
668
669
670
CFLAGS_GCOV	:= -fprofile-arcs -ftest-coverage \
	$(call cc-option,-fno-tree-loop-im) \
	$(call cc-disable-warning,maybe-uninitialized,)
export CFLAGS_GCOV

671
672
673
674
675
# The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later.
ifdef CONFIG_FUNCTION_TRACER
  CC_FLAGS_FTRACE := -pg
endif

676
677
678
679
680
681
682
683
684
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

685
686
include arch/$(SRCARCH)/Makefile

687
688
ifdef need-config
ifdef may-sync-config
689
690
691
# 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.
692
include include/config/auto.conf.cmd
693

694
695
696
697
698
699
700
701
$(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
702

703
704
705
# 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).
706
707
708
#
# This exploits the 'multi-target pattern rule' trick.
# The syncconfig should be executed only once to make all the targets.
709
# (Note: use the grouped target '&:' when we bump to GNU Make 4.3)
710
%/config/auto.conf %/config/auto.conf.cmd %/generated/autoconf.h: $(KCONFIG_CONFIG)
711
	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
712
else # !may-sync-config
713
714
715
# 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
716
717
718
719
720
721
722
723
724
725
726
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)

727
endif # may-sync-config
728
endif # need-config
729
730

KBUILD_CFLAGS	+= $(call cc-option,-fno-delete-null-pointer-checks,)
731
KBUILD_CFLAGS	+= $(call cc-disable-warning,frame-address,)
732
733
KBUILD_CFLAGS	+= $(call cc-disable-warning, format-truncation)
KBUILD_CFLAGS	+= $(call cc-disable-warning, format-overflow)
734
KBUILD_CFLAGS	+= $(call cc-disable-warning, address-of-packed-member)
735

736
737
738
739
740
741
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
742
743
744
745
endif

# Tell gcc to never replace conditional load with a non-conditional one
KBUILD_CFLAGS	+= $(call cc-option,--param=allow-store-data-races=0)
746
KBUILD_CFLAGS	+= $(call cc-option,-fno-allow-store-data-races)
747
748
749
750
751
752
753
754
755
756
757
758

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)
759
KBUILD_CFLAGS += -Wframe-larger-than=$(CONFIG_FRAME_WARN)
760
761
endif

762
stackp-flags-y                                    := -fno-stack-protector
763
764
765
766
stackp-flags-$(CONFIG_STACKPROTECTOR)             := -fstack-protector
stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG)      := -fstack-protector-strong

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

768
ifdef CONFIG_CC_IS_CLANG
769
770
771
KBUILD_CPPFLAGS += -Qunused-arguments
KBUILD_CFLAGS += -Wno-format-invalid-specifier
KBUILD_CFLAGS += -Wno-gnu
772
773
774
# 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
775
KBUILD_CFLAGS += -mno-global-merge
776
777
778
else

# These warnings generated too much noise in a regular build.
779
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
780
KBUILD_CFLAGS += -Wno-unused-but-set-variable
781
782
783
784
785

# 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,)
786
787
endif

788
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
789
790
791
792
793
794
795
796
797
798
799
800
801
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

802
803
# Initialize all stack variables with a 0xAA pattern.
ifdef CONFIG_INIT_STACK_ALL_PATTERN
804
805
806
KBUILD_CFLAGS	+= -ftrivial-auto-var-init=pattern
endif

807
808
809
810
811
812
813
814
815
# Initialize all stack variables with a zero value.
ifdef CONFIG_INIT_STACK_ALL_ZERO
# Future support for zero initialization is still being debated, see
# https://bugs.llvm.org/show_bug.cgi?id=45497. These flags are subject to being
# renamed or dropped.
KBUILD_CFLAGS	+= -ftrivial-auto-var-init=zero
KBUILD_CFLAGS	+= -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
endif

816
DEBUG_CFLAGS	:= $(call cc-option, -fno-var-tracking-assignments)
817
818
819

ifdef CONFIG_DEBUG_INFO
ifdef CONFIG_DEBUG_INFO_SPLIT
820
DEBUG_CFLAGS	+= -gsplit-dwarf
821
else
822
DEBUG_CFLAGS	+= -g
823
endif
824
ifneq ($(LLVM_IAS),1)
825
826
KBUILD_AFLAGS	+= -Wa,-gdwarf-2
endif
827
828
endif

829
ifdef CONFIG_DEBUG_INFO_DWARF4
830
DEBUG_CFLAGS	+= -gdwarf-4
831
832
833
endif

ifdef CONFIG_DEBUG_INFO_REDUCED
834
DEBUG_CFLAGS	+= $(call cc-option, -femit-struct-debug-baseonly) \
835
836
837
		   $(call cc-option,-fno-var-tracking)
endif

838
839
840
841
842
843
ifdef CONFIG_DEBUG_INFO_COMPRESSED
DEBUG_CFLAGS	+= -gz=zlib
KBUILD_AFLAGS	+= -gz=zlib
KBUILD_LDFLAGS	+= --compress-debug-sections=zlib
endif

844
845
846
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
export DEBUG_CFLAGS

847
ifdef CONFIG_FUNCTION_TRACER
848
849
850
851
852
853
854
855
856
857
858
859
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
860
861
endif
ifdef CONFIG_HAVE_FENTRY
862
863
864
865
  ifeq ($(call cc-option-yn, -mfentry),y)
    CC_FLAGS_FTRACE	+= -mfentry
    CC_FLAGS_USING	+= -DCC_USING_FENTRY
  endif
866
endif
867
868
869
export CC_FLAGS_FTRACE
KBUILD_CFLAGS	+= $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING)
KBUILD_AFLAGS	+= $(CC_FLAGS_USING)
870
871
872
873
874
875
876
877
878
879
880
881
882
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

883
ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
884
885
KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
LDFLAGS_vmlinux += --gc-sections
886
887
endif

888
889
890
891
892
893
ifdef CONFIG_SHADOW_CALL_STACK
CC_FLAGS_SCS	:= -fsanitize=shadow-call-stack
KBUILD_CFLAGS	+= $(CC_FLAGS_SCS)
export CC_FLAGS_SCS
endif

894
895
896
897
ifdef CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B
KBUILD_CFLAGS += -falign-functions=32
endif

898
# arch Makefile may override CC so keep this after arch Makefile is included
899
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
900
901

# warn about C99 declaration after statement
902
903
904
KBUILD_CFLAGS += -Wdeclaration-after-statement

# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
905
KBUILD_CFLAGS += -Wvla
906
907

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

910
911
912
# disable stringop warnings in gcc 8+
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)

913
914
915
916
917
918
919
920
921
922
923
# 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)

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

927
928
929
930
931
932
933
934
935
# 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)

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

939
940
941
942
943
944
945
946
947
# 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)

948
949
950
# Require designated initializers for all marked structures
KBUILD_CFLAGS   += $(call cc-option,-Werror=designated-init)

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

954
955
956
957
958
959
# 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

960
961
962
963
964
965
966
967
968
969
970
971
972
# include additional Makefiles when needed
include-y			:= scripts/Makefile.extrawarn
include-$(CONFIG_KASAN)		+= scripts/Makefile.kasan
include-$(CONFIG_KCSAN)		+= scripts/Makefile.kcsan
include-$(CONFIG_UBSAN)		+= scripts/Makefile.ubsan
include-$(CONFIG_KCOV)		+= scripts/Makefile.kcov
include-$(CONFIG_GCC_PLUGINS)	+= scripts/Makefile.gcc-plugins

include $(addprefix $(srctree)/, $(include-y))

# scripts/Makefile.gcc-plugins is intentionally included last.
# Do not add $(call cc-option,...) below this line. When you build the kernel
# from the clean source tree, the GCC plugins do not exist at this point.
973

974
975
976
977
# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
KBUILD_CPPFLAGS += $(KCPPFLAGS)
KBUILD_AFLAGS   += $(KAFLAGS)
KBUILD_CFLAGS   += $(KCFLAGS)
978

979
980
KBUILD_LDFLAGS_MODULE += --build-id=sha1
LDFLAGS_vmlinux += --build-id=sha1
981
982
983
984
985

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

986
987
988
989
ifeq ($(CONFIG_RELR),y)
LDFLAGS_vmlinux	+= --pack-dyn-relocs=relr
endif

990
991
992
993
# Align the bit size of userspace programs with the kernel
KBUILD_USERCFLAGS  += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))

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

997
998
999
1000
1001
1002
# 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)

1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
# 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
1055
    mod_compress_cmd = $(KGZIP) -n -f
1056
1057
  endif # CONFIG_MODULE_COMPRESS_GZIP
  ifdef CONFIG_MODULE_COMPRESS_XZ
1058
    mod_compress_cmd = $(XZ) -f
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
  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

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

1074
1075
1076
has_libelf = $(call try-run,\
               echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)

1077
1078
1079
1080
1081
1082
1083
1084
1085
ifdef CONFIG_STACK_VALIDATION
  ifeq ($(has_libelf),1)
    objtool_target := tools/objtool FORCE
  else
    SKIP_STACK_VALIDATION := 1
    export SKIP_STACK_VALIDATION
  endif
endif

1086
1087
1088
1089
1090
1091
1092
1093
ifdef CONFIG_DEBUG_INFO_BTF
  ifeq ($(has_libelf),1)
    resolve_btfids_target := tools/bpf/resolve_btfids FORCE
  else
    ERROR_RESOLVE_BTFIDS := 1
  endif
endif

1094
PHONY += prepare0
1095

1096
export MODORDER := $(extmod-prefix)modules.order
1097
export MODULES_NSDEPS := $(extmod-prefix)modules.nsdeps
1098

1099
1100
1101
ifeq ($(KBUILD_EXTMOD),)
core-y		+= kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/

1102
vmlinux-dirs	:= $(patsubst %/,%,$(filter %/, \
1103
		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
1104
		     $(libs-y) $(libs-m)))
1105

1106
vmlinux-alldirs	:= $(sort $(vmlinux-dirs) Documentation \
1107
1108
1109
1110
1111
1112
		     $(patsubst %/,%,$(filter %/, $(core-) \
			$(drivers-) $(libs-))))

subdir-modorder := $(addsuffix modules.order,$(filter %/, \
			$(core-y) $(core-m) $(libs-y) $(libs-m) \
			$(drivers-y) $(drivers-m)))
1113

1114
1115
1116
build-dirs	:= $(vmlinux-dirs)
clean-dirs	:= $(vmlinux-alldirs)

1117
1118
1119
# Externally visible symbols (used by link-vmlinux.sh)
KBUILD_VMLINUX_OBJS := $(head-y) $(patsubst %/,%/built-in.a, $(core-y))
KBUILD_VMLINUX_OBJS += $(addsuffix built-in.a, $(filter %/, $(libs-y)))
1120
ifdef CONFIG_MODULES
1121
1122
KBUILD_VMLINUX_OBJS += $(patsubst %/, %/lib.a, $(filter %/, $(libs-y)))
KBUILD_VMLINUX_LIBS := $(filter-out %/, $(libs-y))
1123
else
1124
KBUILD_VMLINUX_LIBS := $(patsubst %/,%/lib.a, $(libs-y))
1125
endif
1126
KBUILD_VMLINUX_OBJS += $(patsubst %/,%/built-in.a, $(drivers-y))
1127

1128
export KBUILD_VMLINUX_OBJS KBUILD_VMLINUX_LIBS
1129
export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
1130
# used by scripts/Makefile.package
1131
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
1132

1133
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
1134

1135
1136
# Recurse until adjust_autoksyms.sh is satisfied
PHONY += autoksyms_recursive
1137
ifdef CONFIG_TRIM_UNUSED_KSYMS
1138
1139
1140
# 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)
1141
1142
1143
1144
1145
KBUILD_MODULES := 1

autoksyms_recursive: descend modules.order
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
	  "$(MAKE) -f $(srctree)/Makefile vmlinux"
1146
1147
1148
1149
endif

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

1150
1151
1152
1153
quiet_cmd_autoksyms_h = GEN     $@
      cmd_autoksyms_h = mkdir -p $(dir $@); \
			$(CONFIG_SHELL) $(srctree)/scripts/gen_autoksyms.sh $@

1154
$(autoksyms_h):
1155
	$(call cmd,autoksyms_h)
1156

1157
1158
1159
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)

# Final link of vmlinux with optional arch pass after final link
1160
cmd_link-vmlinux =                                                 \
1161
	$(CONFIG_SHELL) $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)";    \
1162
	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
1163

1164
vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
1165
1166
	+$(call if_changed,link-vmlinux)

1167
1168
targets := vmlinux

1169
1170
# The actual objects are generated when descending,
# make sure no implicit rule kicks in
1171
$(sort $(vmlinux-deps) $(subdir-modorder)): descend ;
1172

1173
filechk_kernel.release = \
1174
1175
1176
	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"

# Store (new) KERNELRELEASE string in include/config/kernel.release
1177
include/config/kernel.release: FORCE
1178
1179
	$(call filechk,kernel.release)

1180
1181
1182
1183
# Additional helpers built in scripts/
# Carefully list dependencies so we do not try to build scripts twice
# in parallel
PHONY += scripts
1184
scripts: scripts_basic scripts_dtc
1185
	$(Q)$(MAKE) $(build)=$(@)
1186
1187
1188
1189
1190
1191
1192

# 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.

1193
PHONY += prepare archprepare
1194

1195
archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
1196
1197
	asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h \
	include/generated/autoconf.h
1198

1199
1200
prepare0: archprepare
	$(Q)$(MAKE) $(build)=scripts/mod
1201
1202
1203
	$(Q)$(MAKE) $(build)=.

# All the preparing..
1204
prepare: prepare0 prepare-objtool prepare-resolve_btfids
1205

1206
# Support for using generic headers in asm-generic
1207
1208
asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj

1209
1210
PHONY += asm-generic uapi-asm-generic
asm-generic: uapi-asm-generic
1211
1212
	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm \
	generic=include/asm-generic
1213
uapi-asm-generic:
1214
1215
	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \
	generic=include/uapi/asm-generic
1216

1217
PHONY += prepare-objtool prepare-resolve_btfids
1218
prepare-objtool: $(objtool_target)
1219
1220
1221
1222
1223
1224
1225
1226
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
1227

1228
1229
1230
1231
1232
prepare-resolve_btfids: $(resolve_btfids_target)
ifeq ($(ERROR_RESOLVE_BTFIDS),1)
	@echo "error: Cannot resolve BTF IDs for CONFIG_DEBUG_INFO_BTF, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2
	@false
endif
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
# 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;                                                               \
1245
	echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
1246
1247
1248
endef

define filechk_version.h
1249
	echo \#define LINUX_VERSION_CODE $(shell                         \
1250
	expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \
1251
	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'
1252
1253
endef

1254
$(version_h): FORCE
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
	$(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

1272
1273
1274
1275
1276
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)
1277

1278
1279
1280
PHONY += headers_install
headers_install: headers
	$(call cmd,headers_install)
1281

1282
PHONY += archheaders archscripts
1283

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

1286
1287
PHONY += headers
headers: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
1288
	$(if $(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/Kbuild),, \
1289
	  $(error Headers not exportable for the $(SRCARCH) architecture))
1290
1291
	$(Q)$(MAKE) $(hdr-inst)=include/uapi
	$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi
1292