Makefile 58.9 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 = 2
Linus Torvalds's avatar
Linus Torvalds committed
4
SUBLEVEL = 0
5
EXTRAVERSION = -pf9
Linus Torvalds's avatar
Linus Torvalds committed
6
NAME = Bobtail Squid
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 17
# That's our default target when none is given on the command line
PHONY := _all
_all:

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

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

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

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

# Avoid interference with shell env settings
unexport GREP_OPTIONS

49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
# 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.
#
Linus Torvalds's avatar
Linus Torvalds committed
72 73 74
# To put more focus on warnings, be less verbose as default
# Use 'make V=1' to see the full commands

75 76
ifeq ("$(origin V)", "command line")
  KBUILD_VERBOSE = $(V)
Linus Torvalds's avatar
Linus Torvalds committed
77 78 79 80 81
endif
ifndef KBUILD_VERBOSE
  KBUILD_VERBOSE = 0
endif

82 83 84 85 86 87 88 89 90 91 92
ifeq ($(KBUILD_VERBOSE),1)
  quiet =
  Q =
else
  quiet=quiet_
  Q = @
endif

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

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

export quiet Q KBUILD_VERBOSE

99 100 101 102 103 104 105 106 107 108
# 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
109 110
# 1) O=
# Use "make O=dir/to/store/output/files/"
111
#
Linus Torvalds's avatar
Linus Torvalds committed
112
# 2) Set KBUILD_OUTPUT
113 114
# 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
115 116 117 118
#
# The O= assignment takes precedence over the KBUILD_OUTPUT environment
# variable.

119
# Do we want to change the working directory?
120 121
ifeq ("$(origin O)", "command line")
  KBUILD_OUTPUT := $(O)
Linus Torvalds's avatar
Linus Torvalds committed
122 123
endif

124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
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
142 143
endif

144
abs_srctree := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
Linus Torvalds's avatar
Linus Torvalds committed
145

146 147 148
ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
$(error source directory cannot contain spaces or colons)
endif
Linus Torvalds's avatar
Linus Torvalds committed
149

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

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

167
export abs_srctree abs_objtree
168 169
export sub_make_done := 1

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

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

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

177
# Invoke a second make in the output directory, passing relevant variables
178
sub-make:
179
	$(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
Linus Torvalds's avatar
Linus Torvalds committed
180

181
endif # need-sub-make
182
endif # sub_make_done
183

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

187 188 189 190 191
# 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

192 193 194 195 196 197 198
# 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.
#
Cao jin's avatar
Cao jin committed
199 200
# See the file "Documentation/dev-tools/sparse.rst" for more details,
# including where to get the "sparse" utility.
201 202 203 204 205 206 207 208 209 210 211 212

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

# Use make M=dir to specify directory of external module to build
# Old syntax make ... SUBDIRS=$PWD is still supported
# Setting the environment variable KBUILD_EXTMOD take precedence
ifdef SUBDIRS
213 214 215 216
  $(warning ================= WARNING ================)
  $(warning 'SUBDIRS' will be removed after Linux 5.3)
  $(warning Please use 'M=' or 'KBUILD_EXTMOD' instead)
  $(warning ==========================================)
217 218 219 220 221 222 223
  KBUILD_EXTMOD ?= $(SUBDIRS)
endif

ifeq ("$(origin M)", "command line")
  KBUILD_EXTMOD := $(M)
endif

224
ifeq ($(abs_srctree),$(abs_objtree))
225 226 227
        # building in the source tree
        srctree := .
else
228
        ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
229 230 231
                # building in a subdirectory of the source tree
                srctree := ..
        else
232
                srctree := $(abs_srctree)
233
        endif
234 235 236 237 238

	# TODO:
	# KBUILD_SRC is only used to distinguish in-tree/out-of-tree build.
	# Replace it with $(srctree) or something.
	KBUILD_SRC := $(abs_srctree)
239
endif
240 241 242

export KBUILD_CHECKSRC KBUILD_EXTMOD KBUILD_SRC

243
objtree		:= .
Linus Torvalds's avatar
Linus Torvalds committed
244 245 246
src		:= $(srctree)
obj		:= $(objtree)

247
VPATH		:= $(srctree)
Linus Torvalds's avatar
Linus Torvalds committed
248

249
export srctree objtree VPATH
Linus Torvalds's avatar
Linus Torvalds committed
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 265
			 cscope gtags TAGS tags help% %docs check% coccicheck \
			 $(version_h) headers_% archheaders archscripts \
266
			 %asm-generic kernelversion %src-pkg
267 268
no-sync-config-targets := $(no-dot-config-targets) install %install \
			   kernelrelease
269

270 271 272 273
config-targets  := 0
mixed-targets   := 0
dot-config      := 1
may-sync-config := 1
274 275 276 277 278 279 280

ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
		dot-config := 0
	endif
endif

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

ifneq ($(KBUILD_EXTMOD),)
	may-sync-config := 0
endif

291 292 293 294 295 296 297 298
ifeq ($(KBUILD_EXTMOD),)
        ifneq ($(filter config %config,$(MAKECMDGOALS)),)
                config-targets := 1
                ifneq ($(words $(MAKECMDGOALS)),1)
                        mixed-targets := 1
                endif
        endif
endif
299 300 301 302 303 304 305 306

# For "make -j clean all", "make -j mrproper defconfig all", etc.
ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),)
        ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),)
                mixed-targets := 1
        endif
