Makefile 64.2 KB
Newer Older
1
# SPDX-License-Identifier: GPL-2.0
Linus Torvalds's avatar
Linus Torvalds committed
2
VERSION = 5
Linus Torvalds's avatar
Linus Torvalds committed
3
PATCHLEVEL = 14
Linus Torvalds's avatar
Linus Torvalds committed
4
SUBLEVEL = 0
Linus Torvalds's avatar
Linus Torvalds committed
5
EXTRAVERSION =
Linus Torvalds's avatar
Linus Torvalds committed
6
NAME = Opossums on Parade
Linus Torvalds's avatar
Linus Torvalds committed
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

Linus Torvalds's avatar
Linus Torvalds committed
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
Linus Torvalds's avatar
Linus Torvalds committed
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
ifneq ($(sub_make_done),1)
38 39 40 41 42 43 44 45 46 47 48 49 50 51

# 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
#
Linus Torvalds's avatar
Linus Torvalds committed
76 77 78
# To put more focus on warnings, be less verbose as default
# Use 'make V=1' to see the full commands

79 80
ifeq ("$(origin V)", "command line")
  KBUILD_VERBOSE = $(V)
Linus Torvalds's avatar
Linus Torvalds committed
81 82 83 84 85
endif
ifndef KBUILD_VERBOSE
  KBUILD_VERBOSE = 0
endif

86 87 88 89 90 91 92 93 94 95 96
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
  quiet=silent_
99
  KBUILD_VERBOSE = 0
100 101 102 103
endif

export quiet Q KBUILD_VERBOSE

104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
# 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.
#
# See the file "Documentation/dev-tools/sparse.rst" for more details,
# including where to get the "sparse" utility.

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

export KBUILD_CHECKSRC

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

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

132 133 134 135 136
# Remove trailing slashes
ifneq ($(filter %/, $(KBUILD_EXTMOD)),)
KBUILD_EXTMOD := $(shell dirname $(KBUILD_EXTMOD).)
endif

137 138
export KBUILD_EXTMOD

139 140 141 142 143 144 145 146 147 148
# 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.
#
Linus Torvalds's avatar
Linus Torvalds committed
149 150
# 1) O=
# Use "make O=dir/to/store/output/files/"
151
#
Linus Torvalds's avatar
Linus Torvalds committed
152
# 2) Set KBUILD_OUTPUT
153 154
# Set the environment variable KBUILD_OUTPUT to point to the output directory.
# export KBUILD_OUTPUT=dir/to/store/output/files/; make
Linus Torvalds's avatar
Linus Torvalds committed
155 156 157 158
#
# The O= assignment takes precedence over the KBUILD_OUTPUT environment
# variable.

159
# Do we want to change the working directory?
160 161
ifeq ("$(origin O)", "command line")
  KBUILD_OUTPUT := $(O)
Linus Torvalds's avatar
Linus Torvalds committed
162 163
endif

164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
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
182 183
endif

184 185
this-makefile := $(lastword $(MAKEFILE_LIST))
abs_srctree := $(realpath $(dir $(this-makefile)))
Linus Torvalds's avatar
Linus Torvalds committed
186

187 188 189
ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
$(error source directory cannot contain spaces or colons)
endif
Linus Torvalds's avatar
Linus Torvalds committed
190

191
ifneq ($(abs_srctree),$(abs_objtree))
192 193 194
# Look for make include files relative to root of kernel src
#
# This does not become effective immediately because MAKEFLAGS is re-parsed
195 196
# once after the Makefile is read. We need to invoke sub-make.
MAKEFLAGS += --include-dir=$(abs_srctree)
197
need-sub-make := 1
198
endif
199

200 201 202 203 204
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.
205
$(this-makefile): ;
206 207
endif

208
export abs_srctree abs_objtree
209 210
export sub_make_done := 1

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

213
PHONY += $(MAKECMDGOALS) __sub-make
214

215
$(filter-out $(this-makefile), $(MAKECMDGOALS)) __all: __sub-make
216
	@:
217

218
# Invoke a second make in the output directory, passing relevant variables
219
__sub-make:
220
	$(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
Linus Torvalds's avatar
Linus Torvalds committed
221

222
endif # need-sub-make
223
endif # sub_make_done
224

Linus Torvalds's avatar
Linus Torvalds committed
225
# We process the rest of the Makefile if this is the final invocation of make
226
ifeq ($(need-sub-make),)
Linus Torvalds's avatar
Linus Torvalds committed
227

228 229 230 231 232
# 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

233
ifeq ($(abs_srctree),$(abs_objtree))
234 235
        # building in the source tree
        srctree := .
236
	building_out_of_srctree :=
237
else
238
        ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
239 240 241
                # building in a subdirectory of the source tree
                srctree := ..
        else
242
                srctree := $(abs_srctree)
243
        endif
244
	building_out_of_srctree := 1
245
endif
246

247 248 249
ifneq ($(KBUILD_ABS_SRCTREE),)
srctree := $(abs_srctree)
endif
250

251
objtree		:= .
252
VPATH		:= $(srctree)
Linus Torvalds's avatar
Linus Torvalds committed
253

254
export building_out_of_srctree srctree objtree VPATH
Linus Torvalds's avatar
Linus Torvalds committed
255

256 257 258 259 260 261 262 263 264 265
# 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

266 267
clean-targets := %clean mrproper cleandocs
no-dot-config-targets := $(clean-targets) \
268
			 cscope gtags TAGS tags help% %docs check% coccicheck \
269
			 $(version_h) headers headers_% archheaders archscripts \
270 271
			 %asm-generic kernelversion %src-pkg dt_binding_check \
			 outputmakefile
272 273 274 275
# Installation targets should not require compiler. Unfortunately, vdso_install
# is an exception where build artifacts may be updated. This must be fixed.
no-compiler-targets := $(no-dot-config-targets) install dtbs_install \
			headers_install modules_install kernelrelease image_name
276 277
no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \
			  image_name
278
single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
279

280 281 282
config-build	:=
mixed-build	:=
need-config	:= 1
283
need-compiler	:= 1
284
may-sync-config	:= 1
285
single-build	:=
286 287 288

ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
289
		need-config :=
290 291 292
	endif
endif

293 294 295 296 297 298
ifneq ($(filter $(no-compiler-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-compiler-targets), $(MAKECMDGOALS)),)
		need-compiler :=
	endif
endif

299 300
ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
301
		may-sync-config :=
302 303 304 305
	endif
endif

ifneq ($(KBUILD_EXTMOD),)
306
	may-sync-config :=
307 308
endif

309
ifeq ($(KBUILD_EXTMOD),)
310
        ifneq ($(filter %config,$(MAKECMDGOALS)),)
311
		config-build := 1
312
                ifneq ($(words $(MAKECMDGOALS)),1)
313
			mixed-build := 1
314 315 316
                endif
        endif
endif
317

318 319 320 321 322 323 324 325
# 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

326 327 328
# For "make -j clean all", "make -j mrproper defconfig all", etc.
ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),)
        ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),)
329
		mixed-build := 1
330 331 332
        endif
endif

333 334 335
# install and modules_install need also be processed one by one
ifneq ($(filter install,$(MAKECMDGOALS)),)
        ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
336
		mixed-build := 1
337 338 339
        endif
endif

340
ifdef mixed-build
341 342 343 344 345 346
# ===========================================================================
# We're called with mixed targets (*config and build targets).
# Handle them one by one.

PHONY += $(MAKECMDGOALS) __build_one_by_one

347
$(MAKECMDGOALS): __build_one_by_one
348 349 350 351 352 353 354 355
	@:

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

356
else # !mixed-build
357

358
include $(srctree)/scripts/Kbuild.include
359 360 361 362 363 364

# 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

365
include $(srctree)/scripts/subarch.include
Linus Torvalds's avatar
Linus Torvalds committed
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384

# 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
385
ARCH		?= $(SUBARCH)
Linus Torvalds's avatar
Linus Torvalds committed
386 387

# Architecture as present in compile.h
388 389
UTS_MACHINE 	:= $(ARCH)
SRCARCH 	:= $(ARCH)
Linus Torvalds's avatar
Linus Torvalds committed
390

391 392 393 394 395 396 397
# Additional ARCH settings for x86
ifeq ($(ARCH),i386)
        SRCARCH := x86
endif
ifeq ($(ARCH),x86_64)
        SRCARCH := x86
endif
398

Sam Ravnborg's avatar
Sam Ravnborg committed
399
# Additional ARCH settings for sparc
Namhyung Kim's avatar
Namhyung Kim committed
400 401 402
ifeq ($(ARCH),sparc32)
       SRCARCH := sparc
endif
403
ifeq ($(ARCH),sparc64)
Sam Ravnborg's avatar
Sam Ravnborg committed
404
       SRCARCH := sparc
