cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

Makefile (65635B)


      1# SPDX-License-Identifier: GPL-2.0
      2VERSION = 5
      3PATCHLEVEL = 19
      4SUBLEVEL = 0
      5EXTRAVERSION = -rc6
      6NAME = Superb Owl
      7
      8# *DOCUMENTATION*
      9# To see a list of typical targets execute "make help"
     10# More info can be located in ./README
     11# Comments in this file are targeted only to the developer, do not
     12# expect to learn how to build the kernel reading this file.
     13
     14$(if $(filter __%, $(MAKECMDGOALS)), \
     15	$(error targets prefixed with '__' are only for internal use))
     16
     17# That's our default target when none is given on the command line
     18PHONY := __all
     19__all:
     20
     21# We are using a recursive build, so we need to do a little thinking
     22# to get the ordering right.
     23#
     24# Most importantly: sub-Makefiles should only ever modify files in
     25# their own directory. If in some directory we have a dependency on
     26# a file in another dir (which doesn't happen often, but it's often
     27# unavoidable when linking the built-in.a targets which finally
     28# turn into vmlinux), we will call a sub make in that other dir, and
     29# after that we are sure that everything which is in that other dir
     30# is now up to date.
     31#
     32# The only cases where we need to modify files which have global
     33# effects are thus separated out and done before the recursive
     34# descending is started. They are now explicitly listed as the
     35# prepare rule.
     36
     37ifneq ($(sub_make_done),1)
     38
     39# Do not use make's built-in rules and variables
     40# (this increases performance and avoids hard-to-debug behaviour)
     41MAKEFLAGS += -rR
     42
     43# Avoid funny character set dependencies
     44unexport LC_ALL
     45LC_COLLATE=C
     46LC_NUMERIC=C
     47export LC_COLLATE LC_NUMERIC
     48
     49# Avoid interference with shell env settings
     50unexport GREP_OPTIONS
     51
     52# Beautify output
     53# ---------------------------------------------------------------------------
     54#
     55# Normally, we echo the whole command before executing it. By making
     56# that echo $($(quiet)$(cmd)), we now have the possibility to set
     57# $(quiet) to choose other forms of output instead, e.g.
     58#
     59#         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
     60#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
     61#
     62# If $(quiet) is empty, the whole command will be printed.
     63# If it is set to "quiet_", only the short version will be printed.
     64# If it is set to "silent_", nothing will be printed at all, since
     65# the variable $(silent_cmd_cc_o_c) doesn't exist.
     66#
     67# A simple variant is to prefix commands with $(Q) - that's useful
     68# for commands that shall be hidden in non-verbose mode.
     69#
     70#	$(Q)ln $@ :<
     71#
     72# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
     73# If KBUILD_VERBOSE equals 1 then the above command is displayed.
     74# If KBUILD_VERBOSE equals 2 then give the reason why each target is rebuilt.
     75#
     76# To put more focus on warnings, be less verbose as default
     77# Use 'make V=1' to see the full commands
     78
     79ifeq ("$(origin V)", "command line")
     80  KBUILD_VERBOSE = $(V)
     81endif
     82ifndef KBUILD_VERBOSE
     83  KBUILD_VERBOSE = 0
     84endif
     85
     86ifeq ($(KBUILD_VERBOSE),1)
     87  quiet =
     88  Q =
     89else
     90  quiet=quiet_
     91  Q = @
     92endif
     93
     94# If the user is running make -s (silent mode), suppress echoing of
     95# commands
     96
     97ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
     98  quiet=silent_
     99  KBUILD_VERBOSE = 0
    100endif
    101
    102export quiet Q KBUILD_VERBOSE
    103
    104# Call a source code checker (by default, "sparse") as part of the
    105# C compilation.
    106#
    107# Use 'make C=1' to enable checking of only re-compiled files.
    108# Use 'make C=2' to enable checking of *all* source files, regardless
    109# of whether they are re-compiled or not.
    110#
    111# See the file "Documentation/dev-tools/sparse.rst" for more details,
    112# including where to get the "sparse" utility.
    113
    114ifeq ("$(origin C)", "command line")
    115  KBUILD_CHECKSRC = $(C)
    116endif
    117ifndef KBUILD_CHECKSRC
    118  KBUILD_CHECKSRC = 0
    119endif
    120
    121export KBUILD_CHECKSRC
    122
    123# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the
    124# directory of external module to build. Setting M= takes precedence.
    125ifeq ("$(origin M)", "command line")
    126  KBUILD_EXTMOD := $(M)
    127endif
    128
    129$(if $(word 2, $(KBUILD_EXTMOD)), \
    130	$(error building multiple external modules is not supported))
    131
    132# Remove trailing slashes
    133ifneq ($(filter %/, $(KBUILD_EXTMOD)),)
    134KBUILD_EXTMOD := $(shell dirname $(KBUILD_EXTMOD).)
    135endif
    136
    137export KBUILD_EXTMOD
    138
    139# Kbuild will save output files in the current working directory.
    140# This does not need to match to the root of the kernel source tree.
    141#
    142# For example, you can do this:
    143#
    144#  cd /dir/to/store/output/files; make -f /dir/to/kernel/source/Makefile
    145#
    146# If you want to save output files in a different location, there are
    147# two syntaxes to specify it.
    148#
    149# 1) O=
    150# Use "make O=dir/to/store/output/files/"
    151#
    152# 2) Set KBUILD_OUTPUT
    153# Set the environment variable KBUILD_OUTPUT to point to the output directory.
    154# export KBUILD_OUTPUT=dir/to/store/output/files/; make
    155#
    156# The O= assignment takes precedence over the KBUILD_OUTPUT environment
    157# variable.
    158
    159# Do we want to change the working directory?
    160ifeq ("$(origin O)", "command line")
    161  KBUILD_OUTPUT := $(O)
    162endif
    163
    164ifneq ($(KBUILD_OUTPUT),)
    165# Make's built-in functions such as $(abspath ...), $(realpath ...) cannot
    166# expand a shell special character '~'. We use a somewhat tedious way here.
    167abs_objtree := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd)
    168$(if $(abs_objtree),, \
    169     $(error failed to create output directory "$(KBUILD_OUTPUT)"))
    170
    171# $(realpath ...) resolves symlinks
    172abs_objtree := $(realpath $(abs_objtree))
    173else
    174abs_objtree := $(CURDIR)
    175endif # ifneq ($(KBUILD_OUTPUT),)
    176
    177ifeq ($(abs_objtree),$(CURDIR))
    178# Suppress "Entering directory ..." unless we are changing the work directory.
    179MAKEFLAGS += --no-print-directory
    180else
    181need-sub-make := 1
    182endif
    183
    184this-makefile := $(lastword $(MAKEFILE_LIST))
    185abs_srctree := $(realpath $(dir $(this-makefile)))
    186
    187ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
    188$(error source directory cannot contain spaces or colons)
    189endif
    190
    191ifneq ($(abs_srctree),$(abs_objtree))
    192# Look for make include files relative to root of kernel src
    193#
    194# --included-dir is added for backward compatibility, but you should not rely on
    195# it. Please add $(srctree)/ prefix to include Makefiles in the source tree.
    196MAKEFLAGS += --include-dir=$(abs_srctree)
    197endif
    198
    199ifneq ($(filter 3.%,$(MAKE_VERSION)),)
    200# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x
    201# We need to invoke sub-make to avoid implicit rules in the top Makefile.
    202need-sub-make := 1
    203# Cancel implicit rules for this Makefile.
    204$(this-makefile): ;
    205endif
    206
    207export abs_srctree abs_objtree
    208export sub_make_done := 1
    209
    210ifeq ($(need-sub-make),1)
    211
    212PHONY += $(MAKECMDGOALS) __sub-make
    213
    214$(filter-out $(this-makefile), $(MAKECMDGOALS)) __all: __sub-make
    215	@:
    216
    217# Invoke a second make in the output directory, passing relevant variables
    218__sub-make:
    219	$(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
    220
    221endif # need-sub-make
    222endif # sub_make_done
    223
    224# We process the rest of the Makefile if this is the final invocation of make
    225ifeq ($(need-sub-make),)
    226
    227# Do not print "Entering directory ...",
    228# but we want to display it when entering to the output directory
    229# so that IDEs/editors are able to understand relative filenames.
    230MAKEFLAGS += --no-print-directory
    231
    232ifeq ($(abs_srctree),$(abs_objtree))
    233        # building in the source tree
    234        srctree := .
    235	building_out_of_srctree :=
    236else
    237        ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
    238                # building in a subdirectory of the source tree
    239                srctree := ..
    240        else
    241                srctree := $(abs_srctree)
    242        endif
    243	building_out_of_srctree := 1
    244endif
    245
    246ifneq ($(KBUILD_ABS_SRCTREE),)
    247srctree := $(abs_srctree)
    248endif
    249
    250objtree		:= .
    251VPATH		:= $(srctree)
    252
    253export building_out_of_srctree srctree objtree VPATH
    254
    255# To make sure we do not include .config for any of the *config targets
    256# catch them early, and hand them over to scripts/kconfig/Makefile
    257# It is allowed to specify more targets when calling make, including
    258# mixing *config targets and build targets.
    259# For example 'make oldconfig all'.
    260# Detect when mixed targets is specified, and make a second invocation
    261# of make so .config is not included in this case either (for *config).
    262
    263version_h := include/generated/uapi/linux/version.h
    264
    265clean-targets := %clean mrproper cleandocs
    266no-dot-config-targets := $(clean-targets) \
    267			 cscope gtags TAGS tags help% %docs check% coccicheck \
    268			 $(version_h) headers headers_% archheaders archscripts \
    269			 %asm-generic kernelversion %src-pkg dt_binding_check \
    270			 outputmakefile
    271# Installation targets should not require compiler. Unfortunately, vdso_install
    272# is an exception where build artifacts may be updated. This must be fixed.
    273no-compiler-targets := $(no-dot-config-targets) install dtbs_install \
    274			headers_install modules_install kernelrelease image_name
    275no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \
    276			  image_name
    277single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
    278
    279config-build	:=
    280mixed-build	:=
    281need-config	:= 1
    282need-compiler	:= 1
    283may-sync-config	:= 1
    284single-build	:=
    285
    286ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
    287	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
    288		need-config :=
    289	endif
    290endif
    291
    292ifneq ($(filter $(no-compiler-targets), $(MAKECMDGOALS)),)
    293	ifeq ($(filter-out $(no-compiler-targets), $(MAKECMDGOALS)),)
    294		need-compiler :=
    295	endif
    296endif
    297
    298ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
    299	ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
    300		may-sync-config :=
    301	endif
    302endif
    303
    304ifneq ($(KBUILD_EXTMOD),)
    305	may-sync-config :=
    306endif
    307
    308ifeq ($(KBUILD_EXTMOD),)
    309        ifneq ($(filter %config,$(MAKECMDGOALS)),)
    310		config-build := 1
    311                ifneq ($(words $(MAKECMDGOALS)),1)
    312			mixed-build := 1
    313                endif
    314        endif
    315endif
    316
    317# We cannot build single targets and the others at the same time
    318ifneq ($(filter $(single-targets), $(MAKECMDGOALS)),)
    319	single-build := 1
    320	ifneq ($(filter-out $(single-targets), $(MAKECMDGOALS)),)
    321		mixed-build := 1
    322	endif
    323endif
    324
    325# For "make -j clean all", "make -j mrproper defconfig all", etc.
    326ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),)
    327        ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),)
    328		mixed-build := 1
    329        endif
    330endif
    331
    332# install and modules_install need also be processed one by one
    333ifneq ($(filter install,$(MAKECMDGOALS)),)
    334        ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
    335		mixed-build := 1
    336        endif
    337endif
    338
    339ifdef mixed-build
    340# ===========================================================================
    341# We're called with mixed targets (*config and build targets).
    342# Handle them one by one.
    343
    344PHONY += $(MAKECMDGOALS) __build_one_by_one
    345
    346$(MAKECMDGOALS): __build_one_by_one
    347	@:
    348
    349__build_one_by_one:
    350	$(Q)set -e; \
    351	for i in $(MAKECMDGOALS); do \
    352		$(MAKE) -f $(srctree)/Makefile $$i; \
    353	done
    354
    355else # !mixed-build
    356
    357include $(srctree)/scripts/Kbuild.include
    358
    359# Read KERNELRELEASE from include/config/kernel.release (if it exists)
    360KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
    361KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
    362export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
    363
    364include $(srctree)/scripts/subarch.include
    365
    366# Cross compiling and selecting different set of gcc/bin-utils
    367# ---------------------------------------------------------------------------
    368#
    369# When performing cross compilation for other architectures ARCH shall be set
    370# to the target architecture. (See arch/* for the possibilities).
    371# ARCH can be set during invocation of make:
    372# make ARCH=ia64
    373# Another way is to have ARCH set in the environment.
    374# The default ARCH is the host where make is executed.
    375
    376# CROSS_COMPILE specify the prefix used for all executables used
    377# during compilation. Only gcc and related bin-utils executables
    378# are prefixed with $(CROSS_COMPILE).
    379# CROSS_COMPILE can be set on the command line
    380# make CROSS_COMPILE=ia64-linux-
    381# Alternatively CROSS_COMPILE can be set in the environment.
    382# Default value for CROSS_COMPILE is not to prefix executables
    383# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
    384ARCH		?= $(SUBARCH)
    385
    386# Architecture as present in compile.h
    387UTS_MACHINE 	:= $(ARCH)
    388SRCARCH 	:= $(ARCH)
    389
    390# Additional ARCH settings for x86
    391ifeq ($(ARCH),i386)
    392        SRCARCH := x86
    393endif
    394ifeq ($(ARCH),x86_64)
    395        SRCARCH := x86
    396endif
    397
    398# Additional ARCH settings for sparc
    399ifeq ($(ARCH),sparc32)
    400       SRCARCH := sparc
    401endif
    402ifeq ($(ARCH),sparc64)
    403       SRCARCH := sparc
    404endif
    405
    406# Additional ARCH settings for parisc
    407ifeq ($(ARCH),parisc64)
    408       SRCARCH := parisc
    409endif
    410
    411export cross_compiling :=
    412ifneq ($(SRCARCH),$(SUBARCH))
    413cross_compiling := 1
    414endif
    415
    416KCONFIG_CONFIG	?= .config
    417export KCONFIG_CONFIG
    418
    419# SHELL used by kbuild
    420CONFIG_SHELL := sh
    421
    422HOST_LFS_CFLAGS := $(shell getconf LFS_CFLAGS 2>/dev/null)
    423HOST_LFS_LDFLAGS := $(shell getconf LFS_LDFLAGS 2>/dev/null)
    424HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
    425
    426ifneq ($(LLVM),)
    427ifneq ($(filter %/,$(LLVM)),)
    428LLVM_PREFIX := $(LLVM)
    429else ifneq ($(filter -%,$(LLVM)),)
    430LLVM_SUFFIX := $(LLVM)
    431endif
    432
    433HOSTCC	= $(LLVM_PREFIX)clang$(LLVM_SUFFIX)
    434HOSTCXX	= $(LLVM_PREFIX)clang++$(LLVM_SUFFIX)
    435else
    436HOSTCC	= gcc
    437HOSTCXX	= g++
    438endif
    439HOSTPKG_CONFIG	= pkg-config
    440
    441KBUILD_USERHOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \
    442			 -O2 -fomit-frame-pointer -std=gnu11 \
    443			 -Wdeclaration-after-statement
    444KBUILD_USERCFLAGS  := $(KBUILD_USERHOSTCFLAGS) $(USERCFLAGS)
    445KBUILD_USERLDFLAGS := $(USERLDFLAGS)
    446
    447KBUILD_HOSTCFLAGS   := $(KBUILD_USERHOSTCFLAGS) $(HOST_LFS_CFLAGS) $(HOSTCFLAGS)
    448KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
    449KBUILD_HOSTLDFLAGS  := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
    450KBUILD_HOSTLDLIBS   := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
    451
    452# Make variables (CC, etc...)
    453CPP		= $(CC) -E
    454ifneq ($(LLVM),)
    455CC		= $(LLVM_PREFIX)clang$(LLVM_SUFFIX)
    456LD		= $(LLVM_PREFIX)ld.lld$(LLVM_SUFFIX)
    457AR		= $(LLVM_PREFIX)llvm-ar$(LLVM_SUFFIX)
    458NM		= $(LLVM_PREFIX)llvm-nm$(LLVM_SUFFIX)
    459OBJCOPY		= $(LLVM_PREFIX)llvm-objcopy$(LLVM_SUFFIX)
    460OBJDUMP		= $(LLVM_PREFIX)llvm-objdump$(LLVM_SUFFIX)
    461READELF		= $(LLVM_PREFIX)llvm-readelf$(LLVM_SUFFIX)
    462STRIP		= $(LLVM_PREFIX)llvm-strip$(LLVM_SUFFIX)
    463else
    464CC		= $(CROSS_COMPILE)gcc
    465LD		= $(CROSS_COMPILE)ld
    466AR		= $(CROSS_COMPILE)ar
    467NM		= $(CROSS_COMPILE)nm
    468OBJCOPY		= $(CROSS_COMPILE)objcopy
    469OBJDUMP		= $(CROSS_COMPILE)objdump
    470READELF		= $(CROSS_COMPILE)readelf
    471STRIP		= $(CROSS_COMPILE)strip
    472endif
    473PAHOLE		= pahole
    474RESOLVE_BTFIDS	= $(objtree)/tools/bpf/resolve_btfids/resolve_btfids
    475LEX		= flex
    476YACC		= bison
    477AWK		= awk
    478INSTALLKERNEL  := installkernel
    479DEPMOD		= depmod
    480PERL		= perl
    481PYTHON3		= python3
    482CHECK		= sparse
    483BASH		= bash
    484KGZIP		= gzip
    485KBZIP2		= bzip2
    486KLZOP		= lzop
    487LZMA		= lzma
    488LZ4		= lz4c
    489XZ		= xz
    490ZSTD		= zstd
    491
    492PAHOLE_FLAGS	= $(shell PAHOLE=$(PAHOLE) $(srctree)/scripts/pahole-flags.sh)
    493
    494CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
    495		  -Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
    496NOSTDINC_FLAGS :=
    497CFLAGS_MODULE   =
    498AFLAGS_MODULE   =
    499LDFLAGS_MODULE  =
    500CFLAGS_KERNEL	=
    501AFLAGS_KERNEL	=
    502LDFLAGS_vmlinux =
    503
    504# Use USERINCLUDE when you must reference the UAPI directories only.
    505USERINCLUDE    := \
    506		-I$(srctree)/arch/$(SRCARCH)/include/uapi \
    507		-I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \
    508		-I$(srctree)/include/uapi \
    509		-I$(objtree)/include/generated/uapi \
    510                -include $(srctree)/include/linux/compiler-version.h \
    511                -include $(srctree)/include/linux/kconfig.h
    512
    513# Use LINUXINCLUDE when you must reference the include/ directory.
    514# Needed to be compatible with the O= option
    515LINUXINCLUDE    := \
    516		-I$(srctree)/arch/$(SRCARCH)/include \
    517		-I$(objtree)/arch/$(SRCARCH)/include/generated \
    518		$(if $(building_out_of_srctree),-I$(srctree)/include) \
    519		-I$(objtree)/include \
    520		$(USERINCLUDE)
    521
    522KBUILD_AFLAGS   := -D__ASSEMBLY__ -fno-PIE
    523KBUILD_CFLAGS   := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
    524		   -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
    525		   -Werror=implicit-function-declaration -Werror=implicit-int \
    526		   -Werror=return-type -Wno-format-security \
    527		   -std=gnu11
    528KBUILD_CPPFLAGS := -D__KERNEL__
    529KBUILD_AFLAGS_KERNEL :=
    530KBUILD_CFLAGS_KERNEL :=
    531KBUILD_AFLAGS_MODULE  := -DMODULE
    532KBUILD_CFLAGS_MODULE  := -DMODULE
    533KBUILD_LDFLAGS_MODULE :=
    534KBUILD_LDFLAGS :=
    535CLANG_FLAGS :=
    536
    537export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC HOSTPKG_CONFIG
    538export CPP AR NM STRIP OBJCOPY OBJDUMP READELF PAHOLE RESOLVE_BTFIDS LEX YACC AWK INSTALLKERNEL
    539export PERL PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
    540export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD
    541export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
    542export KBUILD_USERCFLAGS KBUILD_USERLDFLAGS
    543
    544export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
    545export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
    546export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
    547export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
    548export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
    549export PAHOLE_FLAGS
    550
    551# Files to ignore in find ... statements
    552
    553export RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o    \
    554			  -name CVS -o -name .pc -o -name .hg -o -name .git \) \
    555			  -prune -o
    556export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
    557			 --exclude CVS --exclude .pc --exclude .hg --exclude .git
    558
    559# ===========================================================================
    560# Rules shared between *config targets and build targets
    561
    562# Basic helpers built in scripts/basic/
    563PHONY += scripts_basic
    564scripts_basic:
    565	$(Q)$(MAKE) $(build)=scripts/basic
    566
    567PHONY += outputmakefile
    568ifdef building_out_of_srctree
    569# Before starting out-of-tree build, make sure the source tree is clean.
    570# outputmakefile generates a Makefile in the output directory, if using a
    571# separate output directory. This allows convenient use of make in the
    572# output directory.
    573# At the same time when output Makefile generated, generate .gitignore to
    574# ignore whole output directory
    575
    576quiet_cmd_makefile = GEN     Makefile
    577      cmd_makefile = { \
    578	echo "\# Automatically generated by $(srctree)/Makefile: don't edit"; \
    579	echo "include $(srctree)/Makefile"; \
    580	} > Makefile
    581
    582outputmakefile:
    583	$(Q)if [ -f $(srctree)/.config -o \
    584		 -d $(srctree)/include/config -o \
    585		 -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
    586		echo >&2 "***"; \
    587		echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
    588		echo >&2 "*** in $(abs_srctree)";\
    589		echo >&2 "***"; \
    590		false; \
    591	fi
    592	$(Q)ln -fsn $(srctree) source
    593	$(call cmd,makefile)
    594	$(Q)test -e .gitignore || \
    595	{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
    596endif
    597
    598# The expansion should be delayed until arch/$(SRCARCH)/Makefile is included.
    599# Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.
    600# CC_VERSION_TEXT is referenced from Kconfig (so it needs export),
    601# and from include/config/auto.conf.cmd to detect the compiler upgrade.
    602CC_VERSION_TEXT = $(subst $(pound),,$(shell LC_ALL=C $(CC) --version 2>/dev/null | head -n 1))
    603
    604ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
    605include $(srctree)/scripts/Makefile.clang
    606endif
    607
    608# Include this also for config targets because some architectures need
    609# cc-cross-prefix to determine CROSS_COMPILE.
    610ifdef need-compiler
    611include $(srctree)/scripts/Makefile.compiler
    612endif
    613
    614ifdef config-build
    615# ===========================================================================
    616# *config targets only - make sure prerequisites are updated, and descend
    617# in scripts/kconfig to make the *config target
    618
    619# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
    620# KBUILD_DEFCONFIG may point out an alternative default configuration
    621# used for 'make defconfig'
    622include $(srctree)/arch/$(SRCARCH)/Makefile
    623export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
    624
    625config: outputmakefile scripts_basic FORCE
    626	$(Q)$(MAKE) $(build)=scripts/kconfig $@
    627
    628%config: outputmakefile scripts_basic FORCE
    629	$(Q)$(MAKE) $(build)=scripts/kconfig $@
    630
    631else #!config-build
    632# ===========================================================================
    633# Build targets only - this includes vmlinux, arch specific targets, clean
    634# targets and others. In general all targets except *config targets.
    635
    636# If building an external module we do not care about the all: rule
    637# but instead __all depend on modules
    638PHONY += all
    639ifeq ($(KBUILD_EXTMOD),)
    640__all: all
    641else
    642__all: modules
    643endif
    644
    645# Decide whether to build built-in, modular, or both.
    646# Normally, just do built-in.
    647
    648KBUILD_MODULES :=
    649KBUILD_BUILTIN := 1
    650
    651# If we have only "make modules", don't compile built-in objects.
    652ifeq ($(MAKECMDGOALS),modules)
    653  KBUILD_BUILTIN :=
    654endif
    655
    656# If we have "make <whatever> modules", compile modules
    657# in addition to whatever we do anyway.
    658# Just "make" or "make all" shall build modules as well
    659
    660ifneq ($(filter all modules nsdeps %compile_commands.json clang-%,$(MAKECMDGOALS)),)
    661  KBUILD_MODULES := 1
    662endif
    663
    664ifeq ($(MAKECMDGOALS),)
    665  KBUILD_MODULES := 1
    666endif
    667
    668export KBUILD_MODULES KBUILD_BUILTIN
    669
    670ifdef need-config
    671include include/config/auto.conf
    672endif
    673
    674ifeq ($(KBUILD_EXTMOD),)
    675# Objects we will link into vmlinux / subdirs we need to visit
    676core-y		:= init/ usr/ arch/$(SRCARCH)/
    677drivers-y	:= drivers/ sound/
    678drivers-$(CONFIG_SAMPLES) += samples/
    679drivers-$(CONFIG_NET) += net/
    680drivers-y	+= virt/
    681libs-y		:= lib/
    682endif # KBUILD_EXTMOD
    683
    684# The all: target is the default when no target is given on the
    685# command line.
    686# This allow a user to issue only 'make' to build a kernel including modules
    687# Defaults to vmlinux, but the arch makefile usually adds further targets
    688all: vmlinux
    689
    690CFLAGS_GCOV	:= -fprofile-arcs -ftest-coverage
    691ifdef CONFIG_CC_IS_GCC
    692CFLAGS_GCOV	+= -fno-tree-loop-im
    693endif
    694export CFLAGS_GCOV
    695
    696# The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later.
    697ifdef CONFIG_FUNCTION_TRACER
    698  CC_FLAGS_FTRACE := -pg
    699endif
    700
    701include $(srctree)/arch/$(SRCARCH)/Makefile
    702
    703ifdef need-config
    704ifdef may-sync-config
    705# Read in dependencies to all Kconfig* files, make sure to run syncconfig if
    706# changes are detected. This should be included after arch/$(SRCARCH)/Makefile
    707# because some architectures define CROSS_COMPILE there.
    708include include/config/auto.conf.cmd
    709
    710$(KCONFIG_CONFIG):
    711	@echo >&2 '***'
    712	@echo >&2 '*** Configuration file "$@" not found!'
    713	@echo >&2 '***'
    714	@echo >&2 '*** Please run some configurator (e.g. "make oldconfig" or'
    715	@echo >&2 '*** "make menuconfig" or "make xconfig").'
    716	@echo >&2 '***'
    717	@/bin/false
    718
    719# The actual configuration files used during the build are stored in
    720# include/generated/ and include/config/. Update them if .config is newer than
    721# include/config/auto.conf (which mirrors .config).
    722#
    723# This exploits the 'multi-target pattern rule' trick.
    724# The syncconfig should be executed only once to make all the targets.
    725# (Note: use the grouped target '&:' when we bump to GNU Make 4.3)
    726#
    727# Do not use $(call cmd,...) here. That would suppress prompts from syncconfig,
    728# so you cannot notice that Kconfig is waiting for the user input.
    729%/config/auto.conf %/config/auto.conf.cmd %/generated/autoconf.h: $(KCONFIG_CONFIG)
    730	$(Q)$(kecho) "  SYNC    $@"
    731	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
    732else # !may-sync-config
    733# External modules and some install targets need include/generated/autoconf.h
    734# and include/config/auto.conf but do not care if they are up-to-date.
    735# Use auto.conf to trigger the test
    736PHONY += include/config/auto.conf
    737
    738include/config/auto.conf:
    739	$(Q)test -e include/generated/autoconf.h -a -e $@ || (		\
    740	echo >&2;							\
    741	echo >&2 "  ERROR: Kernel configuration is invalid.";		\
    742	echo >&2 "         include/generated/autoconf.h or $@ are missing.";\
    743	echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix it.";	\
    744	echo >&2 ;							\
    745	/bin/false)
    746
    747endif # may-sync-config
    748endif # need-config
    749
    750KBUILD_CFLAGS	+= -fno-delete-null-pointer-checks
    751KBUILD_CFLAGS	+= $(call cc-disable-warning,frame-address,)
    752KBUILD_CFLAGS	+= $(call cc-disable-warning, format-truncation)
    753KBUILD_CFLAGS	+= $(call cc-disable-warning, format-overflow)
    754KBUILD_CFLAGS	+= $(call cc-disable-warning, address-of-packed-member)
    755
    756ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
    757KBUILD_CFLAGS += -O2
    758else ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3
    759KBUILD_CFLAGS += -O3
    760else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
    761KBUILD_CFLAGS += -Os
    762endif
    763
    764# Tell gcc to never replace conditional load with a non-conditional one
    765ifdef CONFIG_CC_IS_GCC
    766# gcc-10 renamed --param=allow-store-data-races=0 to
    767# -fno-allow-store-data-races.
    768KBUILD_CFLAGS	+= $(call cc-option,--param=allow-store-data-races=0)
    769KBUILD_CFLAGS	+= $(call cc-option,-fno-allow-store-data-races)
    770endif
    771
    772ifdef CONFIG_READABLE_ASM
    773# Disable optimizations that make assembler listings hard to read.
    774# reorder blocks reorders the control in the function
    775# ipa clone creates specialized cloned functions
    776# partial inlining inlines only parts of functions
    777KBUILD_CFLAGS += -fno-reorder-blocks -fno-ipa-cp-clone -fno-partial-inlining
    778endif
    779
    780ifneq ($(CONFIG_FRAME_WARN),0)
    781KBUILD_CFLAGS += -Wframe-larger-than=$(CONFIG_FRAME_WARN)
    782endif
    783
    784stackp-flags-y                                    := -fno-stack-protector
    785stackp-flags-$(CONFIG_STACKPROTECTOR)             := -fstack-protector
    786stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG)      := -fstack-protector-strong
    787
    788KBUILD_CFLAGS += $(stackp-flags-y)
    789
    790KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
    791KBUILD_CFLAGS-$(CONFIG_CC_NO_ARRAY_BOUNDS) += -Wno-array-bounds
    792KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
    793
    794ifdef CONFIG_CC_IS_CLANG
    795KBUILD_CPPFLAGS += -Qunused-arguments
    796# The kernel builds with '-std=gnu11' so use of GNU extensions is acceptable.
    797KBUILD_CFLAGS += -Wno-gnu
    798else
    799
    800# gcc inanely warns about local variables called 'main'
    801KBUILD_CFLAGS += -Wno-main
    802endif
    803
    804# These warnings generated too much noise in a regular build.
    805# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
    806KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
    807KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
    808
    809# These result in bogus false positives
    810KBUILD_CFLAGS += $(call cc-disable-warning, dangling-pointer)
    811
    812ifdef CONFIG_FRAME_POINTER
    813KBUILD_CFLAGS	+= -fno-omit-frame-pointer -fno-optimize-sibling-calls
    814else
    815# Some targets (ARM with Thumb2, for example), can't be built with frame
    816# pointers.  For those, we don't have FUNCTION_TRACER automatically
    817# select FRAME_POINTER.  However, FUNCTION_TRACER adds -pg, and this is
    818# incompatible with -fomit-frame-pointer with current GCC, so we don't use
    819# -fomit-frame-pointer with FUNCTION_TRACER.
    820ifndef CONFIG_FUNCTION_TRACER
    821KBUILD_CFLAGS	+= -fomit-frame-pointer
    822endif
    823endif
    824
    825# Initialize all stack variables with a 0xAA pattern.
    826ifdef CONFIG_INIT_STACK_ALL_PATTERN
    827KBUILD_CFLAGS	+= -ftrivial-auto-var-init=pattern
    828endif
    829
    830# Initialize all stack variables with a zero value.
    831ifdef CONFIG_INIT_STACK_ALL_ZERO
    832KBUILD_CFLAGS	+= -ftrivial-auto-var-init=zero
    833ifdef CONFIG_CC_IS_CLANG
    834# https://bugs.llvm.org/show_bug.cgi?id=45497
    835KBUILD_CFLAGS	+= -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
    836endif
    837endif
    838
    839# While VLAs have been removed, GCC produces unreachable stack probes
    840# for the randomize_kstack_offset feature. Disable it for all compilers.
    841KBUILD_CFLAGS	+= $(call cc-option, -fno-stack-clash-protection)
    842
    843# Clear used registers at func exit (to reduce data lifetime and ROP gadgets).
    844ifdef CONFIG_ZERO_CALL_USED_REGS
    845KBUILD_CFLAGS	+= -fzero-call-used-regs=used-gpr
    846endif
    847
    848ifdef CONFIG_FUNCTION_TRACER
    849ifdef CONFIG_FTRACE_MCOUNT_USE_CC
    850  CC_FLAGS_FTRACE	+= -mrecord-mcount
    851  ifdef CONFIG_HAVE_NOP_MCOUNT
    852    ifeq ($(call cc-option-yn, -mnop-mcount),y)
    853      CC_FLAGS_FTRACE	+= -mnop-mcount
    854      CC_FLAGS_USING	+= -DCC_USING_NOP_MCOUNT
    855    endif
    856  endif
    857endif
    858ifdef CONFIG_FTRACE_MCOUNT_USE_OBJTOOL
    859  CC_FLAGS_USING	+= -DCC_USING_NOP_MCOUNT
    860endif
    861ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
    862  ifdef CONFIG_HAVE_C_RECORDMCOUNT
    863    BUILD_C_RECORDMCOUNT := y
    864    export BUILD_C_RECORDMCOUNT
    865  endif
    866endif
    867ifdef CONFIG_HAVE_FENTRY
    868  # s390-linux-gnu-gcc did not support -mfentry until gcc-9.
    869  ifeq ($(call cc-option-yn, -mfentry),y)
    870    CC_FLAGS_FTRACE	+= -mfentry
    871    CC_FLAGS_USING	+= -DCC_USING_FENTRY
    872  endif
    873endif
    874export CC_FLAGS_FTRACE
    875KBUILD_CFLAGS	+= $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING)
    876KBUILD_AFLAGS	+= $(CC_FLAGS_USING)
    877endif
    878
    879# We trigger additional mismatches with less inlining
    880ifdef CONFIG_DEBUG_SECTION_MISMATCH
    881KBUILD_CFLAGS += -fno-inline-functions-called-once
    882endif
    883
    884ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
    885KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
    886LDFLAGS_vmlinux += --gc-sections
    887endif
    888
    889ifdef CONFIG_SHADOW_CALL_STACK
    890CC_FLAGS_SCS	:= -fsanitize=shadow-call-stack
    891KBUILD_CFLAGS	+= $(CC_FLAGS_SCS)
    892export CC_FLAGS_SCS
    893endif
    894
    895ifdef CONFIG_LTO_CLANG
    896ifdef CONFIG_LTO_CLANG_THIN
    897CC_FLAGS_LTO	:= -flto=thin -fsplit-lto-unit
    898KBUILD_LDFLAGS	+= --thinlto-cache-dir=$(extmod_prefix).thinlto-cache
    899else
    900CC_FLAGS_LTO	:= -flto
    901endif
    902CC_FLAGS_LTO	+= -fvisibility=hidden
    903
    904# Limit inlining across translation units to reduce binary size
    905KBUILD_LDFLAGS += -mllvm -import-instr-limit=5
    906
    907# Check for frame size exceeding threshold during prolog/epilog insertion
    908# when using lld < 13.0.0.
    909ifneq ($(CONFIG_FRAME_WARN),0)
    910ifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 130000; echo $$?),0)
    911KBUILD_LDFLAGS	+= -plugin-opt=-warn-stack-size=$(CONFIG_FRAME_WARN)
    912endif
    913endif
    914endif
    915
    916ifdef CONFIG_LTO
    917KBUILD_CFLAGS	+= -fno-lto $(CC_FLAGS_LTO)
    918KBUILD_AFLAGS	+= -fno-lto
    919export CC_FLAGS_LTO
    920endif
    921
    922ifdef CONFIG_CFI_CLANG
    923CC_FLAGS_CFI	:= -fsanitize=cfi \
    924		   -fsanitize-cfi-cross-dso \
    925		   -fno-sanitize-cfi-canonical-jump-tables \
    926		   -fno-sanitize-trap=cfi \
    927		   -fno-sanitize-blacklist
    928
    929ifdef CONFIG_CFI_PERMISSIVE
    930CC_FLAGS_CFI	+= -fsanitize-recover=cfi
    931endif
    932
    933# If LTO flags are filtered out, we must also filter out CFI.
    934CC_FLAGS_LTO	+= $(CC_FLAGS_CFI)
    935KBUILD_CFLAGS	+= $(CC_FLAGS_CFI)
    936export CC_FLAGS_CFI
    937endif
    938
    939ifdef CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B
    940KBUILD_CFLAGS += -falign-functions=64
    941endif
    942
    943# arch Makefile may override CC so keep this after arch Makefile is included
    944NOSTDINC_FLAGS += -nostdinc
    945
    946# warn about C99 declaration after statement
    947KBUILD_CFLAGS += -Wdeclaration-after-statement
    948
    949# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
    950KBUILD_CFLAGS += -Wvla
    951
    952# disable pointer signed / unsigned warnings in gcc 4.0
    953KBUILD_CFLAGS += -Wno-pointer-sign
    954
    955# In order to make sure new function cast mismatches are not introduced
    956# in the kernel (to avoid tripping CFI checking), the kernel should be
    957# globally built with -Wcast-function-type.
    958KBUILD_CFLAGS += $(call cc-option, -Wcast-function-type)
    959
    960# disable stringop warnings in gcc 8+
    961KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
    962
    963# We'll want to enable this eventually, but it's not going away for 5.7 at least
    964KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow)
    965
    966# Another good warning that we'll want to enable eventually
    967KBUILD_CFLAGS += $(call cc-disable-warning, restrict)
    968
    969# Enabled with W=2, disabled by default as noisy
    970ifdef CONFIG_CC_IS_GCC
    971KBUILD_CFLAGS += -Wno-maybe-uninitialized
    972endif
    973
    974ifdef CONFIG_CC_IS_GCC
    975# The allocators already balk at large sizes, so silence the compiler
    976# warnings for bounds checks involving those possible values. While
    977# -Wno-alloc-size-larger-than would normally be used here, earlier versions
    978# of gcc (<9.1) weirdly don't handle the option correctly when _other_
    979# warnings are produced (?!). Using -Walloc-size-larger-than=SIZE_MAX
    980# doesn't work (as it is documented to), silently resolving to "0" prior to
    981# version 9.1 (and producing an error more recently). Numeric values larger
    982# than PTRDIFF_MAX also don't work prior to version 9.1, which are silently
    983# ignored, continuing to default to PTRDIFF_MAX. So, left with no other
    984# choice, we must perform a versioned check to disable this warning.
    985# https://lore.kernel.org/lkml/20210824115859.187f272f@canb.auug.org.au
    986KBUILD_CFLAGS += $(call cc-ifversion, -ge, 0901, -Wno-alloc-size-larger-than)
    987endif
    988
    989# disable invalid "can't wrap" optimizations for signed / pointers
    990KBUILD_CFLAGS	+= -fno-strict-overflow
    991
    992# Make sure -fstack-check isn't enabled (like gentoo apparently did)
    993KBUILD_CFLAGS  += -fno-stack-check
    994
    995# conserve stack if available
    996ifdef CONFIG_CC_IS_GCC
    997KBUILD_CFLAGS   += -fconserve-stack
    998endif
    999
   1000# Prohibit date/time macros, which would make the build non-deterministic
   1001KBUILD_CFLAGS   += -Werror=date-time
   1002
   1003# enforce correct pointer usage
   1004KBUILD_CFLAGS   += $(call cc-option,-Werror=incompatible-pointer-types)
   1005
   1006# Require designated initializers for all marked structures
   1007KBUILD_CFLAGS   += $(call cc-option,-Werror=designated-init)
   1008
   1009# change __FILE__ to the relative path from the srctree
   1010KBUILD_CPPFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
   1011
   1012# include additional Makefiles when needed
   1013include-y			:= scripts/Makefile.extrawarn
   1014include-$(CONFIG_DEBUG_INFO)	+= scripts/Makefile.debug
   1015include-$(CONFIG_KASAN)		+= scripts/Makefile.kasan
   1016include-$(CONFIG_KCSAN)		+= scripts/Makefile.kcsan
   1017include-$(CONFIG_UBSAN)		+= scripts/Makefile.ubsan
   1018include-$(CONFIG_KCOV)		+= scripts/Makefile.kcov
   1019include-$(CONFIG_RANDSTRUCT)	+= scripts/Makefile.randstruct
   1020include-$(CONFIG_GCC_PLUGINS)	+= scripts/Makefile.gcc-plugins
   1021
   1022include $(addprefix $(srctree)/, $(include-y))
   1023
   1024# scripts/Makefile.gcc-plugins is intentionally included last.
   1025# Do not add $(call cc-option,...) below this line. When you build the kernel
   1026# from the clean source tree, the GCC plugins do not exist at this point.
   1027
   1028# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
   1029KBUILD_CPPFLAGS += $(KCPPFLAGS)
   1030KBUILD_AFLAGS   += $(KAFLAGS)
   1031KBUILD_CFLAGS   += $(KCFLAGS)
   1032
   1033KBUILD_LDFLAGS_MODULE += --build-id=sha1
   1034LDFLAGS_vmlinux += --build-id=sha1
   1035
   1036ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
   1037LDFLAGS_vmlinux	+= $(call ld-option, -X,)
   1038endif
   1039
   1040ifeq ($(CONFIG_RELR),y)
   1041LDFLAGS_vmlinux	+= --pack-dyn-relocs=relr --use-android-relr-tags
   1042endif
   1043
   1044# We never want expected sections to be placed heuristically by the
   1045# linker. All sections should be explicitly named in the linker script.
   1046ifdef CONFIG_LD_ORPHAN_WARN
   1047LDFLAGS_vmlinux += --orphan-handling=warn
   1048endif
   1049
   1050# Align the bit size of userspace programs with the kernel
   1051KBUILD_USERCFLAGS  += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
   1052KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
   1053
   1054# make the checker run with the right architecture
   1055CHECKFLAGS += --arch=$(ARCH)
   1056
   1057# insure the checker run with the right endianness
   1058CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)
   1059
   1060# the checker needs the correct machine size
   1061CHECKFLAGS += $(if $(CONFIG_64BIT),-m64,-m32)
   1062
   1063# Default kernel image to build when no specific target is given.
   1064# KBUILD_IMAGE may be overruled on the command line or
   1065# set in the environment
   1066# Also any assignments in arch/$(ARCH)/Makefile take precedence over
   1067# this default value
   1068export KBUILD_IMAGE ?= vmlinux
   1069
   1070#
   1071# INSTALL_PATH specifies where to place the updated kernel and system map
   1072# images. Default is /boot, but you can set it to other values
   1073export	INSTALL_PATH ?= /boot
   1074
   1075#
   1076# INSTALL_DTBS_PATH specifies a prefix for relocations required by build roots.
   1077# Like INSTALL_MOD_PATH, it isn't defined in the Makefile, but can be passed as
   1078# an argument if needed. Otherwise it defaults to the kernel install path
   1079#
   1080export INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE)
   1081
   1082#
   1083# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
   1084# relocations required by build roots.  This is not defined in the
   1085# makefile but the argument can be passed to make if needed.
   1086#
   1087
   1088MODLIB	= $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
   1089export MODLIB
   1090
   1091PHONY += prepare0
   1092
   1093export extmod_prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)
   1094export MODORDER := $(extmod_prefix)modules.order
   1095export MODULES_NSDEPS := $(extmod_prefix)modules.nsdeps
   1096
   1097ifeq ($(KBUILD_EXTMOD),)
   1098core-y			+= kernel/ certs/ mm/ fs/ ipc/ security/ crypto/
   1099core-$(CONFIG_BLOCK)	+= block/
   1100
   1101vmlinux-dirs	:= $(patsubst %/,%,$(filter %/, \
   1102		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
   1103		     $(libs-y) $(libs-m)))
   1104
   1105vmlinux-alldirs	:= $(sort $(vmlinux-dirs) Documentation \
   1106		     $(patsubst %/,%,$(filter %/, $(core-) \
   1107			$(drivers-) $(libs-))))
   1108
   1109subdir-modorder := $(addsuffix modules.order,$(filter %/, \
   1110			$(core-y) $(core-m) $(libs-y) $(libs-m) \
   1111			$(drivers-y) $(drivers-m)))
   1112
   1113build-dirs	:= $(vmlinux-dirs)
   1114clean-dirs	:= $(vmlinux-alldirs)
   1115
   1116# Externally visible symbols (used by link-vmlinux.sh)
   1117KBUILD_VMLINUX_OBJS := $(head-y) $(patsubst %/,%/built-in.a, $(core-y))
   1118KBUILD_VMLINUX_OBJS += $(addsuffix built-in.a, $(filter %/, $(libs-y)))
   1119ifdef CONFIG_MODULES
   1120KBUILD_VMLINUX_OBJS += $(patsubst %/, %/lib.a, $(filter %/, $(libs-y)))
   1121KBUILD_VMLINUX_LIBS := $(filter-out %/, $(libs-y))
   1122else
   1123KBUILD_VMLINUX_LIBS := $(patsubst %/,%/lib.a, $(libs-y))
   1124endif
   1125KBUILD_VMLINUX_OBJS += $(patsubst %/,%/built-in.a, $(drivers-y))
   1126
   1127export KBUILD_VMLINUX_OBJS KBUILD_VMLINUX_LIBS
   1128export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
   1129# used by scripts/Makefile.package
   1130export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
   1131
   1132vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
   1133
   1134# Recurse until adjust_autoksyms.sh is satisfied
   1135PHONY += autoksyms_recursive
   1136ifdef CONFIG_TRIM_UNUSED_KSYMS
   1137# For the kernel to actually contain only the needed exported symbols,
   1138# we have to build modules as well to determine what those symbols are.
   1139# (this can be evaluated only once include/config/auto.conf has been included)
   1140KBUILD_MODULES := 1
   1141
   1142autoksyms_recursive: descend modules.order
   1143	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
   1144	  "$(MAKE) -f $(srctree)/Makefile autoksyms_recursive"
   1145endif
   1146
   1147autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)
   1148
   1149quiet_cmd_autoksyms_h = GEN     $@
   1150      cmd_autoksyms_h = mkdir -p $(dir $@); \
   1151			$(CONFIG_SHELL) $(srctree)/scripts/gen_autoksyms.sh $@
   1152
   1153$(autoksyms_h):
   1154	$(call cmd,autoksyms_h)
   1155
   1156ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
   1157
   1158# Final link of vmlinux with optional arch pass after final link
   1159cmd_link-vmlinux =                                                 \
   1160	$(CONFIG_SHELL) $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)";    \
   1161	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
   1162
   1163vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
   1164	+$(call if_changed_dep,link-vmlinux)
   1165
   1166targets := vmlinux
   1167
   1168# The actual objects are generated when descending,
   1169# make sure no implicit rule kicks in
   1170$(sort $(vmlinux-deps) $(subdir-modorder)): descend ;
   1171
   1172filechk_kernel.release = \
   1173	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
   1174
   1175# Store (new) KERNELRELEASE string in include/config/kernel.release
   1176include/config/kernel.release: FORCE
   1177	$(call filechk,kernel.release)
   1178
   1179# Additional helpers built in scripts/
   1180# Carefully list dependencies so we do not try to build scripts twice
   1181# in parallel
   1182PHONY += scripts
   1183scripts: scripts_basic scripts_dtc
   1184	$(Q)$(MAKE) $(build)=$(@)
   1185
   1186# Things we need to do before we recursively start building the kernel
   1187# or the modules are listed in "prepare".
   1188# A multi level approach is used. prepareN is processed before prepareN-1.
   1189# archprepare is used in arch Makefiles and when processed asm symlink,
   1190# version.h and scripts_basic is processed / created.
   1191
   1192PHONY += prepare archprepare
   1193
   1194archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
   1195	asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h \
   1196	include/generated/autoconf.h remove-stale-files
   1197
   1198prepare0: archprepare
   1199	$(Q)$(MAKE) $(build)=scripts/mod
   1200	$(Q)$(MAKE) $(build)=.
   1201
   1202# All the preparing..
   1203prepare: prepare0
   1204
   1205PHONY += remove-stale-files
   1206remove-stale-files:
   1207	$(Q)$(srctree)/scripts/remove-stale-files
   1208
   1209# Support for using generic headers in asm-generic
   1210asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj
   1211
   1212PHONY += asm-generic uapi-asm-generic
   1213asm-generic: uapi-asm-generic
   1214	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm \
   1215	generic=include/asm-generic
   1216uapi-asm-generic:
   1217	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \
   1218	generic=include/uapi/asm-generic
   1219
   1220# Generate some files
   1221# ---------------------------------------------------------------------------
   1222
   1223# KERNELRELEASE can change from a few different places, meaning version.h
   1224# needs to be updated, so this check is forced on all builds
   1225
   1226uts_len := 64
   1227define filechk_utsrelease.h
   1228	if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
   1229	  echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2;    \
   1230	  exit 1;                                                         \
   1231	fi;                                                               \
   1232	echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
   1233endef
   1234
   1235define filechk_version.h
   1236	if [ $(SUBLEVEL) -gt 255 ]; then                                 \
   1237		echo \#define LINUX_VERSION_CODE $(shell                 \
   1238		expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + 255); \
   1239	else                                                             \
   1240		echo \#define LINUX_VERSION_CODE $(shell                 \
   1241		expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
   1242	fi;                                                              \
   1243	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) +  \
   1244	((c) > 255 ? 255 : (c)))';                                       \
   1245	echo \#define LINUX_VERSION_MAJOR $(VERSION);                    \
   1246	echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL);            \
   1247	echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL)
   1248endef
   1249
   1250$(version_h): PATCHLEVEL := $(or $(PATCHLEVEL), 0)
   1251$(version_h): SUBLEVEL := $(or $(SUBLEVEL), 0)
   1252$(version_h): FORCE
   1253	$(call filechk,version.h)
   1254
   1255include/generated/utsrelease.h: include/config/kernel.release FORCE
   1256	$(call filechk,utsrelease.h)
   1257
   1258PHONY += headerdep
   1259headerdep:
   1260	$(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \
   1261	$(srctree)/scripts/headerdep.pl -I$(srctree)/include
   1262
   1263# ---------------------------------------------------------------------------
   1264# Kernel headers
   1265
   1266#Default location for installed headers
   1267export INSTALL_HDR_PATH = $(objtree)/usr
   1268
   1269quiet_cmd_headers_install = INSTALL $(INSTALL_HDR_PATH)/include
   1270      cmd_headers_install = \
   1271	mkdir -p $(INSTALL_HDR_PATH); \
   1272	rsync -mrl --include='*/' --include='*\.h' --exclude='*' \
   1273	usr/include $(INSTALL_HDR_PATH)
   1274
   1275PHONY += headers_install
   1276headers_install: headers
   1277	$(call cmd,headers_install)
   1278
   1279PHONY += archheaders archscripts
   1280
   1281hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
   1282
   1283PHONY += headers
   1284headers: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
   1285	$(if $(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/Kbuild),, \
   1286	  $(error Headers not exportable for the $(SRCARCH) architecture))
   1287	$(Q)$(MAKE) $(hdr-inst)=include/uapi
   1288	$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi
   1289
   1290ifdef CONFIG_HEADERS_INSTALL
   1291prepare: headers
   1292endif
   1293
   1294PHONY += scripts_unifdef
   1295scripts_unifdef: scripts_basic
   1296	$(Q)$(MAKE) $(build)=scripts scripts/unifdef
   1297
   1298# ---------------------------------------------------------------------------
   1299# Install
   1300
   1301# Many distributions have the custom install script, /sbin/installkernel.
   1302# If DKMS is installed, 'make install' will eventually recurse back
   1303# to this Makefile to build and install external modules.
   1304# Cancel sub_make_done so that options such as M=, V=, etc. are parsed.
   1305
   1306quiet_cmd_install = INSTALL $(INSTALL_PATH)
   1307      cmd_install = unset sub_make_done; $(srctree)/scripts/install.sh
   1308
   1309# ---------------------------------------------------------------------------
   1310# Tools
   1311
   1312ifdef CONFIG_OBJTOOL
   1313prepare: tools/objtool
   1314endif
   1315
   1316ifdef CONFIG_BPF
   1317ifdef CONFIG_DEBUG_INFO_BTF
   1318prepare: tools/bpf/resolve_btfids
   1319endif
   1320endif
   1321
   1322PHONY += resolve_btfids_clean
   1323
   1324resolve_btfids_O = $(abspath $(objtree))/tools/bpf/resolve_btfids
   1325
   1326# tools/bpf/resolve_btfids directory might not exist
   1327# in output directory, skip its clean in that case
   1328resolve_btfids_clean:
   1329ifneq ($(wildcard $(resolve_btfids_O)),)
   1330	$(Q)$(MAKE) -sC $(srctree)/tools/bpf/resolve_btfids O=$(resolve_btfids_O) clean
   1331endif
   1332
   1333# Clear a bunch of variables before executing the submake
   1334ifeq ($(quiet),silent_)
   1335tools_silent=s
   1336endif
   1337
   1338tools/: FORCE
   1339	$(Q)mkdir -p $(objtree)/tools
   1340	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/
   1341
   1342tools/%: FORCE
   1343	$(Q)mkdir -p $(objtree)/tools
   1344	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $*
   1345
   1346# ---------------------------------------------------------------------------
   1347# Kernel selftest
   1348
   1349PHONY += kselftest
   1350kselftest:
   1351	$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
   1352
   1353kselftest-%: FORCE
   1354	$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests $*
   1355
   1356PHONY += kselftest-merge
   1357kselftest-merge:
   1358	$(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!))
   1359	$(Q)find $(srctree)/tools/testing/selftests -name config | \
   1360		xargs $(srctree)/scripts/kconfig/merge_config.sh -m $(objtree)/.config
   1361	$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
   1362
   1363# ---------------------------------------------------------------------------
   1364# Devicetree files
   1365
   1366ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),)
   1367dtstree := arch/$(SRCARCH)/boot/dts
   1368endif
   1369
   1370ifneq ($(dtstree),)
   1371
   1372%.dtb: include/config/kernel.release scripts_dtc
   1373	$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
   1374
   1375%.dtbo: include/config/kernel.release scripts_dtc
   1376	$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
   1377
   1378PHONY += dtbs dtbs_install dtbs_check
   1379dtbs: include/config/kernel.release scripts_dtc
   1380	$(Q)$(MAKE) $(build)=$(dtstree)
   1381
   1382ifneq ($(filter dtbs_check, $(MAKECMDGOALS)),)
   1383export CHECK_DTBS=y
   1384dtbs: dt_binding_check
   1385endif
   1386
   1387dtbs_check: dtbs
   1388
   1389dtbs_install:
   1390	$(Q)$(MAKE) $(dtbinst)=$(dtstree) dst=$(INSTALL_DTBS_PATH)
   1391
   1392ifdef CONFIG_OF_EARLY_FLATTREE
   1393all: dtbs
   1394endif
   1395
   1396endif
   1397
   1398PHONY += scripts_dtc
   1399scripts_dtc: scripts_basic
   1400	$(Q)$(MAKE) $(build)=scripts/dtc
   1401
   1402ifneq ($(filter dt_binding_check, $(MAKECMDGOALS)),)
   1403export CHECK_DT_BINDING=y
   1404endif
   1405
   1406PHONY += dt_binding_check
   1407dt_binding_check: scripts_dtc
   1408	$(Q)$(MAKE) $(build)=Documentation/devicetree/bindings
   1409
   1410# ---------------------------------------------------------------------------
   1411# Modules
   1412
   1413ifdef CONFIG_MODULES
   1414
   1415# By default, build modules as well
   1416
   1417all: modules
   1418
   1419# When we're building modules with modversions, we need to consider
   1420# the built-in objects during the descend as well, in order to
   1421# make sure the checksums are up to date before we record them.
   1422ifdef CONFIG_MODVERSIONS
   1423  KBUILD_BUILTIN := 1
   1424endif
   1425
   1426# Build modules
   1427#
   1428# A module can be listed more than once in obj-m resulting in
   1429# duplicate lines in modules.order files.  Those are removed
   1430# using awk while concatenating to the final file.
   1431
   1432PHONY += modules
   1433modules: $(if $(KBUILD_BUILTIN),vmlinux) modules_check modules_prepare
   1434
   1435cmd_modules_order = $(AWK) '!x[$$0]++' $(real-prereqs) > $@
   1436
   1437modules.order: $(subdir-modorder) FORCE
   1438	$(call if_changed,modules_order)
   1439
   1440targets += modules.order
   1441
   1442# Target to prepare building external modules
   1443PHONY += modules_prepare
   1444modules_prepare: prepare
   1445	$(Q)$(MAKE) $(build)=scripts scripts/module.lds
   1446
   1447export modules_sign_only :=
   1448
   1449ifeq ($(CONFIG_MODULE_SIG),y)
   1450PHONY += modules_sign
   1451modules_sign: modules_install
   1452	@:
   1453
   1454# modules_sign is a subset of modules_install.
   1455# 'make modules_install modules_sign' is equivalent to 'make modules_install'.
   1456ifeq ($(filter modules_install,$(MAKECMDGOALS)),)
   1457modules_sign_only := y
   1458endif
   1459endif
   1460
   1461modinst_pre :=
   1462ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
   1463modinst_pre := __modinst_pre
   1464endif
   1465
   1466modules_install: $(modinst_pre)
   1467PHONY += __modinst_pre
   1468__modinst_pre:
   1469	@rm -rf $(MODLIB)/kernel
   1470	@rm -f $(MODLIB)/source
   1471	@mkdir -p $(MODLIB)/kernel
   1472	@ln -s $(abspath $(srctree)) $(MODLIB)/source
   1473	@if [ ! $(objtree) -ef  $(MODLIB)/build ]; then \
   1474		rm -f $(MODLIB)/build ; \
   1475		ln -s $(CURDIR) $(MODLIB)/build ; \
   1476	fi
   1477	@sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order
   1478	@cp -f modules.builtin $(MODLIB)/
   1479	@cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
   1480
   1481endif # CONFIG_MODULES
   1482
   1483###
   1484# Cleaning is done on three levels.
   1485# make clean     Delete most generated files
   1486#                Leave enough to build external modules
   1487# make mrproper  Delete the current configuration, and all generated files
   1488# make distclean Remove editor backup files, patch leftover files and the like
   1489
   1490# Directories & files removed with 'make clean'
   1491CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \
   1492	       modules.builtin modules.builtin.modinfo modules.nsdeps \
   1493	       compile_commands.json .thinlto-cache
   1494
   1495# Directories & files removed with 'make mrproper'
   1496MRPROPER_FILES += include/config include/generated          \
   1497		  arch/$(SRCARCH)/include/generated .objdiff \
   1498		  debian snap tar-install \
   1499		  .config .config.old .version \
   1500		  Module.symvers \
   1501		  certs/signing_key.pem \
   1502		  certs/x509.genkey \
   1503		  vmlinux-gdb.py \
   1504		  *.spec
   1505
   1506# clean - Delete most, but leave enough to build external modules
   1507#
   1508clean: rm-files := $(CLEAN_FILES)
   1509
   1510PHONY += archclean vmlinuxclean
   1511
   1512vmlinuxclean:
   1513	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean
   1514	$(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean)
   1515
   1516clean: archclean vmlinuxclean resolve_btfids_clean
   1517
   1518# mrproper - Delete all generated files, including .config
   1519#
   1520mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
   1521mrproper-dirs      := $(addprefix _mrproper_,scripts)
   1522
   1523PHONY += $(mrproper-dirs) mrproper
   1524$(mrproper-dirs):
   1525	$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
   1526
   1527mrproper: clean $(mrproper-dirs)
   1528	$(call cmd,rmfiles)
   1529
   1530# distclean
   1531#
   1532PHONY += distclean
   1533
   1534distclean: mrproper
   1535	@find . $(RCS_FIND_IGNORE) \
   1536		\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
   1537		-o -name '*.bak' -o -name '#*#' -o -name '*%' \
   1538		-o -name 'core' -o -name tags -o -name TAGS -o -name 'cscope*' \
   1539		-o -name GPATH -o -name GRTAGS -o -name GSYMS -o -name GTAGS \) \
   1540		-type f -print | xargs rm -f
   1541
   1542
   1543# Packaging of the kernel to various formats
   1544# ---------------------------------------------------------------------------
   1545
   1546%src-pkg: FORCE
   1547	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
   1548%pkg: include/config/kernel.release FORCE
   1549	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
   1550
   1551# Brief documentation of the typical targets used
   1552# ---------------------------------------------------------------------------
   1553
   1554boards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig)
   1555boards := $(sort $(notdir $(boards)))
   1556board-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig))
   1557board-dirs := $(sort $(notdir $(board-dirs:/=)))
   1558
   1559PHONY += help
   1560help:
   1561	@echo  'Cleaning targets:'
   1562	@echo  '  clean		  - Remove most generated files but keep the config and'
   1563	@echo  '                    enough build support to build external modules'
   1564	@echo  '  mrproper	  - Remove all generated files + config + various backup files'
   1565	@echo  '  distclean	  - mrproper + remove editor backup and patch files'
   1566	@echo  ''
   1567	@echo  'Configuration targets:'
   1568	@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
   1569	@echo  ''
   1570	@echo  'Other generic targets:'
   1571	@echo  '  all		  - Build all targets marked with [*]'
   1572	@echo  '* vmlinux	  - Build the bare kernel'
   1573	@echo  '* modules	  - Build all modules'
   1574	@echo  '  modules_install - Install all modules to INSTALL_MOD_PATH (default: /)'
   1575	@echo  '  dir/            - Build all files in dir and below'
   1576	@echo  '  dir/file.[ois]  - Build specified target only'
   1577	@echo  '  dir/file.ll     - Build the LLVM assembly file'
   1578	@echo  '                    (requires compiler support for LLVM assembly generation)'
   1579	@echo  '  dir/file.lst    - Build specified mixed source/assembly target only'
   1580	@echo  '                    (requires a recent binutils and recent build (System.map))'
   1581	@echo  '  dir/file.ko     - Build module including final link'
   1582	@echo  '  modules_prepare - Set up for building external modules'
   1583	@echo  '  tags/TAGS	  - Generate tags file for editors'
   1584	@echo  '  cscope	  - Generate cscope index'
   1585	@echo  '  gtags           - Generate GNU GLOBAL index'
   1586	@echo  '  kernelrelease	  - Output the release version string (use with make -s)'
   1587	@echo  '  kernelversion	  - Output the version stored in Makefile (use with make -s)'
   1588	@echo  '  image_name	  - Output the image name (use with make -s)'
   1589	@echo  '  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
   1590	 echo  '                    (default: $(INSTALL_HDR_PATH))'; \
   1591	 echo  ''
   1592	@echo  'Static analysers:'
   1593	@echo  '  checkstack      - Generate a list of stack hogs'
   1594	@echo  '  versioncheck    - Sanity check on version.h usage'
   1595	@echo  '  includecheck    - Check for duplicate included header files'
   1596	@echo  '  export_report   - List the usages of all exported symbols'
   1597	@echo  '  headerdep       - Detect inclusion cycles in headers'
   1598	@echo  '  coccicheck      - Check with Coccinelle'
   1599	@echo  '  clang-analyzer  - Check with clang static analyzer'
   1600	@echo  '  clang-tidy      - Check with clang-tidy'
   1601	@echo  ''
   1602	@echo  'Tools:'
   1603	@echo  '  nsdeps          - Generate missing symbol namespace dependencies'
   1604	@echo  ''
   1605	@echo  'Kernel selftest:'
   1606	@echo  '  kselftest         - Build and run kernel selftest'
   1607	@echo  '                      Build, install, and boot kernel before'
   1608	@echo  '                      running kselftest on it'
   1609	@echo  '                      Run as root for full coverage'
   1610	@echo  '  kselftest-all     - Build kernel selftest'
   1611	@echo  '  kselftest-install - Build and install kernel selftest'
   1612	@echo  '  kselftest-clean   - Remove all generated kselftest files'
   1613	@echo  '  kselftest-merge   - Merge all the config dependencies of'
   1614	@echo  '		      kselftest to existing .config.'
   1615	@echo  ''
   1616	@$(if $(dtstree), \
   1617		echo 'Devicetree:'; \
   1618		echo '* dtbs             - Build device tree blobs for enabled boards'; \
   1619		echo '  dtbs_install     - Install dtbs to $(INSTALL_DTBS_PATH)'; \
   1620		echo '  dt_binding_check - Validate device tree binding documents'; \
   1621		echo '  dtbs_check       - Validate device tree source files';\
   1622		echo '')
   1623
   1624	@echo 'Userspace tools targets:'
   1625	@echo '  use "make tools/help"'
   1626	@echo '  or  "cd tools; make help"'
   1627	@echo  ''
   1628	@echo  'Kernel packaging:'
   1629	@$(MAKE) -f $(srctree)/scripts/Makefile.package help
   1630	@echo  ''
   1631	@echo  'Documentation targets:'
   1632	@$(MAKE) -f $(srctree)/Documentation/Makefile dochelp
   1633	@echo  ''
   1634	@echo  'Architecture specific targets ($(SRCARCH)):'
   1635	@$(or $(archhelp),\
   1636		echo '  No architecture specific help defined for $(SRCARCH)')
   1637	@echo  ''
   1638	@$(if $(boards), \
   1639		$(foreach b, $(boards), \
   1640		printf "  %-27s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
   1641		echo '')
   1642	@$(if $(board-dirs), \
   1643		$(foreach b, $(board-dirs), \
   1644		printf "  %-16s - Show %s-specific targets\\n" help-$(b) $(b);) \
   1645		printf "  %-16s - Show all of the above\\n" help-boards; \
   1646		echo '')
   1647
   1648	@echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
   1649	@echo  '  make V=2   [targets] 2 => give reason for rebuild of target'
   1650	@echo  '  make O=dir [targets] Locate all output files in "dir", including .config'
   1651	@echo  '  make C=1   [targets] Check re-compiled c source with $$CHECK'
   1652	@echo  '                       (sparse by default)'
   1653	@echo  '  make C=2   [targets] Force check of all c source with $$CHECK'
   1654	@echo  '  make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
   1655	@echo  '  make W=n   [targets] Enable extra build checks, n=1,2,3 where'
   1656	@echo  '		1: warnings which may be relevant and do not occur too often'
   1657	@echo  '		2: warnings which occur quite often but may still be relevant'
   1658	@echo  '		3: more obscure warnings, can most likely be ignored'
   1659	@echo  '		e: warnings are being treated as errors'
   1660	@echo  '		Multiple levels can be combined with W=12 or W=123'
   1661	@echo  ''
   1662	@echo  'Execute "make" or "make all" to build all targets marked with [*] '
   1663	@echo  'For further info see the ./README file'
   1664
   1665
   1666help-board-dirs := $(addprefix help-,$(board-dirs))
   1667
   1668help-boards: $(help-board-dirs)
   1669
   1670boards-per-dir = $(sort $(notdir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/$*/*_defconfig)))
   1671
   1672$(help-board-dirs): help-%:
   1673	@echo  'Architecture specific targets ($(SRCARCH) $*):'
   1674	@$(if $(boards-per-dir), \
   1675		$(foreach b, $(boards-per-dir), \
   1676		printf "  %-24s - Build for %s\\n" $*/$(b) $(subst _defconfig,,$(b));) \
   1677		echo '')
   1678
   1679
   1680# Documentation targets
   1681# ---------------------------------------------------------------------------
   1682DOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
   1683	       linkcheckdocs dochelp refcheckdocs
   1684PHONY += $(DOC_TARGETS)
   1685$(DOC_TARGETS):
   1686	$(Q)$(MAKE) $(build)=Documentation $@
   1687
   1688# Misc
   1689# ---------------------------------------------------------------------------
   1690
   1691PHONY += scripts_gdb
   1692scripts_gdb: prepare0
   1693	$(Q)$(MAKE) $(build)=scripts/gdb
   1694	$(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py)
   1695
   1696ifdef CONFIG_GDB_SCRIPTS
   1697all: scripts_gdb
   1698endif
   1699
   1700else # KBUILD_EXTMOD
   1701
   1702###
   1703# External module support.
   1704# When building external modules the kernel used as basis is considered
   1705# read-only, and no consistency checks are made and the make
   1706# system is not used on the basis kernel. If updates are required
   1707# in the basis kernel ordinary make commands (without M=...) must be used.
   1708
   1709# We are always building only modules.
   1710KBUILD_BUILTIN :=
   1711KBUILD_MODULES := 1
   1712
   1713build-dirs := $(KBUILD_EXTMOD)
   1714$(MODORDER): descend
   1715	@:
   1716
   1717compile_commands.json: $(extmod_prefix)compile_commands.json
   1718PHONY += compile_commands.json
   1719
   1720clean-dirs := $(KBUILD_EXTMOD)
   1721clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers $(KBUILD_EXTMOD)/modules.nsdeps \
   1722	$(KBUILD_EXTMOD)/compile_commands.json $(KBUILD_EXTMOD)/.thinlto-cache
   1723
   1724PHONY += prepare
   1725# now expand this into a simple variable to reduce the cost of shell evaluations
   1726prepare: CC_VERSION_TEXT := $(CC_VERSION_TEXT)
   1727prepare:
   1728	@if [ "$(CC_VERSION_TEXT)" != "$(CONFIG_CC_VERSION_TEXT)" ]; then \
   1729		echo >&2 "warning: the compiler differs from the one used to build the kernel"; \
   1730		echo >&2 "  The kernel was built by: $(CONFIG_CC_VERSION_TEXT)"; \
   1731		echo >&2 "  You are using:           $(CC_VERSION_TEXT)"; \
   1732	fi
   1733
   1734PHONY += help
   1735help:
   1736	@echo  '  Building external modules.'
   1737	@echo  '  Syntax: make -C path/to/kernel/src M=$$PWD target'
   1738	@echo  ''
   1739	@echo  '  modules         - default target, build the module(s)'
   1740	@echo  '  modules_install - install the module'
   1741	@echo  '  clean           - remove generated files in module directory only'
   1742	@echo  ''
   1743
   1744# no-op for external module builds
   1745PHONY += modules_prepare
   1746
   1747endif # KBUILD_EXTMOD
   1748
   1749# ---------------------------------------------------------------------------
   1750# Modules
   1751
   1752PHONY += modules modules_install
   1753
   1754ifdef CONFIG_MODULES
   1755
   1756modules: modules_check
   1757	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
   1758
   1759PHONY += modules_check
   1760modules_check: $(MODORDER)
   1761	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh $<
   1762
   1763quiet_cmd_depmod = DEPMOD  $(MODLIB)
   1764      cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \
   1765                   $(KERNELRELEASE)
   1766
   1767modules_install:
   1768	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
   1769	$(call cmd,depmod)
   1770
   1771else # CONFIG_MODULES
   1772
   1773# Modules not configured
   1774# ---------------------------------------------------------------------------
   1775
   1776modules modules_install:
   1777	@echo >&2 '***'
   1778	@echo >&2 '*** The present kernel configuration has modules disabled.'
   1779	@echo >&2 '*** To use the module feature, please run "make menuconfig" etc.'
   1780	@echo >&2 '*** to enable CONFIG_MODULES.'
   1781	@echo >&2 '***'
   1782	@exit 1
   1783
   1784endif # CONFIG_MODULES
   1785
   1786# Single targets
   1787# ---------------------------------------------------------------------------
   1788# To build individual files in subdirectories, you can do like this:
   1789#
   1790#   make foo/bar/baz.s
   1791#
   1792# The supported suffixes for single-target are listed in 'single-targets'
   1793#
   1794# To build only under specific subdirectories, you can do like this:
   1795#
   1796#   make foo/bar/baz/
   1797
   1798ifdef single-build
   1799
   1800# .ko is special because modpost is needed
   1801single-ko := $(sort $(filter %.ko, $(MAKECMDGOALS)))
   1802single-no-ko := $(filter-out $(single-ko), $(MAKECMDGOALS)) \
   1803		$(foreach x, o mod, $(patsubst %.ko, %.$x, $(single-ko)))
   1804
   1805$(single-ko): single_modpost
   1806	@:
   1807$(single-no-ko): descend
   1808	@:
   1809
   1810ifeq ($(KBUILD_EXTMOD),)
   1811# For the single build of in-tree modules, use a temporary file to avoid
   1812# the situation of modules_install installing an invalid modules.order.
   1813MODORDER := .modules.tmp
   1814endif
   1815
   1816PHONY += single_modpost
   1817single_modpost: $(single-no-ko) modules_prepare
   1818	$(Q){ $(foreach m, $(single-ko), echo $(extmod_prefix)$m;) } > $(MODORDER)
   1819	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
   1820
   1821KBUILD_MODULES := 1
   1822
   1823export KBUILD_SINGLE_TARGETS := $(addprefix $(extmod_prefix), $(single-no-ko))
   1824
   1825# trim unrelated directories
   1826build-dirs := $(foreach d, $(build-dirs), \
   1827			$(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d)))
   1828
   1829endif
   1830
   1831ifndef CONFIG_MODULES
   1832KBUILD_MODULES :=
   1833endif
   1834
   1835# Handle descending into subdirectories listed in $(build-dirs)
   1836# Preset locale variables to speed up the build process. Limit locale
   1837# tweaks to this spot to avoid wrong language settings when running
   1838# make menuconfig etc.
   1839# Error messages still appears in the original language
   1840PHONY += descend $(build-dirs)
   1841descend: $(build-dirs)
   1842$(build-dirs): prepare
   1843	$(Q)$(MAKE) $(build)=$@ \
   1844	single-build=$(if $(filter-out $@/, $(filter $@/%, $(KBUILD_SINGLE_TARGETS))),1) \
   1845	need-builtin=1 need-modorder=1
   1846
   1847clean-dirs := $(addprefix _clean_, $(clean-dirs))
   1848PHONY += $(clean-dirs) clean
   1849$(clean-dirs):
   1850	$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
   1851
   1852clean: $(clean-dirs)
   1853	$(call cmd,rmfiles)
   1854	@find $(or $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
   1855		\( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \
   1856		-o -name '*.ko.*' \
   1857		-o -name '*.dtb' -o -name '*.dtbo' -o -name '*.dtb.S' -o -name '*.dt.yaml' \
   1858		-o -name '*.dwo' -o -name '*.lst' \
   1859		-o -name '*.su' -o -name '*.mod' -o -name '*.usyms' \
   1860		-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
   1861		-o -name '*.lex.c' -o -name '*.tab.[ch]' \
   1862		-o -name '*.asn1.[ch]' \
   1863		-o -name '*.symtypes' -o -name 'modules.order' \
   1864		-o -name '.tmp_*' \
   1865		-o -name '*.c.[012]*.*' \
   1866		-o -name '*.ll' \
   1867		-o -name '*.gcno' \
   1868		-o -name '*.*.symversions' \) -type f -print | xargs rm -f
   1869
   1870# Generate tags for editors
   1871# ---------------------------------------------------------------------------
   1872quiet_cmd_tags = GEN     $@
   1873      cmd_tags = $(BASH) $(srctree)/scripts/tags.sh $@
   1874
   1875tags TAGS cscope gtags: FORCE
   1876	$(call cmd,tags)
   1877
   1878# Script to generate missing namespace dependencies
   1879# ---------------------------------------------------------------------------
   1880
   1881PHONY += nsdeps
   1882nsdeps: export KBUILD_NSDEPS=1
   1883nsdeps: modules
   1884	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/nsdeps
   1885
   1886# Clang Tooling
   1887# ---------------------------------------------------------------------------
   1888
   1889quiet_cmd_gen_compile_commands = GEN     $@
   1890      cmd_gen_compile_commands = $(PYTHON3) $< -a $(AR) -o $@ $(filter-out $<, $(real-prereqs))
   1891
   1892$(extmod_prefix)compile_commands.json: scripts/clang-tools/gen_compile_commands.py \
   1893	$(if $(KBUILD_EXTMOD),,$(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)) \
   1894	$(if $(CONFIG_MODULES), $(MODORDER)) FORCE
   1895	$(call if_changed,gen_compile_commands)
   1896
   1897targets += $(extmod_prefix)compile_commands.json
   1898
   1899PHONY += clang-tidy clang-analyzer
   1900
   1901ifdef CONFIG_CC_IS_CLANG
   1902quiet_cmd_clang_tools = CHECK   $<
   1903      cmd_clang_tools = $(PYTHON3) $(srctree)/scripts/clang-tools/run-clang-tools.py $@ $<
   1904
   1905clang-tidy clang-analyzer: $(extmod_prefix)compile_commands.json
   1906	$(call cmd,clang_tools)
   1907else
   1908clang-tidy clang-analyzer:
   1909	@echo "$@ requires CC=clang" >&2
   1910	@false
   1911endif
   1912
   1913# Scripts to check various things for consistency
   1914# ---------------------------------------------------------------------------
   1915
   1916PHONY += includecheck versioncheck coccicheck export_report
   1917
   1918includecheck:
   1919	find $(srctree)/* $(RCS_FIND_IGNORE) \
   1920		-name '*.[hcS]' -type f -print | sort \
   1921		| xargs $(PERL) -w $(srctree)/scripts/checkincludes.pl
   1922
   1923versioncheck:
   1924	find $(srctree)/* $(RCS_FIND_IGNORE) \
   1925		-name '*.[hcS]' -type f -print | sort \
   1926		| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
   1927
   1928coccicheck:
   1929	$(Q)$(BASH) $(srctree)/scripts/$@
   1930
   1931export_report:
   1932	$(PERL) $(srctree)/scripts/export_report.pl
   1933
   1934PHONY += checkstack kernelrelease kernelversion image_name
   1935
   1936# UML needs a little special treatment here.  It wants to use the host
   1937# toolchain, so needs $(SUBARCH) passed to checkstack.pl.  Everyone
   1938# else wants $(ARCH), including people doing cross-builds, which means
   1939# that $(SUBARCH) doesn't work here.
   1940ifeq ($(ARCH), um)
   1941CHECKSTACK_ARCH := $(SUBARCH)
   1942else
   1943CHECKSTACK_ARCH := $(ARCH)
   1944endif
   1945checkstack:
   1946	$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
   1947	$(PERL) $(srctree)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
   1948
   1949kernelrelease:
   1950	@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
   1951
   1952kernelversion:
   1953	@echo $(KERNELVERSION)
   1954
   1955image_name:
   1956	@echo $(KBUILD_IMAGE)
   1957
   1958quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
   1959      cmd_rmfiles = rm -rf $(rm-files)
   1960
   1961# read saved command lines for existing targets
   1962existing-targets := $(wildcard $(sort $(targets)))
   1963
   1964-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
   1965
   1966endif # config-build
   1967endif # mixed-build
   1968endif # need-sub-make
   1969
   1970PHONY += FORCE
   1971FORCE:
   1972
   1973# Declare the contents of the PHONY variable as phony.  We keep that
   1974# information in a variable so we can use it in if_changed and friends.
   1975.PHONY: $(PHONY)