Makefile 63.2 KB
Newer Older
1
# SPDX-License-Identifier: GPL-2.0
2
VERSION = 5
3
PATCHLEVEL = 10
4
SUBLEVEL = 28
5
EXTRAVERSION =
6
NAME = Dare mighty things
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
269
no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \
			  image_name
270
single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
271

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

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

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

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

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

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

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

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

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

PHONY += $(MAKECMDGOALS) __build_one_by_one

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

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

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

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

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

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

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

397
398
399
KCONFIG_CONFIG	?= .config
export KCONFIG_CONFIG

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

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

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

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

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)
423
KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
424
425
KBUILD_HOSTLDFLAGS  := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
KBUILD_HOSTLDLIBS   := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
426
427
428

# Make variables (CC, etc...)
CPP		= $(CC) -E
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
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
STRIP		= $(CROSS_COMPILE)strip
endif
448
PAHOLE		= pahole
449
RESOLVE_BTFIDS	= $(objtree)/tools/bpf/resolve_btfids/resolve_btfids
450
451
LEX		= flex
YACC		= bison
452
453
AWK		= awk
INSTALLKERNEL  := installkernel
454
DEPMOD		= depmod
455
456
PERL		= perl
PYTHON		= python
457
PYTHON3		= python3
458
CHECK		= sparse
459
BASH		= bash
460
461
462
463
464
465
466
KGZIP		= gzip
KBZIP2		= bzip2
KLZOP		= lzop
LZMA		= lzma
LZ4		= lz4c
XZ		= xz
ZSTD		= zstd
467
468

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

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

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

495
496
497
498
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 \
499
		   -Werror=return-type -Wno-format-security \
500
501
		   -std=gnu89
KBUILD_CPPFLAGS := -D__KERNEL__
502
503
504
505
KBUILD_AFLAGS_KERNEL :=
KBUILD_CFLAGS_KERNEL :=
KBUILD_AFLAGS_MODULE  := -DMODULE
KBUILD_CFLAGS_MODULE  := -DMODULE
506
KBUILD_LDFLAGS_MODULE :=
507
KBUILD_LDFLAGS :=
508
CLANG_FLAGS :=
509

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

516
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
517
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
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

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

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

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

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

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

599
config: outputmakefile scripts_basic FORCE
600
601
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

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

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

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

634
ifneq ($(filter all modules nsdeps %compile_commands.json clang-%,$(MAKECMDGOALS)),)
635
636
637
638
639
640
641
642
643
  KBUILD_MODULES := 1
endif

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

export KBUILD_MODULES KBUILD_BUILTIN

644
ifdef need-config
645
646
647
include include/config/auto.conf
endif

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

657
658
659
660
661
# 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
662

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

668
669
670
671
672
# The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later.
ifdef CONFIG_FUNCTION_TRACER
  CC_FLAGS_FTRACE := -pg
endif

673
674
675
676
677
678
679
680
681
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

682
683
include arch/$(SRCARCH)/Makefile

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

691
692
693
694
695
696
697
698
$(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
699

700
701
702
# 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).
703
704
705
#
# This exploits the 'multi-target pattern rule' trick.
# The syncconfig should be executed only once to make all the targets.
706
# (Note: use the grouped target '&:' when we bump to GNU Make 4.3)
707
708
709
710
711
quiet_cmd_syncconfig = SYNC    $@
      cmd_syncconfig = $(MAKE) -f $(srctree)/Makefile syncconfig

%/config/auto.conf %/config/auto.conf.cmd %/generated/autoconf.h: $(KCONFIG_CONFIG)
	+$(call cmd,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
816
817
818
819
820
821
822
# 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

DEBUG_CFLAGS	:=

# Workaround for GCC versions < 5.0
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61801
ifdef CONFIG_CC_IS_GCC
DEBUG_CFLAGS	+= $(call cc-ifversion, -lt, 0500, $(call cc-option, -fno-var-tracking-assignments))
endif
823
824

ifdef CONFIG_DEBUG_INFO
825

826
ifdef CONFIG_DEBUG_INFO_SPLIT
827
DEBUG_CFLAGS	+= -gsplit-dwarf
828
else
829
DEBUG_CFLAGS	+= -g
830
endif
831
832

ifneq ($(LLVM_IAS),1)
833
834
KBUILD_AFLAGS	+= -Wa,-gdwarf-2
endif
835

836
ifdef CONFIG_DEBUG_INFO_DWARF4
837
DEBUG_CFLAGS	+= -gdwarf-4
838
839
840
endif

ifdef CONFIG_DEBUG_INFO_REDUCED
841
DEBUG_CFLAGS	+= $(call cc-option, -femit-struct-debug-baseonly) \
842
843
844
		   $(call cc-option,-fno-var-tracking)
endif

845
846
847
848
849
850
851
852
ifdef CONFIG_DEBUG_INFO_COMPRESSED
DEBUG_CFLAGS	+= -gz=zlib
KBUILD_AFLAGS	+= -gz=zlib
KBUILD_LDFLAGS	+= --compress-debug-sections=zlib
endif

endif # CONFIG_DEBUG_INFO

853
854
855
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
export DEBUG_CFLAGS

856
ifdef CONFIG_FUNCTION_TRACER
857
858
859
860
861
862
863
864
865
866
867
868
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
869
870
endif
ifdef CONFIG_HAVE_FENTRY
871
872
873
874
  ifeq ($(call cc-option-yn, -mfentry),y)
    CC_FLAGS_FTRACE	+= -mfentry
    CC_FLAGS_USING	+= -DCC_USING_FENTRY
  endif
875
endif
876
877
878
export CC_FLAGS_FTRACE
KBUILD_CFLAGS	+= $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING)
KBUILD_AFLAGS	+= $(CC_FLAGS_USING)
879
880
881
882
883
884
885
886
887
888
889
890
891
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

892
ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
893
894
KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
LDFLAGS_vmlinux += --gc-sections
895
896
endif

897
898
899
900
901
902
903
904
ifdef CONFIG_SHADOW_CALL_STACK
CC_FLAGS_SCS	:= -fsanitize=shadow-call-stack
KBUILD_CFLAGS	+= $(CC_FLAGS_SCS)
export CC_FLAGS_SCS
endif

ifdef CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B
KBUILD_CFLAGS += -falign-functions=32
905
906
endif

907
# arch Makefile may override CC so keep this after arch Makefile is included
908
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
909
910

# warn about C99 declaration after statement
911
912
913
KBUILD_CFLAGS += -Wdeclaration-after-statement

# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
914
KBUILD_CFLAGS += -Wvla
915
916

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

919
920
921
# disable stringop warnings in gcc 8+
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)