405
endif
406

407 408 409 410 411
# Additional ARCH settings for parisc
ifeq ($(ARCH),parisc64)
       SRCARCH := parisc
endif

412 413 414 415 416
export cross_compiling :=
ifneq ($(SRCARCH),$(SUBARCH))
cross_compiling := 1
endif

417
KCONFIG_CONFIG	?= .config
418
export KCONFIG_CONFIG
419

Linus Torvalds's avatar
Linus Torvalds committed
420
# SHELL used by kbuild
421
CONFIG_SHELL := sh
Linus Torvalds's avatar
Linus Torvalds committed
422

423 424 425
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)
426

427 428 429 430 431 432 433
ifneq ($(LLVM),)
HOSTCC	= clang
HOSTCXX	= clang++
else
HOSTCC	= gcc
HOSTCXX	= g++
endif
434 435 436 437 438 439

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)
440
KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
441 442
KBUILD_HOSTLDFLAGS  := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
KBUILD_HOSTLDLIBS   := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
Linus Torvalds's avatar
Linus Torvalds committed
443 444 445

# Make variables (CC, etc...)
CPP		= $(CC) -E
446 447 448 449 450 451 452 453 454 455 456 457
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
Linus Torvalds's avatar
Linus Torvalds committed
458 459 460 461
AR		= $(CROSS_COMPILE)ar
NM		= $(CROSS_COMPILE)nm
OBJCOPY		= $(CROSS_COMPILE)objcopy
OBJDUMP		= $(CROSS_COMPILE)objdump
462
READELF		= $(CROSS_COMPILE)readelf
463 464
STRIP		= $(CROSS_COMPILE)strip
endif
465
PAHOLE		= pahole
466
RESOLVE_BTFIDS	= $(objtree)/tools/bpf/resolve_btfids/resolve_btfids
467 468
LEX		= flex
YACC		= bison
Linus Torvalds's avatar
Linus Torvalds committed
469
AWK		= awk
470
INSTALLKERNEL  := installkernel
471
DEPMOD		= depmod
Linus Torvalds's avatar
Linus Torvalds committed
472
PERL		= perl
473
PYTHON3		= python3
Linus Torvalds's avatar
Linus Torvalds committed
474
CHECK		= sparse
475
BASH		= bash
476 477 478
KGZIP		= gzip
KBZIP2		= bzip2
KLZOP		= lzop
479 480 481
LZMA		= lzma
LZ4		= lz4c
XZ		= xz
482
ZSTD		= zstd
483

484
CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
485
		  -Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
486
NOSTDINC_FLAGS :=
487 488 489
CFLAGS_MODULE   =
AFLAGS_MODULE   =
LDFLAGS_MODULE  =
Linus Torvalds's avatar
Linus Torvalds committed
490 491
CFLAGS_KERNEL	=
AFLAGS_KERNEL	=
492
LDFLAGS_vmlinux =
Linus Torvalds's avatar
Linus Torvalds committed
493

494 495
# Use USERINCLUDE when you must reference the UAPI directories only.
USERINCLUDE    := \
496 497
		-I$(srctree)/arch/$(SRCARCH)/include/uapi \
		-I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \
498
		-I$(srctree)/include/uapi \
499
		-I$(objtree)/include/generated/uapi \
500
                -include $(srctree)/include/linux/compiler-version.h \
501 502
                -include $(srctree)/include/linux/kconfig.h

Linus Torvalds's avatar
Linus Torvalds committed
503 504
# Use LINUXINCLUDE when you must reference the include/ directory.
# Needed to be compatible with the O= option
505
LINUXINCLUDE    := \
506 507
		-I$(srctree)/arch/$(SRCARCH)/include \
		-I$(objtree)/arch/$(SRCARCH)/include/generated \
508
		$(if $(building_out_of_srctree),-I$(srctree)/include) \
509 510
		-I$(objtree)/include \
		$(USERINCLUDE)
Linus Torvalds's avatar
Linus Torvalds committed
511

512
KBUILD_AFLAGS   := -D__ASSEMBLY__ -fno-PIE
513
KBUILD_CFLAGS   := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
514
		   -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
515
		   -Werror=implicit-function-declaration -Werror=implicit-int \
516
		   -Werror=return-type -Wno-format-security \
517 518
		   -std=gnu89
KBUILD_CPPFLAGS := -D__KERNEL__
519 520
KBUILD_AFLAGS_KERNEL :=
KBUILD_CFLAGS_KERNEL :=
521 522
KBUILD_AFLAGS_MODULE  := -DMODULE
KBUILD_CFLAGS_MODULE  := -DMODULE
523
KBUILD_LDFLAGS_MODULE :=
524
KBUILD_LDFLAGS :=
525
CLANG_FLAGS :=
Linus Torvalds's avatar
Linus Torvalds committed
526

Masahiro Yamada's avatar
Masahiro Yamada committed
527
export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC
Vasily Gorbik's avatar
Vasily Gorbik committed
528
export CPP AR NM STRIP OBJCOPY OBJDUMP READELF PAHOLE RESOLVE_BTFIDS LEX YACC AWK INSTALLKERNEL
529
export PERL PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
530
export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD
531
export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
Linus Torvalds's avatar
Linus Torvalds committed
532

533
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
534
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
535
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
536
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
537
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
Linus Torvalds's avatar
Linus Torvalds committed
538 539 540

# Files to ignore in find ... statements

541 542 543
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
Jesper Juhl's avatar
Jesper Juhl committed
544 545
export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
			 --exclude CVS --exclude .pc --exclude .hg --exclude .git
Linus Torvalds's avatar
Linus Torvalds committed
546 547 548 549

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

550
# Basic helpers built in scripts/basic/
551
PHONY += scripts_basic
Linus Torvalds's avatar
Linus Torvalds committed
552 553 554
scripts_basic:
	$(Q)$(MAKE) $(build)=scripts/basic

555
PHONY += outputmakefile
556
ifdef building_out_of_srctree
557
# Before starting out-of-tree build, make sure the source tree is clean.
558 559 560
# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
# output directory.
561 562
# At the same time when output Makefile generated, generate .gitignore to
# ignore whole output directory
563 564 565 566 567 568 569

quiet_cmd_makefile = GEN     Makefile
      cmd_makefile = { \
	echo "\# Automatically generated by $(srctree)/Makefile: don't edit"; \
	echo "include $(srctree)/Makefile"; \
	} > Makefile