endif

307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338
# install and modules_install need also be processed one by one
ifneq ($(filter install,$(MAKECMDGOALS)),)
        ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
	        mixed-targets := 1
        endif
endif

ifeq ($(mixed-targets),1)
# ===========================================================================
# We're called with mixed targets (*config and build targets).
# Handle them one by one.

PHONY += $(MAKECMDGOALS) __build_one_by_one

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

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

else

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

339
include scripts/subarch.include
Linus Torvalds's avatar
Linus Torvalds committed
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358

# 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
359
ARCH		?= $(SUBARCH)
Linus Torvalds's avatar
Linus Torvalds committed
360 361

# Architecture as present in compile.h
362 363
UTS_MACHINE 	:= $(ARCH)
SRCARCH 	:= $(ARCH)
Linus Torvalds's avatar
Linus Torvalds committed
364

365 366 367 368 369 370 371
# Additional ARCH settings for x86
ifeq ($(ARCH),i386)
        SRCARCH := x86
endif
ifeq ($(ARCH),x86_64)
        SRCARCH := x86
endif
372

373
# Additional ARCH settings for sparc
374 375 376
ifeq ($(ARCH),sparc32)
       SRCARCH := sparc
endif
377
ifeq ($(ARCH),sparc64)
378
       SRCARCH := sparc
379
endif
380

381 382 383 384 385
# Additional ARCH settings for sh
ifeq ($(ARCH),sh64)
       SRCARCH := sh
endif

386
KCONFIG_CONFIG	?= .config
387
export KCONFIG_CONFIG
388

Linus Torvalds's avatar
Linus Torvalds committed
389 390 391 392 393
# SHELL used by kbuild
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
	  else if [ -x /bin/bash ]; then echo /bin/bash; \
	  else echo sh; fi ; fi)

394 395 396
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)
397

398 399
HOSTCC       = gcc
HOSTCXX      = g++
400
KBUILD_HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \
401 402 403 404 405
		-fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \
		$(HOSTCFLAGS)
KBUILD_HOSTCXXFLAGS := -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
KBUILD_HOSTLDFLAGS  := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
KBUILD_HOSTLDLIBS   := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
Linus Torvalds's avatar
Linus Torvalds committed
406 407 408 409 410 411 412 413 414 415 416

# Make variables (CC, etc...)
AS		= $(CROSS_COMPILE)as
LD		= $(CROSS_COMPILE)ld
CC		= $(CROSS_COMPILE)gcc
CPP		= $(CC) -E
AR		= $(CROSS_COMPILE)ar
NM		= $(CROSS_COMPILE)nm
STRIP		= $(CROSS_COMPILE)strip
OBJCOPY		= $(CROSS_COMPILE)objcopy
OBJDUMP		= $(CROSS_COMPILE)objdump
417
PAHOLE		= pahole
418 419
LEX		= flex
YACC		= bison
Linus Torvalds's avatar
Linus Torvalds committed
420
AWK		= awk
421
INSTALLKERNEL  := installkernel
Linus Torvalds's avatar
Linus Torvalds committed
422 423
DEPMOD		= /sbin/depmod
PERL		= perl
424
PYTHON		= python
425 426
PYTHON2		= python2
PYTHON3		= python3
Linus Torvalds's avatar
Linus Torvalds committed
427 428
CHECK		= sparse

429
CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
430
		  -Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
431
NOSTDINC_FLAGS :=
432 433 434
CFLAGS_MODULE   =
AFLAGS_MODULE   =
LDFLAGS_MODULE  =
Linus Torvalds's avatar
Linus Torvalds committed
435 436
CFLAGS_KERNEL	=
AFLAGS_KERNEL	=
437
LDFLAGS_vmlinux =
Linus Torvalds's avatar
Linus Torvalds committed
438

439 440
# Use USERINCLUDE when you must reference the UAPI directories only.
USERINCLUDE    := \
441 442
		-I$(srctree)/arch/$(SRCARCH)/include/uapi \
		-I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \
443
		-I$(srctree)/include/uapi \
444
		-I$(objtree)/include/generated/uapi \
445 446
                -include $(srctree)/include/linux/kconfig.h

Linus Torvalds's avatar
Linus Torvalds committed
447 448
# Use LINUXINCLUDE when you must reference the include/ directory.
# Needed to be compatible with the O= option
449
LINUXINCLUDE    := \
450 451
		-I$(srctree)/arch/$(SRCARCH)/include \
		-I$(objtree)/arch/$(SRCARCH)/include/generated \
452
		$(if $(filter .,$(srctree)),,-I$(srctree)/include) \
453 454
		-I$(objtree)/include \
		$(USERINCLUDE)
Linus Torvalds's avatar
Linus Torvalds committed
455

456
KBUILD_AFLAGS   := -D__ASSEMBLY__ -fno-PIE
457
KBUILD_CFLAGS   := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
458
		   -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
459
		   -Werror=implicit-function-declaration -Werror=implicit-int \
460
		   -Wno-format-security \
461 462
		   -std=gnu89
KBUILD_CPPFLAGS := -D__KERNEL__
463 464
KBUILD_AFLAGS_KERNEL :=
KBUILD_CFLAGS_KERNEL :=
465 466 467
KBUILD_AFLAGS_MODULE  := -DMODULE
KBUILD_CFLAGS_MODULE  := -DMODULE
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
468
KBUILD_LDFLAGS :=
469
GCC_PLUGINS_CFLAGS :=
470
CLANG_FLAGS :=
Linus Torvalds's avatar
Linus Torvalds committed
471

472
export ARCH SRCARCH CONFIG_SHELL HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC
473
export CPP AR NM STRIP OBJCOPY OBJDUMP PAHOLE KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS
474
export MAKE LEX YACC AWK INSTALLKERNEL PERL PYTHON PYTHON2 PYTHON3 UTS_MACHINE
475
export HOSTCXX KBUILD_HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
Linus Torvalds's avatar
Linus Torvalds committed
476

477
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
478 479
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN
480
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
481
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
482
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
483
export KBUILD_ARFLAGS
Linus Torvalds's avatar
Linus Torvalds committed
484 485 486 487 488 489 490 491

# When compiling out-of-tree modules, put MODVERDIR in the module
# tree rather than in the kernel tree. The kernel tree might
# even be read-only.
export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions

# Files to ignore in find ... statements

492 493 494
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
495 496
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
497 498 499 500

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

501
# Basic helpers built in scripts/basic/
502
PHONY += scripts_basic
Linus Torvalds's avatar
Linus Torvalds committed
503 504
scripts_basic:
	$(Q)$(MAKE) $(build)=scripts/basic
505
	$(Q)rm -f .tmp_quiet_recordmcount
Linus Torvalds's avatar
Linus Torvalds committed
506

507
PHONY += outputmakefile
508 509 510
# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
# output directory.
511 512
# At the same time when output Makefile generated, generate .gitignore to
# ignore whole output directory
Linus Torvalds's avatar
Linus Torvalds committed
513
outputmakefile:
514
ifneq ($(srctree),.)
515
	$(Q)ln -fsn $(srctree) source