922
923
924
925
926
927
928
929
930
931
932
# 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)

933
# disable invalid "can't wrap" optimizations for signed / pointers
934
KBUILD_CFLAGS	+= -fno-strict-overflow
935

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

939
940
941
942
# conserve stack if available
KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)

# Prohibit date/time macros, which would make the build non-deterministic
943
KBUILD_CFLAGS   += -Werror=date-time
944
945
946
947

# 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
# change __FILE__ to the relative path from the srctree
952
KBUILD_CPPFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
953

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

962
963
964
965
966
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.
967

968
969
970
971
# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
KBUILD_CPPFLAGS += $(KCPPFLAGS)
KBUILD_AFLAGS   += $(KAFLAGS)
KBUILD_CFLAGS   += $(KCFLAGS)
972

973
974
KBUILD_LDFLAGS_MODULE += --build-id=sha1
LDFLAGS_vmlinux += --build-id=sha1
975
976
977
978
979

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

980
981
982
983
ifeq ($(CONFIG_RELR),y)
LDFLAGS_vmlinux	+= --pack-dyn-relocs=relr
endif

984
985
986
987
988
989
990
991
992
993
# We never want expected sections to be placed heuristically by the
# linker. All sections should be explicitly named in the linker script.
ifdef CONFIG_LD_ORPHAN_WARN
LDFLAGS_vmlinux += --orphan-handling=warn
endif

# 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
1094
1095
ifdef CONFIG_BPF
ifdef CONFIG_DEBUG_INFO_BTF
  ifeq ($(has_libelf),1)
    resolve_btfids_target := tools/bpf/resolve_btfids FORCE
  else
    ERROR_RESOLVE_BTFIDS := 1
  endif
endif # CONFIG_DEBUG_INFO_BTF
endif # CONFIG_BPF

1096
PHONY += prepare0
1097

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

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

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

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

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

1116
1117
1118
build-dirs	:= $(vmlinux-dirs)
clean-dirs	:= $(vmlinux-alldirs)

1119
1120
1121
# 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)))
1122
ifdef CONFIG_MODULES
1123
1124
KBUILD_VMLINUX_OBJS += $(patsubst %/, %/lib.a, $(filter %/, $(libs-y)))
KBUILD_VMLINUX_LIBS := $(filter-out %/, $(libs-y))
1125
else
1126
KBUILD_VMLINUX_LIBS := $(patsubst %/,%/lib.a, $(libs-y))
1127
endif
1128
KBUILD_VMLINUX_OBJS += $(patsubst %/,%/built-in.a, $(drivers-y))
1129

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

1135
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
1136

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

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

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

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

1156
$(autoksyms_h):
1157
	$(call cmd,autoksyms_h)
1158

1159
1160
1161
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)

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

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

1169
1170
targets := vmlinux

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

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

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

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

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

1195
PHONY += prepare archprepare
1196

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

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

# All the preparing..
1206
prepare: prepare0 prepare-objtool prepare-resolve_btfids
1207

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

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

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

1230
1231
1232
1233
1234
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
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
# 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;                                                               \
1247
	echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
1248
1249
1250
endef

define filechk_version.h
1251
1252
	if [ $(SUBLEVEL) -gt 255 ]; then                                 \
		echo \#define LINUX_VERSION_CODE $(shell                 \
1253
		expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + 255); \
1254
1255
	else                                                             \
		echo \#define LINUX_VERSION_CODE $(shell                 \
1256
		expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
1257
1258
1259
	fi;                                                              \
	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) +  \
	((c) > 255 ? 255 : (c)))'
1260
1261
endef

1262
1263
$(version_h): PATCHLEVEL := $(if $(PATCHLEVEL), $(PATCHLEVEL), 0)
$(version_h): SUBLEVEL := $(if $(SUBLEVEL), $(SUBLEVEL), 0)
1264
$(version_h): FORCE
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
	$(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