Linus Torvalds's avatar
Linus Torvalds committed
570
outputmakefile:
571 572 573 574 575 576 577 578 579
	$(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
580
	$(Q)ln -fsn $(srctree) source
581
	$(call cmd,makefile)
582 583
	$(Q)test -e .gitignore || \
	{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
584
endif
Linus Torvalds's avatar
Linus Torvalds committed
585

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

ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
593
ifneq ($(CROSS_COMPILE),)
594
CLANG_FLAGS	+= --target=$(notdir $(CROSS_COMPILE:%-=%))
595
endif
596 597 598
ifeq ($(LLVM_IAS),1)
CLANG_FLAGS	+= -integrated-as
else
599
CLANG_FLAGS	+= -no-integrated-as
600 601
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
CLANG_FLAGS	+= --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
602
endif
603
CLANG_FLAGS	+= -Werror=unknown-warning-option
604 605
KBUILD_CFLAGS	+= $(CLANG_FLAGS)
KBUILD_AFLAGS	+= $(CLANG_FLAGS)
606
export CLANG_FLAGS
607 608
endif

609 610
# Include this also for config targets because some architectures need
# cc-cross-prefix to determine CROSS_COMPILE.
611
ifdef need-compiler
612
include $(srctree)/scripts/Makefile.compiler
613
endif
614

615
ifdef config-build
Linus Torvalds's avatar
Linus Torvalds committed
616 617 618 619 620 621 622
# ===========================================================================
# *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'
623
include $(srctree)/arch/$(SRCARCH)/Makefile
624
export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
Linus Torvalds's avatar
Linus Torvalds committed
625

626
config: outputmakefile scripts_basic FORCE
627 628
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

629
%config: outputmakefile scripts_basic FORCE
Linus Torvalds's avatar
Linus Torvalds committed
630 631
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

632
else #!config-build
Linus Torvalds's avatar
Linus Torvalds committed
633 634 635 636
# ===========================================================================
# Build targets only - this includes vmlinux, arch specific targets, clean
# targets and others. In general all targets except *config targets.

637
# If building an external module we do not care about the all: rule
638
# but instead __all depend on modules
639 640
PHONY += all
ifeq ($(KBUILD_EXTMOD),)
641
__all: all
642
else
643
__all: modules
644 645 646 647 648 649 650 651 652 653
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)
654
  KBUILD_BUILTIN :=
655 656 657 658 659 660
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

661
ifneq ($(filter all modules nsdeps %compile_commands.json clang-%,$(MAKECMDGOALS)),)
662 663 664 665 666 667 668 669 670
  KBUILD_MODULES := 1
endif

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

export KBUILD_MODULES KBUILD_BUILTIN

671
ifdef need-config
672 673 674
include include/config/auto.conf
endif

Linus Torvalds's avatar
Linus Torvalds committed
675 676
ifeq ($(KBUILD_EXTMOD),)
# Objects we will link into vmlinux / subdirs we need to visit
677
core-y		:= init/ usr/ arch/$(SRCARCH)/
678
drivers-y	:= drivers/ sound/
679
drivers-$(CONFIG_SAMPLES) += samples/
680 681
drivers-$(CONFIG_NET) += net/
drivers-y	+= virt/
Linus Torvalds's avatar
Linus Torvalds committed
682 683 684
libs-y		:= lib/
endif # KBUILD_EXTMOD

685 686 687 688 689 690 691 692 693
# 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

CFLAGS_GCOV	:= -fprofile-arcs -ftest-coverage \
	$(call cc-option,-fno-tree-loop-im) \
	$(call cc-disable-warning,maybe-uninitialized,)
694
export CFLAGS_GCOV
695

696 697 698 699 700
# The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later.
ifdef CONFIG_FUNCTION_TRACER
  CC_FLAGS_FTRACE := -pg
endif

701 702 703 704 705 706 707 708 709
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

710
include $(srctree)/arch/$(SRCARCH)/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
711

712 713
ifdef need-config
ifdef may-sync-config
714 715 716
# 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.
717
include include/config/auto.conf.cmd
Linus Torvalds's avatar
Linus Torvalds committed
718

719 720 721 722 723 724 725 726
$(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
Linus Torvalds's avatar
Linus Torvalds committed
727

728 729 730
# 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).
731 732 733
#
# This exploits the 'multi-target pattern rule' trick.
# The syncconfig should be executed only once to make all the targets.
734
# (Note: use the grouped target '&:' when we bump to GNU Make 4.3)
735 736 737
#
# Do not use $(call cmd,...) here. That would suppress prompts from syncconfig,
# so you cannot notice that Kconfig is waiting for the user input.
738
%/config/auto.conf %/config/auto.conf.cmd %/generated/autoconf.h: $(KCONFIG_CONFIG)
739 740
	$(Q)$(kecho) "  SYNC    $@"
	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
741
else # !may-sync-config
742 743 744
# 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
745 746 747
PHONY += include/config/auto.conf

include/config/auto.conf:
748
	$(Q)test -e include/generated/autoconf.h -a -e $@ || (		\
Michal Marek's avatar
Michal Marek committed
749 750 751 752 753
	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 ;							\
754 755
	/bin/false)

756
endif # may-sync-config
757
endif # need-config
Linus Torvalds's avatar
Linus Torvalds committed
758

759
KBUILD_CFLAGS	+= $(call cc-option,-fno-delete-null-pointer-checks,)
760
KBUILD_CFLAGS	+= $(call cc-disable-warning,frame-address,)
761 762
KBUILD_CFLAGS	+= $(call cc-disable-warning, format-truncation)
KBUILD_CFLAGS	+= $(call cc-disable-warning, format-overflow)
763
KBUILD_CFLAGS	+= $(call cc-disable-warning, address-of-packed-member)
764

765 766 767 768 769 770
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
771
endif
Linus Torvalds's avatar
Linus Torvalds committed
772

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

Andi Kleen's avatar
Andi Kleen committed
777 778 779 780 781 782 783 784 785 786
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

787
ifneq ($(CONFIG_FRAME_WARN),0)
788
KBUILD_CFLAGS += -Wframe-larger-than=$(CONFIG_FRAME_WARN)
789 790
endif

791
stackp-flags-y                                    := -fno-stack-protector
792 793
stackp-flags-$(CONFIG_STACKPROTECTOR)             := -fstack-protector
stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG)      := -fstack-protector-strong
794 795

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

797
ifdef CONFIG_CC_IS_CLANG
798 799 800
KBUILD_CPPFLAGS += -Qunused-arguments
KBUILD_CFLAGS += -Wno-format-invalid-specifier
KBUILD_CFLAGS += -Wno-gnu
801 802 803
# 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
804
KBUILD_CFLAGS += -mno-global-merge
805 806 807 808 809 810
else

# 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=5,)
811 812
endif

813 814 815 816
# These warnings generated too much noise in a regular build.
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)

817
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
Linus Torvalds's avatar
Linus Torvalds committed
818
ifdef CONFIG_FRAME_POINTER
819
KBUILD_CFLAGS	+= -fno-omit-frame-pointer -fno-optimize-sibling-calls
Linus Torvalds's avatar
Linus Torvalds committed
820
else
821 822 823 824 825 826
# 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
827
KBUILD_CFLAGS	+= -fomit-frame-pointer
Linus Torvalds's avatar
Linus Torvalds committed
828
endif
829
endif
Linus Torvalds's avatar
Linus Torvalds committed
830

831 832
# Initialize all stack variables with a 0xAA pattern.
ifdef CONFIG_INIT_STACK_ALL_PATTERN
833 834 835
KBUILD_CFLAGS	+= -ftrivial-auto-var-init=pattern
endif

836 837 838 839 840 841 842 843 844
# 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

845 846 847 848
# While VLAs have been removed, GCC produces unreachable stack probes
# for the randomize_kstack_offset feature. Disable it for all compilers.
KBUILD_CFLAGS	+= $(call cc-option, -fno-stack-clash-protection)

849 850 851 852 853
# Clear used registers at func exit (to reduce data lifetime and ROP gadgets).
ifdef CONFIG_ZERO_CALL_USED_REGS
KBUILD_CFLAGS	+= -fzero-call-used-regs=used-gpr
endif

854 855
DEBUG_CFLAGS	:=

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

Linus Torvalds's avatar
Linus Torvalds committed
862
ifdef CONFIG_DEBUG_INFO
863

864
ifdef CONFIG_DEBUG_INFO_SPLIT
865
DEBUG_CFLAGS	+= -gsplit-dwarf
866
else
867
DEBUG_CFLAGS	+= -g
868
endif
869

870
ifneq ($(LLVM_IAS),1)
871
KBUILD_AFLAGS	+= -Wa,-gdwarf-2
872
endif
873

874 875
ifndef CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4
876
dwarf-version-$(CONFIG_DEBUG_INFO_DWARF5) := 5
877
DEBUG_CFLAGS	+= -gdwarf-$(dwarf-version-y)
878
endif
Linus Torvalds's avatar
Linus Torvalds committed
879

880
ifdef CONFIG_DEBUG_INFO_REDUCED
881
DEBUG_CFLAGS	+= $(call cc-option, -femit-struct-debug-baseonly) \
882
		   $(call cc-option,-fno-var-tracking)
883 884
endif

885 886
ifdef CONFIG_DEBUG_INFO_COMPRESSED
DEBUG_CFLAGS	+= -gz=zlib
887
KBUILD_AFLAGS	+= -gz=zlib
888 889 890
KBUILD_LDFLAGS	+= --compress-debug-sections=zlib
endif

891 892
endif # CONFIG_DEBUG_INFO

893 894 895
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
export DEBUG_CFLAGS

896
ifdef CONFIG_FUNCTION_TRACER
897 898
ifdef CONFIG_FTRACE_MCOUNT_USE_CC
  CC_FLAGS_FTRACE	+= -mrecord-mcount
899 900 901 902 903 904
  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
905
endif
906 907 908
ifdef CONFIG_FTRACE_MCOUNT_USE_OBJTOOL
  CC_FLAGS_USING	+= -DCC_USING_NOP_MCOUNT
endif
909 910 911 912 913 914
ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
  ifdef CONFIG_HAVE_C_RECORDMCOUNT
    BUILD_C_RECORDMCOUNT := y
    export BUILD_C_RECORDMCOUNT
  endif
endif
915
ifdef CONFIG_HAVE_FENTRY
916 917 918 919
  ifeq ($(call cc-option-yn, -mfentry),y)
    CC_FLAGS_FTRACE	+= -mfentry
    CC_FLAGS_USING	+= -DCC_USING_FENTRY
  endif
920
endif
921 922 923
export CC_FLAGS_FTRACE
KBUILD_CFLAGS	+= $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING)
KBUILD_AFLAGS	+= $(CC_FLAGS_USING)
924 925
endif

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

931
ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
932 933
KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
LDFLAGS_vmlinux += --gc-sections
934 935
endif

936 937 938 939 940 941
ifdef CONFIG_SHADOW_CALL_STACK
CC_FLAGS_SCS	:= -fsanitize=shadow-call-stack
KBUILD_CFLAGS	+= $(CC_FLAGS_SCS)
export CC_FLAGS_SCS
endif