516
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
517 518
	$(Q)test -e .gitignore || \
	{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
519
endif
Linus Torvalds's avatar
Linus Torvalds committed
520

521
ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
522
ifneq ($(CROSS_COMPILE),)
523
CLANG_FLAGS	+= --target=$(notdir $(CROSS_COMPILE:%-=%))
524
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
525
CLANG_FLAGS	+= --prefix=$(GCC_TOOLCHAIN_DIR)
526
GCC_TOOLCHAIN	:= $(realpath $(GCC_TOOLCHAIN_DIR)/..)
527 528
endif
ifneq ($(GCC_TOOLCHAIN),)
529
CLANG_FLAGS	+= --gcc-toolchain=$(GCC_TOOLCHAIN)
530
endif
531
CLANG_FLAGS	+= -no-integrated-as
532
CLANG_FLAGS	+= -Werror=unknown-warning-option
533 534
KBUILD_CFLAGS	+= $(CLANG_FLAGS)
KBUILD_AFLAGS	+= $(CLANG_FLAGS)
535
export CLANG_FLAGS
536 537
endif

538 539 540 541
# 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.
542
CC_VERSION_TEXT = $(shell $(CC) --version 2>/dev/null | head -n 1)
543

Linus Torvalds's avatar
Linus Torvalds committed
544 545 546 547 548 549 550 551
ifeq ($(config-targets),1)
# ===========================================================================
# *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'
552
include arch/$(SRCARCH)/Makefile
553
export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
Linus Torvalds's avatar
Linus Torvalds committed
554

555 556 557 558
config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

%config: scripts_basic outputmakefile FORCE
Linus Torvalds's avatar
Linus Torvalds committed
559 560 561 562 563 564 565
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

else
# ===========================================================================
# Build targets only - this includes vmlinux, arch specific targets, clean
# targets and others. In general all targets except *config targets.

566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603
# If building an external module we do not care about the all: rule
# but instead _all depend on modules
PHONY += all
ifeq ($(KBUILD_EXTMOD),)
_all: all
else
_all: modules
endif

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

KBUILD_MODULES :=
KBUILD_BUILTIN := 1

# If we have only "make modules", don't compile built-in objects.
# 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.

ifeq ($(MAKECMDGOALS),modules)
  KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
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

ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
  KBUILD_MODULES := 1
endif

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

export KBUILD_MODULES KBUILD_BUILTIN

604 605 606 607
ifeq ($(dot-config),1)
include include/config/auto.conf
endif

Linus Torvalds's avatar
Linus Torvalds committed
608 609 610
ifeq ($(KBUILD_EXTMOD),)
# Objects we will link into vmlinux / subdirs we need to visit
init-y		:= init/
611
drivers-y	:= drivers/ sound/
612
drivers-$(CONFIG_SAMPLES) += samples/
Linus Torvalds's avatar
Linus Torvalds committed
613 614 615
net-y		:= net/
libs-y		:= lib/
core-y		:= usr/
616
virt-y		:= virt/
Linus Torvalds's avatar
Linus Torvalds committed
617 618
endif # KBUILD_EXTMOD

619 620 621 622 623 624 625 626 627
# 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,)
628
export CFLAGS_GCOV
629

630 631 632 633 634
# The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later.
ifdef CONFIG_FUNCTION_TRACER
  CC_FLAGS_FTRACE := -pg
endif

635 636 637 638 639 640 641 642 643
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

644 645 646 647 648 649
# The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
# values of the respective KBUILD_* variables
ARCH_CPPFLAGS :=
ARCH_AFLAGS :=
ARCH_CFLAGS :=
include arch/$(SRCARCH)/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
650

651
ifeq ($(dot-config),1)
652
ifeq ($(may-sync-config),1)
653 654 655
# 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.
656
include include/config/auto.conf.cmd
Linus Torvalds's avatar
Linus Torvalds committed
657

658 659 660 661 662 663 664 665
$(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
666

667 668 669
# 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).
670 671 672 673
#
# This exploits the 'multi-target pattern rule' trick.
# The syncconfig should be executed only once to make all the targets.
%/auto.conf %/auto.conf.cmd %/tristate.conf: $(KCONFIG_CONFIG)
674
	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
675
else
676 677 678
# 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
679 680 681
PHONY += include/config/auto.conf

include/config/auto.conf:
682
	$(Q)test -e include/generated/autoconf.h -a -e $@ || (		\
683 684 685 686 687
	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 ;							\
688 689
	/bin/false)

690
endif # may-sync-config
691
endif # $(dot-config)
Linus Torvalds's avatar
Linus Torvalds committed
692

693
KBUILD_CFLAGS	+= $(call cc-option,-fno-delete-null-pointer-checks,)
694
KBUILD_CFLAGS	+= $(call cc-disable-warning,frame-address,)
695 696
KBUILD_CFLAGS	+= $(call cc-disable-warning, format-truncation)
KBUILD_CFLAGS	+= $(call cc-disable-warning, format-overflow)
697
KBUILD_CFLAGS	+= $(call cc-disable-warning, address-of-packed-member)
698

Linus Torvalds's avatar
Linus Torvalds committed
699
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
700
KBUILD_CFLAGS	+= -Os
701
else
702 703 704
ifdef CONFIG_CC_OPTIMIZE_HARDER
KBUILD_CFLAGS  += -O3
else
705 706
KBUILD_CFLAGS   += -O2
endif
707
endif
Linus Torvalds's avatar
Linus Torvalds committed
708

709 710 711
ifdef CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED
KBUILD_CFLAGS   += -Wno-maybe-uninitialized
endif
712

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

716
include scripts/Makefile.kcov
Emese Revfy's avatar
Emese Revfy committed
717 718
include scripts/Makefile.gcc-plugins

719 720 721 722 723 724 725 726 727 728
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

729
ifneq ($(CONFIG_FRAME_WARN),0)
730 731 732
KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
endif

733
stackp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector
734 735
stackp-flags-$(CONFIG_STACKPROTECTOR)             := -fstack-protector
stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG)      := -fstack-protector-strong
736 737

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

739
ifdef CONFIG_CC_IS_CLANG
740 741 742
KBUILD_CPPFLAGS += -Qunused-arguments
KBUILD_CFLAGS += -Wno-format-invalid-specifier
KBUILD_CFLAGS += -Wno-gnu
743
# Quiet clang warning: comparison of unsigned expression < 0 is always false
744
KBUILD_CFLAGS += -Wno-tautological-compare
745 746 747
# 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
748
KBUILD_CFLAGS += -mno-global-merge
749 750 751 752
else

# These warnings generated too much noise in a regular build.
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
753
KBUILD_CFLAGS += -Wno-unused-but-set-variable
754 755
endif

756
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
Linus Torvalds's avatar
Linus Torvalds committed
757
ifdef CONFIG_FRAME_POINTER
758
KBUILD_CFLAGS	+= -fno-omit-frame-pointer -fno-optimize-sibling-calls
Linus Torvalds's avatar
Linus Torvalds committed
759
else
760 761 762 763 764 765
# 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
766
KBUILD_CFLAGS	+= -fomit-frame-pointer
Linus Torvalds's avatar
Linus Torvalds committed
767
endif
768
endif
Linus Torvalds's avatar
Linus Torvalds committed
769

770 771 772 773 774
# Initialize all stack variables with a pattern, if desired.
ifdef CONFIG_INIT_STACK_ALL
KBUILD_CFLAGS	+= -ftrivial-auto-var-init=pattern
endif

775
DEBUG_CFLAGS	:= $(call cc-option, -fno-var-tracking-assignments)
776

Linus Torvalds's avatar
Linus Torvalds committed
777
ifdef CONFIG_DEBUG_INFO
778
ifdef CONFIG_DEBUG_INFO_SPLIT
779
DEBUG_CFLAGS	+= -gsplit-dwarf
780
else
781
DEBUG_CFLAGS	+= -g
782
endif
783
KBUILD_AFLAGS	+= -Wa,-gdwarf-2
Linus Torvalds's avatar
Linus Torvalds committed
784
endif
785
ifdef CONFIG_DEBUG_INFO_DWARF4
786
DEBUG_CFLAGS	+= -gdwarf-4
787
endif
Linus Torvalds's avatar
Linus Torvalds committed
788

789
ifdef CONFIG_DEBUG_INFO_REDUCED
790
DEBUG_CFLAGS	+= $(call cc-option, -femit-struct-debug-baseonly) \
791
		   $(call cc-option,-fno-var-tracking)
792 793
endif

794 795 796
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
export DEBUG_CFLAGS

797
ifdef CONFIG_FUNCTION_TRACER
798 799 800 801 802 803
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
804 805 806 807 808 809
  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
810
endif
811
ifdef CONFIG_HAVE_FENTRY
812 813 814 815
  ifeq ($(call cc-option-yn, -mfentry),y)
    CC_FLAGS_FTRACE	+= -mfentry
    CC_FLAGS_USING	+= -DCC_USING_FENTRY
  endif
816
endif
817 818 819
export CC_FLAGS_FTRACE
KBUILD_CFLAGS	+= $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING)
KBUILD_AFLAGS	+= $(CC_FLAGS_USING)
820
ifdef CONFIG_DYNAMIC_FTRACE
821
	ifdef CONFIG_HAVE_C_RECORDMCOUNT