942 943
ifdef CONFIG_LTO_CLANG
ifdef CONFIG_LTO_CLANG_THIN
944
CC_FLAGS_LTO	:= -flto=thin -fsplit-lto-unit
945
KBUILD_LDFLAGS	+= --thinlto-cache-dir=$(extmod_prefix).thinlto-cache
946
else
947
CC_FLAGS_LTO	:= -flto
948 949
endif
CC_FLAGS_LTO	+= -fvisibility=hidden
Sami Tolvanen's avatar
Sami Tolvanen committed
950 951 952

# Limit inlining across translation units to reduce binary size
KBUILD_LDFLAGS += -mllvm -import-instr-limit=5
953

954 955
# Check for frame size exceeding threshold during prolog/epilog insertion
# when using lld < 13.0.0.
956
ifneq ($(CONFIG_FRAME_WARN),0)
957
ifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 130000; echo $$?),0)
958 959
KBUILD_LDFLAGS	+= -plugin-opt=-warn-stack-size=$(CONFIG_FRAME_WARN)
endif
960
endif
961
endif
962 963

ifdef CONFIG_LTO
964 965
KBUILD_CFLAGS	+= -fno-lto $(CC_FLAGS_LTO)
KBUILD_AFLAGS	+= -fno-lto
966 967 968
export CC_FLAGS_LTO
endif

Sami Tolvanen's avatar
Sami Tolvanen committed
969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985
ifdef CONFIG_CFI_CLANG
CC_FLAGS_CFI	:= -fsanitize=cfi \
		   -fsanitize-cfi-cross-dso \
		   -fno-sanitize-cfi-canonical-jump-tables \
		   -fno-sanitize-trap=cfi \
		   -fno-sanitize-blacklist

ifdef CONFIG_CFI_PERMISSIVE
CC_FLAGS_CFI	+= -fsanitize-recover=cfi
endif

# If LTO flags are filtered out, we must also filter out CFI.
CC_FLAGS_LTO	+= $(CC_FLAGS_CFI)
KBUILD_CFLAGS	+= $(CC_FLAGS_CFI)
export CC_FLAGS_CFI
endif

986 987
ifdef CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B
KBUILD_CFLAGS += -falign-functions=64
988 989
endif

990
# arch Makefile may override CC so keep this after arch Makefile is included
Masahiro Yamada's avatar
Masahiro Yamada committed
991
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
992

Linus Torvalds's avatar
Linus Torvalds committed
993
# warn about C99 declaration after statement
994
KBUILD_CFLAGS += -Wdeclaration-after-statement
Linus Torvalds's avatar
Linus Torvalds committed
995

996
# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
997
KBUILD_CFLAGS += -Wvla
998

999
# disable pointer signed / unsigned warnings in gcc 4.0
1000
KBUILD_CFLAGS += -Wno-pointer-sign
Linus Torvalds's avatar
Linus Torvalds committed
1001

1002 1003 1004
# disable stringop warnings in gcc 8+
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)

1005 1006
# 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)
1007
KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds)
1008
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow)
1009

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

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

1016
# disable invalid "can't wrap" optimizations for signed / pointers
1017
KBUILD_CFLAGS	+= -fno-strict-overflow
1018

1019
# Make sure -fstack-check isn't enabled (like gentoo apparently did)
1020
KBUILD_CFLAGS  += -fno-stack-check
1021

1022 1023 1024
# conserve stack if available
KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)

1025
# Prohibit date/time macros, which would make the build non-deterministic
1026
KBUILD_CFLAGS   += -Werror=date-time
1027

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

1031 1032 1033
# Require designated initializers for all marked structures
KBUILD_CFLAGS   += $(call cc-option,-Werror=designated-init)

1034
# change __FILE__ to the relative path from the srctree
1035
KBUILD_CPPFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
1036

1037 1038 1039 1040 1041 1042 1043 1044 1045
# 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))
1046

1047 1048 1049
# 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.
1050

1051 1052 1053 1054
# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
KBUILD_CPPFLAGS += $(KCPPFLAGS)
KBUILD_AFLAGS   += $(KAFLAGS)
KBUILD_CFLAGS   += $(KCFLAGS)
1055

1056 1057
KBUILD_LDFLAGS_MODULE += --build-id=sha1
LDFLAGS_vmlinux += --build-id=sha1
Roland McGrath's avatar
Roland McGrath committed
1058

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

1063
ifeq ($(CONFIG_RELR),y)
1064
LDFLAGS_vmlinux	+= --pack-dyn-relocs=relr --use-android-relr-tags
1065 1066
endif

1067 1068 1069 1070 1071 1072
# 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

1073
# Align the bit size of userspace programs with the kernel
1074 1075
KBUILD_USERCFLAGS  += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
1076

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

1080 1081 1082
# insure the checker run with the right endianness
CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)

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

Linus Torvalds's avatar
Linus Torvalds committed
1086
# Default kernel image to build when no specific target is given.
1087
# KBUILD_IMAGE may be overruled on the command line or
Linus Torvalds's avatar
Linus Torvalds committed
1088 1089 1090 1091 1092 1093 1094 1095 1096 1097
# 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

1098 1099 1100 1101 1102 1103 1104
#
# 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)

Linus Torvalds's avatar
Linus Torvalds committed
1105 1106 1107
#
# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
# relocations required by build roots.  This is not defined in the
1108
# makefile but the argument can be passed to make if needed.
Linus Torvalds's avatar
Linus Torvalds committed
1109 1110
#

1111
MODLIB	= $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
Linus Torvalds's avatar
Linus Torvalds committed
1112 1113
export MODLIB

1114
PHONY += prepare0
1115

1116
export extmod_prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)
1117 1118
export MODORDER := $(extmod_prefix)modules.order
export MODULES_NSDEPS := $(extmod_prefix)modules.nsdeps
1119

Linus Torvalds's avatar
Linus Torvalds committed
1120
ifeq ($(KBUILD_EXTMOD),)
1121
core-y		+= kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
Linus Torvalds's avatar
Linus Torvalds committed
1122

1123
vmlinux-dirs	:= $(patsubst %/,%,$(filter %/, \
Linus Torvalds's avatar
Linus Torvalds committed
1124
		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
1125
		     $(libs-y) $(libs-m)))
Linus Torvalds's avatar
Linus Torvalds committed
1126

1127
vmlinux-alldirs	:= $(sort $(vmlinux-dirs) Documentation \
1128
		     $(patsubst %/,%,$(filter %/, $(core-) \
1129
			$(drivers-) $(libs-))))
Linus Torvalds's avatar
Linus Torvalds committed
1130

1131 1132 1133
subdir-modorder := $(addsuffix modules.order,$(filter %/, \
			$(core-y) $(core-m) $(libs-y) $(libs-m) \
			$(drivers-y) $(drivers-m)))
Linus Torvalds's avatar
Linus Torvalds committed
1134

1135
build-dirs	:= $(vmlinux-dirs)
1136
clean-dirs	:= $(vmlinux-alldirs)
1137

1138 1139 1140
# 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)))
1141
ifdef CONFIG_MODULES
1142 1143
KBUILD_VMLINUX_OBJS += $(patsubst %/, %/lib.a, $(filter %/, $(libs-y)))
KBUILD_VMLINUX_LIBS := $(filter-out %/, $(libs-y))
1144
else
1145
KBUILD_VMLINUX_LIBS := $(patsubst %/,%/lib.a, $(libs-y))
1146
endif
1147
KBUILD_VMLINUX_OBJS += $(patsubst %/,%/built-in.a, $(drivers-y))
Linus Torvalds's avatar
Linus Torvalds committed
1148

1149
export KBUILD_VMLINUX_OBJS KBUILD_VMLINUX_LIBS
1150
export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
1151
# used by scripts/Makefile.package
1152
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
1153

1154
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
Linus Torvalds's avatar
Linus Torvalds committed
1155

1156 1157
# Recurse until adjust_autoksyms.sh is satisfied
PHONY += autoksyms_recursive
1158
ifdef CONFIG_TRIM_UNUSED_KSYMS
1159 1160 1161
# 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)
1162 1163 1164 1165 1166
KBUILD_MODULES := 1

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

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

1171 1172 1173 1174
quiet_cmd_autoksyms_h = GEN     $@
      cmd_autoksyms_h = mkdir -p $(dir $@); \
			$(CONFIG_SHELL) $(srctree)/scripts/gen_autoksyms.sh $@

1175
$(autoksyms_h):
1176
	$(call cmd,autoksyms_h)
1177

1178 1179 1180
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)

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

1185
vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
1186
	+$(call if_changed_dep,link-vmlinux)
1187

1188 1189
targets := vmlinux

1190
# The actual objects are generated when descending,
Linus Torvalds's avatar
Linus Torvalds committed
1191
# make sure no implicit rule kicks in
1192
$(sort $(vmlinux-deps) $(subdir-modorder)): descend ;
Linus Torvalds's avatar
Linus Torvalds committed
1193

1194
filechk_kernel.release = \
1195 1196
	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"

1197
# Store (new) KERNELRELEASE string in include/config/kernel.release
1198
include/config/kernel.release: FORCE
1199
	$(call filechk,kernel.release)
1200

1201 1202 1203 1204
# Additional helpers built in scripts/
# Carefully list dependencies so we do not try to build scripts twice
# in parallel
PHONY += scripts
1205
scripts: scripts_basic scripts_dtc
1206
	$(Q)$(MAKE) $(build)=$(@)
1207

Linus Torvalds's avatar
Linus Torvalds committed
1208
# Things we need to do before we recursively start building the kernel
1209 1210 1211 1212
# 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.
Linus Torvalds's avatar
Linus Torvalds committed
1213

1214
PHONY += prepare archprepare
1215

1216
archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
1217
	asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h \
1218
	include/generated/autoconf.h remove-stale-files
1219

1220
prepare0: archprepare
1221
	$(Q)$(MAKE) $(build)=scripts/mod
1222
	$(Q)$(MAKE) $(build)=.
1223

Linus Torvalds's avatar
Linus Torvalds committed
1224
# All the preparing..
1225
prepare: prepare0
1226

1227 1228 1229 1230
PHONY += remove-stale-files
remove-stale-files:
	$(Q)$(srctree)/scripts/remove-stale-files

1231
# Support for using generic headers in asm-generic
1232 1233
asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj

1234 1235
PHONY += asm-generic uapi-asm-generic
asm-generic: uapi-asm-generic
1236 1237
	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm \
	generic=include/asm-generic
1238
uapi-asm-generic:
1239 1240
	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \
	generic=include/uapi/asm-generic
1241

Linus Torvalds's avatar
Linus Torvalds committed
1242 1243 1244 1245 1246 1247 1248
# 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
Sam Ravnborg's avatar
Sam Ravnborg committed
1249 1250 1251 1252 1253
define filechk_utsrelease.h
	if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
	  echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2;    \
	  exit 1;                                                         \
	fi;                                                               \
1254
	echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
Sam Ravnborg's avatar
Sam Ravnborg committed
1255
endef
Linus Torvalds's avatar
Linus Torvalds committed
1256 1257

define filechk_version.h
Sasha Levin's avatar
Sasha Levin committed
1258 1259
	if [ $(SUBLEVEL) -gt 255 ]; then                                 \
		echo \#define LINUX_VERSION_CODE $(shell                 \
1260
		expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + 255); \
Sasha Levin's avatar
Sasha Levin committed
1261 1262
	else                                                             \
		echo \#define LINUX_VERSION_CODE $(shell                 \
1263
		expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
Sasha Levin's avatar
Sasha Levin committed
1264 1265
	fi;                                                              \
	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) +  \
1266 1267 1268 1269
	((c) > 255 ? 255 : (c)))';                                       \
	echo \#define LINUX_VERSION_MAJOR $(VERSION);                    \
	echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL);            \
	echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL)
Linus Torvalds's avatar
Linus Torvalds committed
1270 1271
endef

1272 1273
$(version_h): PATCHLEVEL := $(if $(PATCHLEVEL), $(PATCHLEVEL), 0)
$(version_h): SUBLEVEL := $(if $(SUBLEVEL), $(SUBLEVEL), 0)
1274
$(version_h): FORCE
Linus Torvalds's avatar
Linus Torvalds committed
1275 1276
	$(call filechk,version.h)

1277
include/generated/utsrelease.h: include/config/kernel.release FORCE
Sam Ravnborg's avatar
Sam Ravnborg committed
1278 1279
	$(call filechk,utsrelease.h)

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

1285 1286 1287
# ---------------------------------------------------------------------------
# Kernel headers

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

1291 1292 1293 1294 1295
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)
1296

1297
PHONY += headers_install
1298 1299
headers_install: headers
	$(call cmd,headers_install)
1300

1301
PHONY += archheaders archscripts
1302

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

1305 1306
PHONY += headers
headers: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
1307
	$(if $(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/Kbuild),, \
1308
	  $(error Headers not exportable for the $(SRCARCH) architecture))
1309 1310
	$(Q)$(MAKE) $(hdr-inst)=include/uapi
	$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi
1311

1312
# Deprecated. It is no-op now.
1313
PHONY += headers_check
1314
headers_check:
1315 1316 1317 1318 1319
	@echo >&2 "=================== WARNING ==================="
	@echo >&2 "Since Linux 5.5, 'make headers_check' is no-op,"
	@echo >&2 "and will be removed after Linux 5.15 release."
	@echo >&2 "Please remove headers_check from your scripts."
	@echo >&2 "==============================================="
1320

1321
ifdef CONFIG_HEADERS_INSTALL
1322
prepare: headers
1323
endif
1324

1325 1326 1327 1328
PHONY += scripts_unifdef
scripts_unifdef: scripts_basic
	$(Q)$(MAKE) $(build)=scripts scripts/unifdef

1329 1330 1331 1332 1333 1334 1335 1336 1337 1338
# ---------------------------------------------------------------------------
# Install

# Many distributions have the custom install script, /sbin/installkernel.
# If DKMS is installed, 'make install' will eventually recuses back
# to the this Makefile to build and install external modules.
# Cancel sub_make_done so that options such as M=, V=, etc. are parsed.

install: sub_make_done :=

1339 1340 1341
# ---------------------------------------------------------------------------
# Tools

1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362
ifdef CONFIG_STACK_VALIDATION
prepare: tools/objtool
endif

ifdef CONFIG_BPF
ifdef CONFIG_DEBUG_INFO_BTF
prepare: tools/bpf/resolve_btfids
endif
endif

PHONY += resolve_btfids_clean

resolve_btfids_O = $(abspath $(objtree))/tools/bpf/resolve_btfids

# tools/bpf/resolve_btfids directory might not exist
# in output directory, skip its clean in that case
resolve_btfids_clean:
ifneq ($(wildcard $(resolve_btfids_O)),)
	$(Q)$(MAKE) -sC $(srctree)/tools/bpf/resolve_btfids O=$(resolve_btfids_O) clean
endif

1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375
# Clear a bunch of variables before executing the submake
ifeq ($(quiet),silent_)
tools_silent=s
endif

tools/: FORCE
	$(Q)mkdir -p $(objtree)/tools
	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/

tools/%: FORCE
	$(Q)mkdir -p $(objtree)/tools
	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $*

1376 1377 1378 1379 1380
# ---------------------------------------------------------------------------
# Kernel selftest

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

1383 1384
kselftest-%: FORCE
	$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests $*
1385

1386 1387 1388
PHONY += kselftest-merge
kselftest-merge:
	$(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!))
1389 1390
	$(Q)find $(srctree)/tools/testing/selftests -name config | \
		xargs $(srctree)/scripts/kconfig/merge_config.sh -m $(objtree)/.config
1391
	$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
1392

1393 1394 1395 1396 1397 1398 1399 1400 1401
# ---------------------------------------------------------------------------
# Devicetree files

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

ifneq ($(dtstree),)

1402
%.dtb: include/config/kernel.release scripts_dtc
1403 1404
	$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@

1405 1406 1407
%.dtbo: include/config/kernel.release scripts_dtc
	$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@

1408
PHONY += dtbs dtbs_install dtbs_check
1409
dtbs: include/config/kernel.release scripts_dtc
1410 1411
	$(Q)$(MAKE) $(build)=$(dtstree)

1412
ifneq ($(filter dtbs_check, $(MAKECMDGOALS)),)
1413
export CHECK_DTBS=y
1414 1415 1416 1417
dtbs: dt_binding_check
endif

dtbs_check: dtbs
1418

1419
dtbs_install:
1420
	$(Q)$(MAKE) $(dtbinst)=$(dtstree) dst=$(INSTALL_DTBS_PATH)
1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431

ifdef CONFIG_OF_EARLY_FLATTREE
all: dtbs
endif

endif

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

1432 1433 1434 1435
ifneq ($(filter dt_binding_check, $(MAKECMDGOALS)),)
export CHECK_DT_BINDING=y
endif

1436
PHONY += dt_binding_check
1437 1438 1439
dt_binding_check: scripts_dtc
	$(Q)$(MAKE) $(build)=Documentation/devicetree/bindings

Linus Torvalds's avatar
Linus Torvalds committed
1440 1441 1442 1443 1444
# ---------------------------------------------------------------------------
# Modules

ifdef CONFIG_MODULES