822 823 824 825
		BUILD_C_RECORDMCOUNT := y
		export BUILD_C_RECORDMCOUNT
	endif
endif
826 827
endif

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

833
ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
834 835
KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
LDFLAGS_vmlinux += --gc-sections
836 837
endif

838 839 840 841
ifdef CONFIG_LIVEPATCH
KBUILD_CFLAGS += $(call cc-option, -flive-patching=inline-clone)
endif

842
# arch Makefile may override CC so keep this after arch Makefile is included
843
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
844

Linus Torvalds's avatar
Linus Torvalds committed
845
# warn about C99 declaration after statement
846
KBUILD_CFLAGS += -Wdeclaration-after-statement
Linus Torvalds's avatar
Linus Torvalds committed
847

848
# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
849
KBUILD_CFLAGS += -Wvla
850

851
# disable pointer signed / unsigned warnings in gcc 4.0
852
KBUILD_CFLAGS += -Wno-pointer-sign
Linus Torvalds's avatar
Linus Torvalds committed
853

854 855 856
# disable stringop warnings in gcc 8+
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)

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

860 861 862 863 864 865 866 867 868
# clang sets -fmerge-all-constants by default as optimization, but this
# is non-conforming behavior for C and in fact breaks the kernel, so we
# need to disable it here generally.
KBUILD_CFLAGS	+= $(call cc-option,-fno-merge-all-constants)

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

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