1445
# By default, build modules as well
Linus Torvalds's avatar
Linus Torvalds committed
1446

1447
all: modules
Linus Torvalds's avatar
Linus Torvalds committed
1448

1449 1450 1451 1452 1453 1454 1455
# When we're building modules with modversions, we need to consider
# the built-in objects during the descend as well, in order to
# make sure the checksums are up to date before we record them.
ifdef CONFIG_MODVERSIONS
  KBUILD_BUILTIN := 1
endif

1456
# Build modules
Tejun Heo's avatar
Tejun Heo committed
1457
#
1458 1459 1460
# A module can be listed more than once in obj-m resulting in
# duplicate lines in modules.order files.  Those are removed
# using awk while concatenating to the final file.
Linus Torvalds's avatar
Linus Torvalds committed
1461

1462
PHONY += modules
1463
modules: $(if $(KBUILD_BUILTIN),vmlinux) modules_check modules_prepare
Linus Torvalds's avatar
Linus Torvalds committed
1464

1465 1466 1467 1468 1469 1470
cmd_modules_order = $(AWK) '!x[$$0]++' $(real-prereqs) > $@

modules.order: $(subdir-modorder) FORCE
	$(call if_changed,modules_order)

targets += modules.order
1471

Linus Torvalds's avatar
Linus Torvalds committed
1472
# Target to prepare building external modules
1473
PHONY += modules_prepare
1474
modules_prepare: prepare
1475
	$(Q)$(MAKE) $(build)=scripts scripts/module.lds
Linus Torvalds's avatar
Linus Torvalds committed
1476

1477 1478 1479 1480 1481 1482
export modules_sign_only :=

ifeq ($(CONFIG_MODULE_SIG),y)
PHONY += modules_sign
modules_sign: modules_install
	@:
Linus Torvalds's avatar
Linus Torvalds committed
1483

1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496
# modules_sign is a subset of modules_install.
# 'make modules_install modules_sign' is equivalent to 'make modules_install'.
ifeq ($(filter modules_install,$(MAKECMDGOALS)),)
modules_sign_only := y
endif
endif

modinst_pre :=
ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
modinst_pre := __modinst_pre
endif

modules_install: $(modinst_pre)
1497 1498
PHONY += __modinst_pre
__modinst_pre:
Linus Torvalds's avatar
Linus Torvalds committed
1499 1500 1501
	@rm -rf $(MODLIB)/kernel
	@rm -f $(MODLIB)/source
	@mkdir -p $(MODLIB)/kernel
1502
	@ln -s $(abspath $(srctree)) $(MODLIB)/source
Linus Torvalds's avatar
Linus Torvalds committed
1503 1504
	@if [ ! $(objtree) -ef  $(MODLIB)/build ]; then \
		rm -f $(MODLIB)/build ; \
1505
		ln -s $(CURDIR) $(MODLIB)/build ; \
Linus Torvalds's avatar
Linus Torvalds committed
1506
	fi
1507
	@sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order
1508 1509
	@cp -f modules.builtin $(MODLIB)/
	@cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
Linus Torvalds's avatar
Linus Torvalds committed
1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520

endif # CONFIG_MODULES

###
# Cleaning is done on three levels.
# make clean     Delete most generated files
#                Leave enough to build external modules
# make mrproper  Delete the current configuration, and all generated files
# make distclean Remove editor backup files, patch leftover files and the like

# Directories & files removed with 'make clean'
1521
CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \
1522
	       modules.builtin modules.builtin.modinfo modules.nsdeps \
1523
	       compile_commands.json .thinlto-cache
Linus Torvalds's avatar
Linus Torvalds committed
1524 1525

# Directories & files removed with 'make mrproper'
1526
MRPROPER_FILES += include/config include/generated          \
1527
		  arch/$(SRCARCH)/include/generated .tmp_objdiff \
1528 1529
		  debian snap tar-install \
		  .config .config.old .version \
1530
		  Module.symvers \
1531 1532 1533
		  certs/signing_key.pem certs/signing_key.x509 \
		  certs/x509.genkey \
		  vmlinux-gdb.py \
1534
		  *.spec
Linus Torvalds's avatar
Linus Torvalds committed
1535 1536 1537 1538 1539

# clean - Delete most, but leave enough to build external modules
#
clean: rm-files := $(CLEAN_FILES)

1540
PHONY += archclean vmlinuxclean
Linus Torvalds's avatar
Linus Torvalds committed
1541

1542 1543
vmlinuxclean:
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean
1544
	$(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean)
1545

1546
clean: archclean vmlinuxclean resolve_btfids_clean
Linus Torvalds's avatar
Linus Torvalds committed
1547 1548 1549 1550

# mrproper - Delete all generated files, including .config
#
mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1551
mrproper-dirs      := $(addprefix _mrproper_,scripts)
Linus Torvalds's avatar
Linus Torvalds committed
1552

1553
PHONY += $(mrproper-dirs) mrproper
Linus Torvalds's avatar
Linus Torvalds committed
1554 1555 1556
$(mrproper-dirs):
	$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)

1557
mrproper: clean $(mrproper-dirs)
Linus Torvalds's avatar
Linus Torvalds committed
1558 1559 1560 1561
	$(call cmd,rmfiles)

# distclean
#
1562
PHONY += distclean
Linus Torvalds's avatar
Linus Torvalds committed
1563 1564

distclean: mrproper
1565
	@find . $(RCS_FIND_IGNORE) \
1566
		\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
1567
		-o -name '*.bak' -o -name '#*#' -o -name '*%' \
1568 1569
		-o -name 'core' -o -name tags -o -name TAGS -o -name 'cscope*' \
		-o -name GPATH -o -name GRTAGS -o -name GSYMS -o -name GTAGS \) \
Linus Torvalds's avatar
Linus Torvalds committed
1570 1571 1572 1573 1574 1575
		-type f -print | xargs rm -f


# Packaging of the kernel to various formats
# ---------------------------------------------------------------------------

1576
%src-pkg: FORCE
1577
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
1578
%pkg: include/config/kernel.release FORCE
1579
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
Linus Torvalds's avatar
Linus Torvalds committed
1580 1581 1582 1583

# Brief documentation of the typical targets used
# ---------------------------------------------------------------------------

1584
boards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig)
1585
boards := $(sort $(notdir $(boards)))
1586 1587
board-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig))
board-dirs := $(sort $(notdir $(board-dirs:/=)))
Linus Torvalds's avatar
Linus Torvalds committed
1588

1589
PHONY += help
Linus Torvalds's avatar
Linus Torvalds committed
1590 1591
help:
	@echo  'Cleaning targets:'
1592
	@echo  '  clean		  - Remove most generated files but keep the config and'
1593
	@echo  '                    enough build support to build external modules'
1594
	@echo  '  mrproper	  - Remove all generated files + config + various backup files'
1595
	@echo  '  distclean	  - mrproper + remove editor backup and patch files'
Linus Torvalds's avatar
Linus Torvalds committed
1596 1597 1598 1599 1600 1601 1602 1603
	@echo  ''
	@echo  'Configuration targets:'
	@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
	@echo  ''
	@echo  'Other generic targets:'
	@echo  '  all		  - Build all targets marked with [*]'
	@echo  '* vmlinux	  - Build the bare kernel'
	@echo  '* modules	  - Build all modules'
1604
	@echo  '  modules_install - Install all modules to INSTALL_MOD_PATH (default: /)'
Linus Torvalds's avatar
Linus Torvalds committed
1605
	@echo  '  dir/            - Build all files in dir and below'
1606
	@echo  '  dir/file.[ois]  - Build specified target only'
1607 1608
	@echo  '  dir/file.ll     - Build the LLVM assembly file'
	@echo  '                    (requires compiler support for LLVM assembly generation)'
1609 1610
	@echo  '  dir/file.lst    - Build specified mixed source/assembly target only'
	@echo  '                    (requires a recent binutils and recent build (System.map))'
1611
	@echo  '  dir/file.ko     - Build module including final link'
1612
	@echo  '  modules_prepare - Set up for building external modules'
Linus Torvalds's avatar
Linus Torvalds committed
1613 1614
	@echo  '  tags/TAGS	  - Generate tags file for editors'
	@echo  '  cscope	  - Generate cscope index'
1615
	@echo  '  gtags           - Generate GNU GLOBAL index'
1616 1617 1618
	@echo  '  kernelrelease	  - Output the release version string (use with make -s)'
	@echo  '  kernelversion	  - Output the version stored in Makefile (use with make -s)'
	@echo  '  image_name	  - Output the image name (use with make -s)'
1619
	@echo  '  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
1620
	 echo  '                    (default: $(INSTALL_HDR_PATH))'; \
1621
	 echo  ''
1622
	@echo  'Static analysers:'
Linus Torvalds's avatar
Linus Torvalds committed
1623
	@echo  '  checkstack      - Generate a list of stack hogs'
1624
	@echo  '  versioncheck    - Sanity check on version.h usage'
1625
	@echo  '  includecheck    - Check for duplicate included header files'
1626
	@echo  '  export_report   - List the usages of all exported symbols'
1627
	@echo  '  headerdep       - Detect inclusion cycles in headers'
1628
	@echo  '  coccicheck      - Check with Coccinelle'
1629 1630
	@echo  '  clang-analyzer  - Check with clang static analyzer'
	@echo  '  clang-tidy      - Check with clang-tidy'
1631
	@echo  ''
1632 1633 1634
	@echo  'Tools:'
	@echo  '  nsdeps          - Generate missing symbol namespace dependencies'
	@echo  ''
1635
	@echo  'Kernel selftest:'
1636 1637 1638 1639 1640 1641 1642 1643 1644
	@echo  '  kselftest         - Build and run kernel selftest'
	@echo  '                      Build, install, and boot kernel before'
	@echo  '                      running kselftest on it'
	@echo  '                      Run as root for full coverage'
	@echo  '  kselftest-all     - Build kernel selftest'
	@echo  '  kselftest-install - Build and install kernel selftest'
	@echo  '  kselftest-clean   - Remove all generated kselftest files'
	@echo  '  kselftest-merge   - Merge all the config dependencies of'
	@echo  '		      kselftest to existing .config.'
1645
	@echo  ''
1646 1647
	@$(if $(dtstree), \
		echo 'Devicetree:'; \
1648 1649 1650 1651
		echo '* dtbs             - Build device tree blobs for enabled boards'; \
		echo '  dtbs_install     - Install dtbs to $(INSTALL_DTBS_PATH)'; \
		echo '  dt_binding_check - Validate device tree binding documents'; \
		echo '  dtbs_check       - Validate device tree source files';\
1652 1653
		echo '')

1654 1655 1656 1657
	@echo 'Userspace tools targets:'
	@echo '  use "make tools/help"'
	@echo '  or  "cd tools; make help"'
	@echo  ''
Linus Torvalds's avatar
Linus Torvalds committed
1658
	@echo  'Kernel packaging:'
1659
	@$(MAKE) -f $(srctree)/scripts/Makefile.package help
Linus Torvalds's avatar
Linus Torvalds committed
1660 1661
	@echo  ''
	@echo  'Documentation targets:'
1662
	@$(MAKE) -f $(srctree)/Documentation/Makefile dochelp
Linus Torvalds's avatar
Linus Torvalds committed
1663
	@echo  ''
1664
	@echo  'Architecture specific targets ($(SRCARCH)):'
Linus Torvalds's avatar
Linus Torvalds committed
1665
	@$(if $(archhelp),$(archhelp),\
1666
		echo '  No architecture specific help defined for $(SRCARCH)')
Linus Torvalds's avatar
Linus Torvalds committed
1667 1668 1669
	@echo  ''
	@$(if $(boards), \
		$(foreach b, $(boards), \
1670
		printf "  %-27s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
Linus Torvalds's avatar
Linus Torvalds committed
1671
		echo '')
1672 1673 1674 1675 1676
	@$(if $(board-dirs), \
		$(foreach b, $(board-dirs), \
		printf "  %-16s - Show %s-specific targets\\n" help-$(b) $(b);) \
		printf "  %-16s - Show all of the above\\n" help-boards; \
		echo '')
Linus Torvalds's avatar
Linus Torvalds committed
1677 1678

	@echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
1679
	@echo  '  make V=2   [targets] 2 => give reason for rebuild of target'
Linus Torvalds's avatar
Linus Torvalds committed
1680
	@echo  '  make O=dir [targets] Locate all output files in "dir", including .config'
1681 1682
	@echo  '  make C=1   [targets] Check re-compiled c source with $$CHECK'
	@echo  '                       (sparse by default)'
1683
	@echo  '  make C=2   [targets] Force check of all c source with $$CHECK'
1684
	@echo  '  make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
1685
	@echo  '  make W=n   [targets] Enable extra build checks, n=1,2,3 where'
1686 1687 1688
	@echo  '		1: warnings which may be relevant and do not occur too often'
	@echo  '		2: warnings which occur quite often but may still be relevant'
	@echo  '		3: more obscure warnings, can most likely be ignored'
1689
	@echo  '		Multiple levels can be combined with W=12 or W=123'
Linus Torvalds's avatar
Linus Torvalds committed
1690 1691 1692 1693 1694
	@echo  ''
	@echo  'Execute "make" or "make all" to build all targets marked with [*] '
	@echo  'For further info see the ./README file'


1695 1696 1697 1698
help-board-dirs := $(addprefix help-,$(board-dirs))

help-boards: $(help-board-dirs)

1699
boards-per-dir = $(sort $(notdir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/$*/*_defconfig)))
1700 1701 1702 1703 1704 1705 1706 1707 1708

$(help-board-dirs): help-%:
	@echo  'Architecture specific targets ($(SRCARCH) $*):'
	@$(if $(boards-per-dir), \
		$(foreach b, $(boards-per-dir), \
		printf "  %-24s - Build for %s\\n" $*/$(b) $(subst _defconfig,,$(b));) \
		echo '')


Linus Torvalds's avatar
Linus Torvalds committed
1709 1710
# Documentation targets
# ---------------------------------------------------------------------------
1711 1712
DOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
	       linkcheckdocs dochelp refcheckdocs
1713
PHONY += $(DOC_TARGETS)
1714
$(DOC_TARGETS):
1715
	$(Q)$(MAKE) $(build)=Documentation $@
Linus Torvalds's avatar
Linus Torvalds committed
1716

1717 1718 1719 1720
# Misc
# ---------------------------------------------------------------------------

PHONY += scripts_gdb
1721
scripts_gdb: prepare0
1722
	$(Q)$(MAKE) $(build)=scripts/gdb
1723
	$(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py)
1724 1725 1726 1727 1728

ifdef CONFIG_GDB_SCRIPTS
all: scripts_gdb
endif

Linus Torvalds's avatar
Linus Torvalds committed
1729 1730 1731 1732 1733 1734 1735
else # KBUILD_EXTMOD

###
# External module support.
# When building external modules the kernel used as basis is considered
# read-only, and no consistency checks are made and the make
# system is not used on the basis kernel. If updates are required
1736
# in the basis kernel ordinary make commands (without M=...) must be used.
Linus Torvalds's avatar
Linus Torvalds committed
1737

1738 1739
# We are always building only modules.
KBUILD_BUILTIN :=
Linus Torvalds's avatar
Linus Torvalds committed
1740 1741
KBUILD_MODULES := 1

1742
build-dirs := $(KBUILD_EXTMOD)
1743 1744 1745
$(MODORDER): descend
	@:

1746
compile_commands.json: $(extmod_prefix)compile_commands.json
1747 1748
PHONY += compile_commands.json

1749
clean-dirs := $(KBUILD_EXTMOD)
1750
clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers $(KBUILD_EXTMOD)/modules.nsdeps \
1751
	$(KBUILD_EXTMOD)/compile_commands.json $(KBUILD_EXTMOD)/.thinlto-cache
Linus Torvalds's avatar
Linus Torvalds committed
1752

1753
PHONY += help
Linus Torvalds's avatar
Linus Torvalds committed
1754 1755 1756 1757 1758 1759 1760 1761
help:
	@echo  '  Building external modules.'
	@echo  '  Syntax: make -C path/to/kernel/src M=$$PWD target'
	@echo  ''
	@echo  '  modules         - default target, build the module(s)'
	@echo  '  modules_install - install the module'
	@echo  '  clean           - remove generated files in module directory only'
	@echo  ''
1762

1763 1764 1765
# no-op for external module builds
PHONY += prepare modules_prepare

Linus Torvalds's avatar
Linus Torvalds committed
1766 1767
endif # KBUILD_EXTMOD

1768 1769 1770 1771 1772 1773 1774
# ---------------------------------------------------------------------------
# Modules

PHONY += modules modules_install

ifdef CONFIG_MODULES

1775
modules: modules_check
1776 1777
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost

1778 1779 1780 1781
PHONY += modules_check
modules_check: $(MODORDER)
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh $<

1782
quiet_cmd_depmod = DEPMOD  $(MODLIB)
1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804
      cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \
                   $(KERNELRELEASE)

modules_install:
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
	$(call cmd,depmod)

else # CONFIG_MODULES

# Modules not configured
# ---------------------------------------------------------------------------

modules modules_install:
	@echo >&2 '***'
	@echo >&2 '*** The present kernel configuration has modules disabled.'
	@echo >&2 '*** To use the module feature, please run "make menuconfig" etc.'
	@echo >&2 '*** to enable CONFIG_MODULES.'
	@echo >&2 '***'
	@exit 1

endif # CONFIG_MODULES

1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834
# Single targets
# ---------------------------------------------------------------------------
# To build individual files in subdirectories, you can do like this:
#
#   make foo/bar/baz.s
#
# The supported suffixes for single-target are listed in 'single-targets'
#
# To build only under specific subdirectories, you can do like this:
#
#   make foo/bar/baz/

ifdef single-build

# .ko is special because modpost is needed
single-ko := $(sort $(filter %.ko, $(MAKECMDGOALS)))
single-no-ko := $(sort $(patsubst %.ko,%.mod, $(MAKECMDGOALS)))

$(single-ko): single_modpost
	@:
$(single-no-ko): descend
	@:

ifeq ($(KBUILD_EXTMOD),)
# For the single build of in-tree modules, use a temporary file to avoid
# the situation of modules_install installing an invalid modules.order.
MODORDER := .modules.tmp
endif

PHONY += single_modpost
1835
single_modpost: $(single-no-ko) modules_prepare
1836
	$(Q){ $(foreach m, $(single-ko), echo $(extmod_prefix)$m;) } > $(MODORDER)
1837 1838 1839 1840
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost

KBUILD_MODULES := 1

1841
export KBUILD_SINGLE_TARGETS := $(addprefix $(extmod_prefix), $(single-no-ko))
1842 1843 1844 1845 1846 1847 1848

# trim unrelated directories
build-dirs := $(foreach d, $(build-dirs), \
			$(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d)))