872 873 874
# conserve stack if available
KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)

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

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

881 882 883
# Require designated initializers for all marked structures
KBUILD_CFLAGS   += $(call cc-option,-Werror=designated-init)

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

887 888 889
# use the deterministic mode of AR if available
KBUILD_ARFLAGS := $(call ar-option,D)

890 891
include scripts/Makefile.kasan
include scripts/Makefile.extrawarn
892
include scripts/Makefile.ubsan
893

894 895 896 897 898
# Add any arch overrides and user supplied CPPFLAGS, AFLAGS and CFLAGS as the
# last assignments
KBUILD_CPPFLAGS += $(ARCH_CPPFLAGS) $(KCPPFLAGS)
KBUILD_AFLAGS   += $(ARCH_AFLAGS)   $(KAFLAGS)
KBUILD_CFLAGS   += $(ARCH_CFLAGS)   $(KCFLAGS)
899

900
# Use --build-id when available.
901
LDFLAGS_BUILD_ID := $(call ld-option, --build-id)
902
KBUILD_LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
903 904
LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)

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

909 910 911
# insure the checker run with the right endianness
CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)

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

Linus Torvalds's avatar
Linus Torvalds committed
915
# Default kernel image to build when no specific target is given.
916
# KBUILD_IMAGE may be overruled on the command line or
Linus Torvalds's avatar
Linus Torvalds committed
917 918 919 920 921 922 923 924 925 926
# 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

927 928 929 930 931 932 933
#
# 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
934 935 936
#
# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
# relocations required by build roots.  This is not defined in the
937
# makefile but the argument can be passed to make if needed.
Linus Torvalds's avatar
Linus Torvalds committed
938 939
#

940
MODLIB	= $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
Linus Torvalds's avatar
Linus Torvalds committed
941 942
export MODLIB

943
#
944 945 946 947
# 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.
948

949 950
ifdef INSTALL_MOD_STRIP
ifeq ($(INSTALL_MOD_STRIP),1)
951
mod_strip_cmd = $(STRIP) --strip-debug
952
else
953
mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
954 955
endif # INSTALL_MOD_STRIP=1
else
956
mod_strip_cmd = true
957 958 959
endif # INSTALL_MOD_STRIP
export mod_strip_cmd

960 961 962 963 964 965 966
# 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
967
    mod_compress_cmd = gzip -n -f
968 969
  endif # CONFIG_MODULE_COMPRESS_GZIP
  ifdef CONFIG_MODULE_COMPRESS_XZ
970
    mod_compress_cmd = xz -f
971 972 973 974
  endif # CONFIG_MODULE_COMPRESS_XZ
endif # CONFIG_MODULE_COMPRESS
export mod_compress_cmd

975
ifdef CONFIG_MODULE_SIG_ALL
976 977 978
$(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
979 980 981 982 983
else
mod_sign_cmd = true
endif
export mod_sign_cmd

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

986 987
ifdef CONFIG_STACK_VALIDATION
  has_libelf := $(call try-run,\
988
		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
989 990 991 992 993 994 995 996
  ifeq ($(has_libelf),1)
    objtool_target := tools/objtool FORCE
  else
    SKIP_STACK_VALIDATION := 1
    export SKIP_STACK_VALIDATION
  endif
endif

997
PHONY += prepare0
998

Linus Torvalds's avatar
Linus Torvalds committed
999
ifeq ($(KBUILD_EXTMOD),)
1000
core-y		+= kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
Linus Torvalds's avatar
Linus Torvalds committed
1001 1002 1003

vmlinux-dirs	:= $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
1004
		     $(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y)))
Linus Torvalds's avatar
Linus Torvalds committed
1005

1006 1007 1008
vmlinux-alldirs	:= $(sort $(vmlinux-dirs) Documentation \
		     $(patsubst %/,%,$(filter %/, $(init-) $(core-) \
			$(drivers-) $(net-) $(libs-) $(virt-))))
Linus Torvalds's avatar
Linus Torvalds committed
1009

1010 1011 1012 1013
init-y		:= $(patsubst %/, %/built-in.a, $(init-y))
core-y		:= $(patsubst %/, %/built-in.a, $(core-y))
drivers-y	:= $(patsubst %/, %/built-in.a, $(drivers-y))
net-y		:= $(patsubst %/, %/built-in.a, $(net-y))
Linus Torvalds's avatar
Linus Torvalds committed
1014
libs-y1		:= $(patsubst %/, %/lib.a, $(libs-y))
1015 1016
libs-y2		:= $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y)))
virt-y		:= $(patsubst %/, %/built-in.a, $(virt-y))
Linus Torvalds's avatar
Linus Torvalds committed
1017

1018
# Externally visible symbols (used by link-vmlinux.sh)
1019 1020
export KBUILD_VMLINUX_OBJS := $(head-y) $(init-y) $(core-y) $(libs-y2) \
			      $(drivers-y) $(net-y) $(virt-y)
1021
export KBUILD_VMLINUX_LIBS := $(libs-y1)
1022
export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
1023
export LDFLAGS_vmlinux
1024
# used by scripts/package/Makefile
1025
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
1026

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

1029 1030 1031
# Recurse until adjust_autoksyms.sh is satisfied
PHONY += autoksyms_recursive
autoksyms_recursive: $(vmlinux-deps)
1032
ifdef CONFIG_TRIM_UNUSED_KSYMS
1033
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
1034
	  "$(MAKE) -f $(srctree)/Makefile vmlinux"
1035
endif
1036

1037 1038 1039 1040 1041 1042 1043
# For the kernel to actually contain only the needed exported symbols,
# we have to build modules as well to determine what those symbols are.
# (this can be evaluated only once include/config/auto.conf has been included)
ifdef CONFIG_TRIM_UNUSED_KSYMS
  KBUILD_MODULES := 1
endif

1044 1045 1046 1047 1048
autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)

$(autoksyms_h):
	$(Q)mkdir -p $(dir $@)
	$(Q)touch $@
1049

1050 1051 1052
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)

# Final link of vmlinux with optional arch pass after final link
1053
cmd_link-vmlinux =                                                 \
1054
	$(CONFIG_SHELL) $< $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_vmlinux) ;    \
1055
	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
1056

1057
vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
1058
	+$(call if_changed,link-vmlinux)
1059

1060 1061
targets := vmlinux

1062
# Some samples need headers_install.
1063
samples: headers_install
1064