endif

1849 1850 1851 1852
ifndef CONFIG_MODULES
KBUILD_MODULES :=
endif

1853 1854 1855 1856 1857 1858 1859 1860
# Handle descending into subdirectories listed in $(build-dirs)
# Preset locale variables to speed up the build process. Limit locale
# tweaks to this spot to avoid wrong language settings when running
# make menuconfig etc.
# Error messages still appears in the original language
PHONY += descend $(build-dirs)
descend: $(build-dirs)
$(build-dirs): prepare
1861
	$(Q)$(MAKE) $(build)=$@ \
1862
	single-build=$(if $(filter-out $@/, $(filter $@/%, $(KBUILD_SINGLE_TARGETS))),1) \
1863
	need-builtin=1 need-modorder=1
1864

1865 1866 1867 1868 1869
clean-dirs := $(addprefix _clean_, $(clean-dirs))
PHONY += $(clean-dirs) clean
$(clean-dirs):
	$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)

1870 1871
clean: $(clean-dirs)
	$(call cmd,rmfiles)
1872
	@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1873
		\( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \
1874
		-o -name '*.ko.*' \
1875
		-o -name '*.dtb' -o -name '*.dtbo' -o -name '*.dtb.S' -o -name '*.dt.yaml' \
1876
		-o -name '*.dwo' -o -name '*.lst' \
1877
		-o -name '*.su' -o -name '*.mod' \
1878
		-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
1879
		-o -name '*.lex.c' -o -name '*.tab.[ch]' \
1880
		-o -name '*.asn1.[ch]' \
1881
		-o -name '*.symtypes' -o -name 'modules.order' \
1882
		-o -name '.tmp_*.o.*' \
Emese Revfy's avatar
Emese Revfy committed
1883
		-o -name '*.c.[012]*.*' \
1884
		-o -name '*.ll' \
1885 1886
		-o -name '*.gcno' \
		-o -name '*.*.symversions' \) -type f -print | xargs rm -f
1887

Linus Torvalds's avatar
Linus Torvalds committed
1888 1889
# Generate tags for editors
# ---------------------------------------------------------------------------
1890
quiet_cmd_tags = GEN     $@
1891
      cmd_tags = $(BASH) $(srctree)/scripts/tags.sh $@
Linus Torvalds's avatar
Linus Torvalds committed
1892

1893
tags TAGS cscope gtags: FORCE
Linus Torvalds's avatar
Linus Torvalds committed
1894 1895
	$(call cmd,tags)

1896 1897 1898 1899
# Script to generate missing namespace dependencies
# ---------------------------------------------------------------------------

PHONY += nsdeps
1900
nsdeps: export KBUILD_NSDEPS=1
1901
nsdeps: modules
1902
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/nsdeps
1903

1904 1905 1906 1907 1908 1909
# Clang Tooling
# ---------------------------------------------------------------------------

quiet_cmd_gen_compile_commands = GEN     $@
      cmd_gen_compile_commands = $(PYTHON3) $< -a $(AR) -o $@ $(filter-out $<, $(real-prereqs))

1910
$(extmod_prefix)compile_commands.json: scripts/clang-tools/gen_compile_commands.py \
1911 1912 1913 1914
	$(if $(KBUILD_EXTMOD),,$(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)) \
	$(if $(CONFIG_MODULES), $(MODORDER)) FORCE
	$(call if_changed,gen_compile_commands)

1915
targets += $(extmod_prefix)compile_commands.json
1916

1917 1918 1919 1920 1921 1922
PHONY += clang-tidy clang-analyzer

ifdef CONFIG_CC_IS_CLANG
quiet_cmd_clang_tools = CHECK   $<
      cmd_clang_tools = $(PYTHON3) $(srctree)/scripts/clang-tools/run-clang-tools.py $@ $<

1923
clang-tidy clang-analyzer: $(extmod_prefix)compile_commands.json
1924 1925 1926 1927 1928 1929 1930
	$(call cmd,clang_tools)
else
clang-tidy clang-analyzer:
	@echo "$@ requires CC=clang" >&2
	@false
endif

Linus Torvalds's avatar
Linus Torvalds committed
1931 1932 1933
# Scripts to check various things for consistency
# ---------------------------------------------------------------------------

Jacob Keller's avatar
Jacob Keller committed
1934
PHONY += includecheck versioncheck coccicheck export_report
Peter Foley's avatar
Peter Foley committed
1935

Linus Torvalds's avatar
Linus Torvalds committed
1936
includecheck:
1937
	find $(srctree)/* $(RCS_FIND_IGNORE) \
Linus Torvalds's avatar
Linus Torvalds committed
1938
		-name '*.[hcS]' -type f -print | sort \
1939
		| xargs $(PERL) -w $(srctree)/scripts/checkincludes.pl
Linus Torvalds's avatar
Linus Torvalds committed
1940 1941

versioncheck:
1942
	find $(srctree)/* $(RCS_FIND_IGNORE) \
Linus Torvalds's avatar
Linus Torvalds committed
1943
		-name '*.[hcS]' -type f -print | sort \
1944
		| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
Linus Torvalds's avatar
Linus Torvalds committed
1945

1946
coccicheck:
1947
	$(Q)$(BASH) $(srctree)/scripts/$@
1948

1949 1950 1951
export_report:
	$(PERL) $(srctree)/scripts/export_report.pl

1952
PHONY += checkstack kernelrelease kernelversion image_name
1953

1954 1955 1956 1957 1958 1959 1960 1961 1962
# UML needs a little special treatment here.  It wants to use the host
# toolchain, so needs $(SUBARCH) passed to checkstack.pl.  Everyone
# else wants $(ARCH), including people doing cross-builds, which means
# that $(SUBARCH) doesn't work here.
ifeq ($(ARCH), um)
CHECKSTACK_ARCH := $(SUBARCH)
else
CHECKSTACK_ARCH := $(ARCH)
endif
Linus Torvalds's avatar
Linus Torvalds committed
1963 1964
checkstack:
	$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
1965
	$(PERL) $(srctree)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
Linus Torvalds's avatar
Linus Torvalds committed
1966

1967 1968
kernelrelease:
	@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1969

1970
kernelversion:
1971
	@echo $(KERNELVERSION)
Linus Torvalds's avatar
Linus Torvalds committed
1972

1973 1974 1975
image_name:
	@echo $(KBUILD_IMAGE)

Linus Torvalds's avatar
Linus Torvalds committed
1976
quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
1977
      cmd_rmfiles = rm -rf $(rm-files)
Linus Torvalds's avatar
Linus Torvalds committed
1978

1979 1980
# read saved command lines for existing targets
existing-targets := $(wildcard $(sort $(targets)))
Linus Torvalds's avatar
Linus Torvalds committed
1981

1982
-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
Linus Torvalds's avatar
Linus Torvalds committed
1983

1984
endif # config-build
1985 1986
endif # mixed-build
endif # need-sub-make
Linus Torvalds's avatar
Linus Torvalds committed
1987

1988
PHONY += FORCE
Linus Torvalds's avatar
Linus Torvalds committed
1989
FORCE:
1990

1991
# Declare the contents of the PHONY variable as phony.  We keep that
1992
# information in a variable so we can use it in if_changed and friends.
1993
.PHONY: $(PHONY)