1065
# The actual objects are generated when descending,
Linus Torvalds's avatar
Linus Torvalds committed
1066
# make sure no implicit rule kicks in
1067
$(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
Linus Torvalds's avatar
Linus Torvalds committed
1068 1069 1070 1071 1072 1073 1074

# Handle descending into subdirectories listed in $(vmlinux-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

1075
PHONY += $(vmlinux-dirs)
1076
$(vmlinux-dirs): prepare
1077
	$(Q)$(MAKE) $(build)=$@ need-builtin=1
Linus Torvalds's avatar
Linus Torvalds committed
1078

1079
filechk_kernel.release = \
1080 1081
	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"

1082
# Store (new) KERNELRELEASE string in include/config/kernel.release
1083
include/config/kernel.release: FORCE
1084
	$(call filechk,kernel.release)
1085

1086 1087 1088 1089
# Additional helpers built in scripts/
# Carefully list dependencies so we do not try to build scripts twice
# in parallel
PHONY += scripts
1090
scripts: scripts_basic scripts_dtc
1091
	$(Q)$(MAKE) $(build)=$(@)
1092

Linus Torvalds's avatar
Linus Torvalds committed
1093
# Things we need to do before we recursively start building the kernel
1094 1095 1096 1097
# 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
1098

1099
PHONY += prepare archprepare prepare1 prepare3
1100

1101
# prepare3 is used to check if we are building in a separate output directory,
Linus Torvalds's avatar
Linus Torvalds committed
1102 1103
# and if so do:
# 1) Check that make has not been executed in the kernel src $(srctree)
1104
prepare3: include/config/kernel.release
1105
ifneq ($(srctree),.)
1106
	@$(kecho) '  Using $(srctree) as source for kernel'
1107 1108 1109
	$(Q)if [ -f $(srctree)/.config -o \
		 -d $(srctree)/include/config -o \
		 -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
1110 1111
		echo >&2 "  $(srctree) is not clean, please run 'make mrproper'"; \
		echo >&2 "  in the '$(srctree)' directory.";\
Linus Torvalds's avatar
Linus Torvalds committed
1112 1113 1114 1115
		/bin/false; \
	fi;
endif

1116 1117
prepare1: prepare3 outputmakefile asm-generic $(version_h) $(autoksyms_h) \
						include/generated/utsrelease.h
1118
	$(cmd_crmodverdir)
Linus Torvalds's avatar
Linus Torvalds committed
1119

1120
archprepare: archheaders archscripts prepare1 scripts
1121

1122
prepare0: archprepare
1123
	$(Q)$(MAKE) $(build)=scripts/mod
1124
	$(Q)$(MAKE) $(build)=.
1125

Linus Torvalds's avatar
Linus Torvalds committed
1126
# All the preparing..
1127 1128
prepare: prepare0 prepare-objtool

1129
# Support for using generic headers in asm-generic
1130 1131
asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj

1132 1133
PHONY += asm-generic uapi-asm-generic
asm-generic: uapi-asm-generic
1134 1135
	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm \
	generic=include/asm-generic
1136
uapi-asm-generic:
1137 1138
	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \
	generic=include/uapi/asm-generic
1139

1140
PHONY += prepare-objtool
1141
prepare-objtool: $(objtool_target)
1142 1143 1144 1145 1146 1147 1148 1149
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
Linus Torvalds's avatar
Linus Torvalds committed
1150 1151 1152 1153 1154 1155 1156 1157

# 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
1158 1159 1160 1161 1162
define filechk_utsrelease.h
	if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
	  echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2;    \
	  exit 1;                                                         \
	fi;                                                               \
1163
	echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
1164
endef
Linus Torvalds's avatar
Linus Torvalds committed
1165 1166

define filechk_version.h
1167
	echo \#define LINUX_VERSION_CODE $(shell                         \
1168
	expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \
1169
	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'
Linus Torvalds's avatar
Linus Torvalds committed
1170 1171
endef

1172
$(version_h): FORCE
Linus Torvalds's avatar
Linus Torvalds committed
1173
	$(call filechk,version.h)
1174
	$(Q)rm -f $(old_version_h)
Linus Torvalds's avatar
Linus Torvalds committed
1175

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

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

1184 1185 1186
# ---------------------------------------------------------------------------
# Kernel headers

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

1190 1191
# If we do an all arch process set dst to include/arch-$(SRCARCH)
hdr-dst = $(if $(KBUILD_HEADERS), dst=include/arch-$(SRCARCH), dst=include)
1192

1193
PHONY += archheaders archscripts
1194

1195
PHONY += __headers
1196
__headers: $(version_h) scripts_basic uapi-asm-generic archheaders archscripts
1197
	$(Q)$(MAKE) $(build)=scripts build_unifdef
1198 1199

PHONY += headers_install_all
1200 1201
headers_install_all:
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/headers.sh install
1202

1203
PHONY += headers_install
1204
headers_install: __headers
1205
	$(if $(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/Kbuild),, \
1206
	  $(error Headers not exportable for the $(SRCARCH) architecture))
1207
	$(Q)$(MAKE) $(hdr-inst)=include/uapi dst=include
1208
	$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi $(hdr-dst)
1209

1210 1211
PHONY += headers_check_all
headers_check_all: headers_install_all
1212
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/headers.sh check
1213

1214 1215
PHONY += headers_check
headers_check: headers_install
1216
	$(Q)$(MAKE) $(hdr-inst)=include/uapi dst=include HDRCHECK=1
1217
	$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi $(hdr-dst) HDRCHECK=1
1218

1219 1220 1221 1222
ifdef CONFIG_HEADERS_CHECK
all: headers_check
endif

1223 1224 1225 1226 1227
# ---------------------------------------------------------------------------
# Kernel selftest

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

1230
PHONY += kselftest-clean
1231
kselftest-clean:
1232
	$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests clean
1233

1234 1235 1236
PHONY += kselftest-merge
kselftest-merge:
	$(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!))
1237 1238
	$(Q)find $(srctree)/tools/testing/selftests -name config | \
		xargs $(srctree)/scripts/kconfig/merge_config.sh -m $(objtree)/.config
1239 1240
	+$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig

1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252
# ---------------------------------------------------------------------------
# Devicetree files

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

ifneq ($(dtstree),)

%.dtb: prepare3 scripts_dtc
	$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@

1253 1254
PHONY += dtbs dtbs_install dt_binding_check
dtbs dtbs_check: prepare3 scripts_dtc
1255 1256
	$(Q)$(MAKE) $(build)=$(dtstree)

1257 1258 1259
dtbs_check: export CHECK_DTBS=1
dtbs_check: dt_binding_check

1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272
dtbs_install:
	$(Q)$(MAKE) $(dtbinst)=$(dtstree)

ifdef CONFIG_OF_EARLY_FLATTREE
all: dtbs
endif

endif

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

1273 1274 1275
dt_binding_check: scripts_dtc
	$(Q)$(MAKE) $(build)=Documentation/devicetree/bindings

Linus Torvalds's avatar
Linus Torvalds committed
1276 1277 1278 1279 1280
# ---------------------------------------------------------------------------
# Modules

ifdef CONFIG_MODULES

1281
# By default, build modules as well
Linus Torvalds's avatar
Linus Torvalds committed
1282

1283
all: modules
Linus Torvalds's avatar
Linus Torvalds committed
1284

1285
# Build modules
1286
#
1287 1288 1289
# 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.