Makefile 59.5 KB
Newer Older
Sophie Brun's avatar
Sophie Brun committed
1
# SPDX-License-Identifier: GPL-2.0
Sophie Brun's avatar
Sophie Brun committed
2
VERSION = 5
Sophie Brun's avatar
Sophie Brun committed
3
PATCHLEVEL = 4
Sophie Brun's avatar
Sophie Brun committed
4
SUBLEVEL = 19
5
EXTRAVERSION =
Sophie Brun's avatar
Sophie Brun committed
6
NAME = Kleptomaniac Octopus
7 8 9 10 11 12 13

# *DOCUMENTATION*
# To see a list of typical targets execute "make help"
# More info can be located in ./README
# Comments in this file are targeted only to the developer, do not
# expect to learn how to build the kernel reading this file.

Sophie Brun's avatar
Sophie Brun committed
14 15 16 17
# That's our default target when none is given on the command line
PHONY := _all
_all:

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
Sophie Brun's avatar
Sophie Brun committed
24
# unavoidable when linking the built-in.a targets which finally
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.

Sophie Brun's avatar
Sophie Brun committed
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
ifneq ($(sub_make_done),1)

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

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

# Avoid interference with shell env settings
unexport GREP_OPTIONS

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.
#
72 73 74 75 76 77 78 79 80 81
# To put more focus on warnings, be less verbose as default
# Use 'make V=1' to see the full commands

ifeq ("$(origin V)", "command line")
  KBUILD_VERBOSE = $(V)
endif
ifndef KBUILD_VERBOSE
  KBUILD_VERBOSE = 0
endif

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

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

export quiet Q KBUILD_VERBOSE

Sophie Brun's avatar
Sophie Brun committed
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.
#
109 110 111 112
# 1) O=
# Use "make O=dir/to/store/output/files/"
#
# 2) Set KBUILD_OUTPUT
Sophie Brun's avatar
Sophie Brun committed
113 114
# Set the environment variable KBUILD_OUTPUT to point to the output directory.
# export KBUILD_OUTPUT=dir/to/store/output/files/; make
115 116 117 118
#
# The O= assignment takes precedence over the KBUILD_OUTPUT environment
# variable.

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

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

Sophie Brun's avatar
Sophie Brun committed
144 145 146 147
abs_srctree := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))

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

Sophie Brun's avatar
Sophie Brun committed
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
ifneq ($(abs_srctree),$(abs_objtree))
# Look for make include files relative to root of kernel src
#
# This does not become effective immediately because MAKEFLAGS is re-parsed
# once after the Makefile is read. We need to invoke sub-make.
MAKEFLAGS += --include-dir=$(abs_srctree)
need-sub-make := 1
endif

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

export abs_srctree abs_objtree
export sub_make_done := 1

ifeq ($(need-sub-make),1)
171 172 173

PHONY += $(MAKECMDGOALS) sub-make

Sophie Brun's avatar
Sophie Brun committed
174
$(filter-out _all sub-make $(lastword $(MAKEFILE_LIST)), $(MAKECMDGOALS)) _all: sub-make
175
	@:
176

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

Sophie Brun's avatar
Sophie Brun committed
181 182
endif # need-sub-make
endif # sub_make_done
183 184

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

187 188 189 190 191 192 193 194 195 196 197 198
# Do not print "Entering directory ...",
# but we want to display it when entering to the output directory
# so that IDEs/editors are able to understand relative filenames.
MAKEFLAGS += --no-print-directory

# Call a source code checker (by default, "sparse") as part of the
# C compilation.
#
# Use 'make C=1' to enable checking of only re-compiled files.
# Use 'make C=2' to enable checking of *all* source files, regardless
# of whether they are re-compiled or not.
#
Sophie Brun's avatar
Sophie Brun 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

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

Sophie Brun's avatar
Sophie Brun committed
209 210
# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the
# directory of external module to build. Setting M= takes precedence.
211 212 213 214
ifeq ("$(origin M)", "command line")
  KBUILD_EXTMOD := $(M)
endif

Sophie Brun's avatar
Sophie Brun committed
215 216
export KBUILD_CHECKSRC KBUILD_EXTMOD

Sophie Brun's avatar
Sophie Brun committed
217 218
extmod-prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)

Sophie Brun's avatar
Sophie Brun committed
219
ifeq ($(abs_srctree),$(abs_objtree))
220 221
        # building in the source tree
        srctree := .
Sophie Brun's avatar
Sophie Brun committed
222
	building_out_of_srctree :=
223
else
Sophie Brun's avatar
Sophie Brun committed
224
        ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
225 226 227
                # building in a subdirectory of the source tree
                srctree := ..
        else
Sophie Brun's avatar
Sophie Brun committed
228
                srctree := $(abs_srctree)
229
        endif
Sophie Brun's avatar
Sophie Brun committed
230
	building_out_of_srctree := 1
231
endif
Sophie Brun's avatar
Sophie Brun committed
232

Sophie Brun's avatar
Sophie Brun committed
233 234 235
ifneq ($(KBUILD_ABS_SRCTREE),)
srctree := $(abs_srctree)
endif
Sophie Brun's avatar
Sophie Brun committed
236

237
objtree		:= .
Sophie Brun's avatar
Sophie Brun committed
238
VPATH		:= $(srctree)
239

Sophie Brun's avatar
Sophie Brun committed
240
export building_out_of_srctree srctree objtree VPATH
241

Sophie Brun's avatar
Sophie Brun committed
242 243 244 245 246 247 248 249 250 251 252
# 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

Sophie Brun's avatar
Sophie Brun committed
253 254
clean-targets := %clean mrproper cleandocs
no-dot-config-targets := $(clean-targets) \
Sophie Brun's avatar
Sophie Brun committed
255
			 cscope gtags TAGS tags help% %docs check% coccicheck \
Sophie Brun's avatar
Sophie Brun committed
256
			 $(version_h) headers headers_% archheaders archscripts \
Sophie Brun's avatar
Sophie Brun committed
257 258 259
			 %asm-generic kernelversion %src-pkg
no-sync-config-targets := $(no-dot-config-targets) install %install \
			   kernelrelease
Sophie Brun's avatar
Sophie Brun committed
260
single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
Sophie Brun's avatar
Sophie Brun committed
261

Sophie Brun's avatar
Sophie Brun committed
262 263 264 265 266
config-build	:=
mixed-build	:=
need-config	:= 1
may-sync-config	:= 1
single-build	:=
Sophie Brun's avatar
Sophie Brun committed
267 268 269

ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
Sophie Brun's avatar
Sophie Brun committed
270
		need-config :=
Sophie Brun's avatar
Sophie Brun committed
271 272 273
	endif
endif

274 275
ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
Sophie Brun's avatar
Sophie Brun committed
276
		may-sync-config :=
277 278 279 280
	endif
endif

ifneq ($(KBUILD_EXTMOD),)
Sophie Brun's avatar
Sophie Brun committed
281
	may-sync-config :=
282 283
endif

Sophie Brun's avatar
Sophie Brun committed
284 285
ifeq ($(KBUILD_EXTMOD),)
        ifneq ($(filter config %config,$(MAKECMDGOALS)),)
Sophie Brun's avatar
Sophie Brun committed
286
		config-build := 1
Sophie Brun's avatar
Sophie Brun committed
287
                ifneq ($(words $(MAKECMDGOALS)),1)
Sophie Brun's avatar
Sophie Brun committed
288
			mixed-build := 1
Sophie Brun's avatar
Sophie Brun committed
289 290 291
                endif
        endif
endif
Sophie Brun's avatar
Sophie Brun committed
292

Sophie Brun's avatar
Sophie Brun committed
293 294 295 296 297 298 299 300
# We cannot build single targets and the others at the same time
ifneq ($(filter $(single-targets), $(MAKECMDGOALS)),)
	single-build := 1
	ifneq ($(filter-out $(single-targets), $(MAKECMDGOALS)),)
		mixed-build := 1
	endif
endif

Sophie Brun's avatar
Sophie Brun committed
301 302 303
# For "make -j clean all", "make -j mrproper defconfig all", etc.
ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),)
        ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),)
Sophie Brun's avatar
Sophie Brun committed
304
		mixed-build := 1
Sophie Brun's avatar
Sophie Brun committed
305 306 307
        endif
endif

Sophie Brun's avatar
Sophie Brun committed
308 309 310
# install and modules_install need also be processed one by one
ifneq ($(filter install,$(MAKECMDGOALS)),)
        ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
Sophie Brun's avatar
Sophie Brun committed
311
		mixed-build := 1
Sophie Brun's avatar
Sophie Brun committed
312 313 314
        endif
endif

Sophie Brun's avatar
Sophie Brun committed
315
ifdef mixed-build
Sophie Brun's avatar
Sophie Brun committed
316 317 318 319 320 321 322 323 324 325 326 327 328 329 330
# ===========================================================================
# We're called with mixed targets (*config and build targets).
# Handle them one by one.

PHONY += $(MAKECMDGOALS) __build_one_by_one

$(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

Sophie Brun's avatar
Sophie Brun committed
331
else # !mixed-build
Sophie Brun's avatar
Sophie Brun committed
332 333 334 335 336 337 338 339

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

340
include scripts/subarch.include
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390

# Cross compiling and selecting different set of gcc/bin-utils
# ---------------------------------------------------------------------------
#
# When performing cross compilation for other architectures ARCH shall be set
# to the target architecture. (See arch/* for the possibilities).
# ARCH can be set during invocation of make:
# make ARCH=ia64
# Another way is to have ARCH set in the environment.
# The default ARCH is the host where make is executed.

# CROSS_COMPILE specify the prefix used for all executables used
# during compilation. Only gcc and related bin-utils executables
# are prefixed with $(CROSS_COMPILE).
# CROSS_COMPILE can be set on the command line
# make CROSS_COMPILE=ia64-linux-
# Alternatively CROSS_COMPILE can be set in the environment.
# Default value for CROSS_COMPILE is not to prefix executables
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
ARCH		?= $(SUBARCH)

# Architecture as present in compile.h
UTS_MACHINE 	:= $(ARCH)
SRCARCH 	:= $(ARCH)

# Additional ARCH settings for x86
ifeq ($(ARCH),i386)
        SRCARCH := x86
endif
ifeq ($(ARCH),x86_64)
        SRCARCH := x86
endif

# Additional ARCH settings for sparc
ifeq ($(ARCH),sparc32)
       SRCARCH := sparc
endif
ifeq ($(ARCH),sparc64)
       SRCARCH := sparc
endif

# Additional ARCH settings for sh
ifeq ($(ARCH),sh64)
       SRCARCH := sh
endif

KCONFIG_CONFIG	?= .config
export KCONFIG_CONFIG

# SHELL used by kbuild
Sophie Brun's avatar
Sophie Brun committed
391
CONFIG_SHELL := sh
392

Sophie Brun's avatar
Sophie Brun committed
393 394 395
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)
Sophie Brun's avatar
Sophie Brun committed
396

397 398
HOSTCC       = gcc
HOSTCXX      = g++
Sophie Brun's avatar
Sophie Brun committed
399 400 401 402 403 404
KBUILD_HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \
		-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)
405 406 407 408 409 410 411 412 413 414 415

# 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
Sophie Brun's avatar
Sophie Brun committed
416
OBJSIZE		= $(CROSS_COMPILE)size
Sophie Brun's avatar
Sophie Brun committed
417
PAHOLE		= pahole
Sophie Brun's avatar
Sophie Brun committed
418 419
LEX		= flex
YACC		= bison
420 421 422 423
AWK		= awk
INSTALLKERNEL  := installkernel
DEPMOD		= /sbin/depmod
PERL		= perl
424
PYTHON		= python
Sophie Brun's avatar
Sophie Brun committed
425 426
PYTHON2		= python2
PYTHON3		= python3
427
CHECK		= sparse
Sophie Brun's avatar
Sophie Brun committed
428
BASH		= bash
429 430

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

# Use USERINCLUDE when you must reference the UAPI directories only.
USERINCLUDE    := \
Sophie Brun's avatar
Sophie Brun committed
442 443
		-I$(srctree)/arch/$(SRCARCH)/include/uapi \
		-I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \
444
		-I$(srctree)/include/uapi \
Sophie Brun's avatar
Sophie Brun committed
445
		-I$(objtree)/include/generated/uapi \
446 447 448 449 450
                -include $(srctree)/include/linux/kconfig.h

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

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

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

Sophie Brun's avatar
Sophie Brun committed
479
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
Sophie Brun's avatar
Sophie Brun committed
480 481
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN
482 483 484 485 486 487
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL

# Files to ignore in find ... statements

488 489 490
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
491 492 493 494 495 496
export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
			 --exclude CVS --exclude .pc --exclude .hg --exclude .git

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

Sophie Brun's avatar
Sophie Brun committed
497
# Basic helpers built in scripts/basic/
498 499 500 501 502 503
PHONY += scripts_basic
scripts_basic:
	$(Q)$(MAKE) $(build)=scripts/basic
	$(Q)rm -f .tmp_quiet_recordmcount

PHONY += outputmakefile
Sophie Brun's avatar
Sophie Brun committed
504
# Before starting out-of-tree build, make sure the source tree is clean.
505 506 507
# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
# output directory.
Sophie Brun's avatar
Sophie Brun committed
508 509
# At the same time when output Makefile generated, generate .gitignore to
# ignore whole output directory
510
outputmakefile:
Sophie Brun's avatar
Sophie Brun committed
511
ifdef building_out_of_srctree
Sophie Brun's avatar
Sophie Brun committed
512 513 514 515 516 517 518 519 520
	$(Q)if [ -f $(srctree)/.config -o \
		 -d $(srctree)/include/config -o \
		 -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
		echo >&2 "***"; \
		echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
		echo >&2 "*** in $(abs_srctree)";\
		echo >&2 "***"; \
		false; \
	fi
521
	$(Q)ln -fsn $(srctree) source
Sophie Brun's avatar
Sophie Brun committed
522 523 524
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
	$(Q)test -e .gitignore || \
	{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
525 526
endif

Sophie Brun's avatar
Sophie Brun committed
527
ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
Sophie Brun's avatar
Sophie Brun committed
528
ifneq ($(CROSS_COMPILE),)
Sophie Brun's avatar
Sophie Brun committed
529
CLANG_FLAGS	+= --target=$(notdir $(CROSS_COMPILE:%-=%))
530
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
531
CLANG_FLAGS	+= --prefix=$(GCC_TOOLCHAIN_DIR)
Sophie Brun's avatar
Sophie Brun committed
532
GCC_TOOLCHAIN	:= $(realpath $(GCC_TOOLCHAIN_DIR)/..)
533
endif
Sophie Brun's avatar
Sophie Brun committed
534
ifneq ($(GCC_TOOLCHAIN),)
535
CLANG_FLAGS	+= --gcc-toolchain=$(GCC_TOOLCHAIN)
536
endif
Sophie Brun's avatar
Sophie Brun committed
537
ifeq ($(shell $(AS) --version 2>&1 | head -n 1 | grep clang),)
538
CLANG_FLAGS	+= -no-integrated-as
Sophie Brun's avatar
Sophie Brun committed
539
endif
Sophie Brun's avatar
Sophie Brun committed
540
CLANG_FLAGS	+= -Werror=unknown-warning-option
541 542 543
KBUILD_CFLAGS	+= $(CLANG_FLAGS)
KBUILD_AFLAGS	+= $(CLANG_FLAGS)
export CLANG_FLAGS
544
endif
545

Sophie Brun's avatar
Sophie Brun committed
546 547 548 549
# 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.
Sophie Brun's avatar
Sophie Brun committed
550
CC_VERSION_TEXT = $(shell $(CC) --version 2>/dev/null | head -n 1)
Sophie Brun's avatar
Sophie Brun committed
551

Sophie Brun's avatar
Sophie Brun committed
552
ifdef config-build
553 554 555 556 557 558 559
# ===========================================================================
# *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'
560
include arch/$(SRCARCH)/Makefile
Sophie Brun's avatar
Sophie Brun committed
561
export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
562

Sophie Brun's avatar
Sophie Brun committed
563
config: outputmakefile scripts_basic FORCE
564 565
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

Sophie Brun's avatar
Sophie Brun committed
566
%config: outputmakefile scripts_basic FORCE
567 568
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

Sophie Brun's avatar
Sophie Brun committed
569
else #!config-build
570 571 572 573
# ===========================================================================
# Build targets only - this includes vmlinux, arch specific targets, clean
# targets and others. In general all targets except *config targets.

Sophie Brun's avatar
Sophie Brun committed
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
# 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

Sophie Brun's avatar
Sophie Brun committed
602
ifneq ($(filter all _all modules nsdeps,$(MAKECMDGOALS)),)
Sophie Brun's avatar
Sophie Brun committed
603 604 605 606 607 608 609 610 611
  KBUILD_MODULES := 1
endif

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

export KBUILD_MODULES KBUILD_BUILTIN

Sophie Brun's avatar
Sophie Brun committed
612
ifdef need-config
Sophie Brun's avatar
Sophie Brun committed
613 614 615
include include/config/auto.conf
endif

616 617 618
ifeq ($(KBUILD_EXTMOD),)
# Objects we will link into vmlinux / subdirs we need to visit
init-y		:= init/
Sophie Brun's avatar
Sophie Brun committed
619 620
drivers-y	:= drivers/ sound/
drivers-$(CONFIG_SAMPLES) += samples/
Sophie Brun's avatar
Sophie Brun committed
621
drivers-$(CONFIG_KERNEL_HEADER_TEST) += include/
622 623 624
net-y		:= net/
libs-y		:= lib/
core-y		:= usr/
625
virt-y		:= virt/
626 627
endif # KBUILD_EXTMOD

Sophie Brun's avatar
Sophie Brun committed
628 629 630 631 632
# 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
633

Sophie Brun's avatar
Sophie Brun committed
634 635 636 637 638
CFLAGS_GCOV	:= -fprofile-arcs -ftest-coverage \
	$(call cc-option,-fno-tree-loop-im) \
	$(call cc-disable-warning,maybe-uninitialized,)
export CFLAGS_GCOV

Sophie Brun's avatar
Sophie Brun committed
639 640 641 642 643
# The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later.
ifdef CONFIG_FUNCTION_TRACER
  CC_FLAGS_FTRACE := -pg
endif

Sophie Brun's avatar
Sophie Brun committed
644 645 646 647 648 649 650 651 652
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

Sophie Brun's avatar
Sophie Brun committed
653 654
include arch/$(SRCARCH)/Makefile

Sophie Brun's avatar
Sophie Brun committed
655 656
ifdef need-config
ifdef may-sync-config
Sophie Brun's avatar
Sophie Brun committed
657 658 659
# 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.
Sophie Brun's avatar
Sophie Brun committed
660
include include/config/auto.conf.cmd
661

Sophie Brun's avatar
Sophie Brun committed
662 663 664 665 666 667 668 669
$(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
670

Sophie Brun's avatar
Sophie Brun committed
671 672 673
# 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).
674 675 676 677
#
# 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)
Sophie Brun's avatar
Sophie Brun committed
678
	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
Sophie Brun's avatar
Sophie Brun committed
679
else # !may-sync-config
680 681 682
# 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
683 684 685 686 687 688 689 690 691 692 693
PHONY += include/config/auto.conf

include/config/auto.conf:
	$(Q)test -e include/generated/autoconf.h -a -e $@ || (		\
	echo >&2;							\
	echo >&2 "  ERROR: Kernel configuration is invalid.";		\
	echo >&2 "         include/generated/autoconf.h or $@ are missing.";\
	echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix it.";	\
	echo >&2 ;							\
	/bin/false)

694
endif # may-sync-config
Sophie Brun's avatar
Sophie Brun committed
695
endif # need-config
696

697
KBUILD_CFLAGS	+= $(call cc-option,-fno-delete-null-pointer-checks,)
Sophie Brun's avatar
Sophie Brun committed
698
KBUILD_CFLAGS	+= $(call cc-disable-warning,frame-address,)
Sophie Brun's avatar
Sophie Brun committed
699 700
KBUILD_CFLAGS	+= $(call cc-disable-warning, format-truncation)
KBUILD_CFLAGS	+= $(call cc-disable-warning, format-overflow)
Sophie Brun's avatar
Sophie Brun committed
701
KBUILD_CFLAGS	+= $(call cc-disable-warning, address-of-packed-member)
Sophie Brun's avatar
Sophie Brun committed
702

Sophie Brun's avatar
Sophie Brun committed
703 704 705 706 707 708
ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
KBUILD_CFLAGS += -O2
else ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3
KBUILD_CFLAGS += -O3
else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS += -Os
Sophie Brun's avatar
Sophie Brun committed
709
endif
710

Sophie Brun's avatar
Sophie Brun committed
711 712 713
ifdef CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED
KBUILD_CFLAGS   += -Wno-maybe-uninitialized
endif
Sophie Brun's avatar
Sophie Brun committed
714

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

Sophie Brun's avatar
Sophie Brun committed
718
include scripts/Makefile.kcov
Sophie Brun's avatar
Sophie Brun committed
719 720
include scripts/Makefile.gcc-plugins

721 722 723 724 725 726 727 728 729 730 731 732 733 734
ifdef CONFIG_READABLE_ASM
# Disable optimizations that make assembler listings hard to read.
# reorder blocks reorders the control in the function
# ipa clone creates specialized cloned functions
# partial inlining inlines only parts of functions
KBUILD_CFLAGS += $(call cc-option,-fno-reorder-blocks,) \
                 $(call cc-option,-fno-ipa-cp-clone,) \
                 $(call cc-option,-fno-partial-inlining)
endif

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

Sophie Brun's avatar
Sophie Brun committed
735 736 737 738 739
stackp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector
stackp-flags-$(CONFIG_STACKPROTECTOR)             := -fstack-protector
stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG)      := -fstack-protector-strong

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

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

753
# These warnings generated too much noise in a regular build.
Sophie Brun's avatar
Sophie Brun committed
754
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
Sophie Brun's avatar
Sophie Brun committed
755
KBUILD_CFLAGS += -Wno-unused-but-set-variable
Sophie Brun's avatar
Sophie Brun committed
756 757 758 759 760

# Warn about unmarked fall-throughs in switch statement.
# Disabled for clang while comment to attribute conversion happens and
# https://github.com/ClangBuiltLinux/linux/issues/636 is discussed.
KBUILD_CFLAGS += $(call cc-option,-Wimplicit-fallthrough,)
761
endif
762

Sophie Brun's avatar
Sophie Brun committed
763
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
764 765 766 767 768 769 770 771 772 773 774 775 776
ifdef CONFIG_FRAME_POINTER
KBUILD_CFLAGS	+= -fno-omit-frame-pointer -fno-optimize-sibling-calls
else
# Some targets (ARM with Thumb2, for example), can't be built with frame
# pointers.  For those, we don't have FUNCTION_TRACER automatically
# select FRAME_POINTER.  However, FUNCTION_TRACER adds -pg, and this is
# incompatible with -fomit-frame-pointer with current GCC, so we don't use
# -fomit-frame-pointer with FUNCTION_TRACER.
ifndef CONFIG_FUNCTION_TRACER
KBUILD_CFLAGS	+= -fomit-frame-pointer
endif
endif

Sophie Brun's avatar
Sophie Brun committed
777 778 779 780 781 782
# Initialize all stack variables with a pattern, if desired.
ifdef CONFIG_INIT_STACK_ALL
KBUILD_CFLAGS	+= -ftrivial-auto-var-init=pattern
endif

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

784
ifdef CONFIG_DEBUG_INFO
785
ifdef CONFIG_DEBUG_INFO_SPLIT
Sophie Brun's avatar
Sophie Brun committed
786
DEBUG_CFLAGS	+= -gsplit-dwarf
787
else
Sophie Brun's avatar
Sophie Brun committed
788
DEBUG_CFLAGS	+= -g
789
endif
790
KBUILD_AFLAGS	+= -Wa,-gdwarf-2
791
endif
792
ifdef CONFIG_DEBUG_INFO_DWARF4
Sophie Brun's avatar
Sophie Brun committed
793
DEBUG_CFLAGS	+= -gdwarf-4
794
endif
795 796

ifdef CONFIG_DEBUG_INFO_REDUCED
Sophie Brun's avatar
Sophie Brun committed
797
DEBUG_CFLAGS	+= $(call cc-option, -femit-struct-debug-baseonly) \
798
		   $(call cc-option,-fno-var-tracking)
799 800
endif

Sophie Brun's avatar
Sophie Brun committed
801 802 803
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
export DEBUG_CFLAGS

804
ifdef CONFIG_FUNCTION_TRACER
Sophie Brun's avatar
Sophie Brun committed
805 806 807 808 809 810 811 812 813 814 815 816
ifdef CONFIG_FTRACE_MCOUNT_RECORD
  # gcc 5 supports generating the mcount tables directly
  ifeq ($(call cc-option-yn,-mrecord-mcount),y)
    CC_FLAGS_FTRACE	+= -mrecord-mcount
    export CC_USING_RECORD_MCOUNT := 1
  endif
  ifdef CONFIG_HAVE_NOP_MCOUNT
    ifeq ($(call cc-option-yn, -mnop-mcount),y)
      CC_FLAGS_FTRACE	+= -mnop-mcount
      CC_FLAGS_USING	+= -DCC_USING_NOP_MCOUNT
    endif
  endif
817
endif
818
ifdef CONFIG_HAVE_FENTRY
Sophie Brun's avatar
Sophie Brun committed
819 820 821 822
  ifeq ($(call cc-option-yn, -mfentry),y)
    CC_FLAGS_FTRACE	+= -mfentry
    CC_FLAGS_USING	+= -DCC_USING_FENTRY
  endif
823
endif
Sophie Brun's avatar
Sophie Brun committed
824 825 826
export CC_FLAGS_FTRACE
KBUILD_CFLAGS	+= $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING)
KBUILD_AFLAGS	+= $(CC_FLAGS_USING)
827 828 829 830 831 832 833 834 835 836 837 838 839
ifdef CONFIG_DYNAMIC_FTRACE
	ifdef CONFIG_HAVE_C_RECORDMCOUNT
		BUILD_C_RECORDMCOUNT := y
		export BUILD_C_RECORDMCOUNT
	endif
endif
endif

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

Sophie Brun's avatar
Sophie Brun committed
840
ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
Sophie Brun's avatar
Sophie Brun committed
841 842
KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
LDFLAGS_vmlinux += --gc-sections
Sophie Brun's avatar
Sophie Brun committed
843 844
endif

Sophie Brun's avatar
Sophie Brun committed
845 846 847 848
ifdef CONFIG_LIVEPATCH
KBUILD_CFLAGS += $(call cc-option, -flive-patching=inline-clone)
endif

849
# arch Makefile may override CC so keep this after arch Makefile is included
Sophie Brun's avatar
Sophie Brun committed
850
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
851 852

# warn about C99 declaration after statement
Sophie Brun's avatar
Sophie Brun committed
853 854 855 856
KBUILD_CFLAGS += -Wdeclaration-after-statement

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

# disable pointer signed / unsigned warnings in gcc 4.0
Sophie Brun's avatar
Sophie Brun committed
859
KBUILD_CFLAGS += -Wno-pointer-sign
860

Sophie Brun's avatar
Sophie Brun committed
861 862 863
# disable stringop warnings in gcc 8+
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)

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

867 868 869 870 871 872 873 874 875
# 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)

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

879 880 881
# conserve stack if available
KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)

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

885 886 887
# enforce correct pointer usage
KBUILD_CFLAGS   += $(call cc-option,-Werror=incompatible-pointer-types)

Sophie Brun's avatar
Sophie Brun committed
888 889 890
# Require designated initializers for all marked structures
KBUILD_CFLAGS   += $(call cc-option,-Werror=designated-init)

Sophie Brun's avatar
Sophie Brun committed
891 892 893
# change __FILE__ to the relative path from the srctree
KBUILD_CFLAGS	+= $(call cc-option,-fmacro-prefix-map=$(srctree)/=)

Sophie Brun's avatar
Sophie Brun committed
894 895 896 897 898 899
# ensure -fcf-protection is disabled when using retpoline as it is
# incompatible with -mindirect-branch=thunk-extern
ifdef CONFIG_RETPOLINE
KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
endif

900 901
include scripts/Makefile.kasan
include scripts/Makefile.extrawarn
902
include scripts/Makefile.ubsan
903

Sophie Brun's avatar
Sophie Brun committed
904 905 906 907
# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
KBUILD_CPPFLAGS += $(KCPPFLAGS)
KBUILD_AFLAGS   += $(KAFLAGS)
KBUILD_CFLAGS   += $(KCFLAGS)
908

Sophie Brun's avatar
Sophie Brun committed
909 910
KBUILD_LDFLAGS_MODULE += --build-id
LDFLAGS_vmlinux += --build-id
911 912 913 914 915

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

Sophie Brun's avatar
Sophie Brun committed
916 917 918 919 920 921 922
ifeq ($(CONFIG_RELR),y)
LDFLAGS_vmlinux	+= --pack-dyn-relocs=relr
endif

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

Sophie Brun's avatar
Sophie Brun committed
923 924 925 926 927 928
# insure the checker run with the right endianness
CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)

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

929 930 931 932 933 934 935 936 937 938 939 940
# Default kernel image to build when no specific target is given.
# KBUILD_IMAGE may be overruled on the command line or
# set in the environment
# Also any assignments in arch/$(ARCH)/Makefile take precedence over
# this default value
export KBUILD_IMAGE ?= vmlinux

#
# INSTALL_PATH specifies where to place the updated kernel and system map
# images. Default is /boot, but you can set it to other values
export	INSTALL_PATH ?= /boot

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

948 949 950 951 952 953 954 955 956 957
#
# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
# relocations required by build roots.  This is not defined in the
# makefile but the argument can be passed to make if needed.
#

MODLIB	= $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
export MODLIB

#
958 959 960 961
# 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.
962 963 964 965 966 967 968 969 970 971 972 973

ifdef INSTALL_MOD_STRIP
ifeq ($(INSTALL_MOD_STRIP),1)
mod_strip_cmd = $(STRIP) --strip-debug
else
mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
endif # INSTALL_MOD_STRIP=1
else
mod_strip_cmd = true
endif # INSTALL_MOD_STRIP
export mod_strip_cmd

974 975 976 977 978 979 980
# 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
981
    mod_compress_cmd = gzip -n -f
982 983
  endif # CONFIG_MODULE_COMPRESS_GZIP
  ifdef CONFIG_MODULE_COMPRESS_XZ
984
    mod_compress_cmd = xz -f
985 986 987 988
  endif # CONFIG_MODULE_COMPRESS_XZ
endif # CONFIG_MODULE_COMPRESS
export mod_compress_cmd

989
ifdef CONFIG_MODULE_SIG_ALL
990 991 992
$(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
993 994 995 996 997
else
mod_sign_cmd = true
endif
export mod_sign_cmd

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

Sophie Brun's avatar
Sophie Brun committed
1000 1001
ifdef CONFIG_STACK_VALIDATION
  has_libelf := $(call try-run,\
1002
		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
Sophie Brun's avatar
Sophie Brun committed
1003 1004 1005 1006 1007 1008 1009 1010
  ifeq ($(has_libelf),1)
    objtool_target := tools/objtool FORCE
  else
    SKIP_STACK_VALIDATION := 1
    export SKIP_STACK_VALIDATION
  endif
endif

Sophie Brun's avatar
Sophie Brun committed
1011
PHONY += prepare0
1012

Sophie Brun's avatar
Sophie Brun committed
1013
export MODORDER := $(extmod-prefix)modules.order
Sophie Brun's avatar
Sophie Brun committed
1014

1015
ifeq ($(KBUILD_EXTMOD),)
1016
core-y		+= kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
1017 1018 1019

vmlinux-dirs	:= $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
1020
		     $(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y)))
1021

Sophie Brun's avatar
Sophie Brun committed
1022 1023 1024
vmlinux-alldirs	:= $(sort $(vmlinux-dirs) Documentation \
		     $(patsubst %/,%,$(filter %/, $(init-) $(core-) \
			$(drivers-) $(net-) $(libs-) $(virt-))))
1025

Sophie Brun's avatar
Sophie Brun committed
1026 1027 1028
build-dirs	:= $(vmlinux-dirs)
clean-dirs	:= $(vmlinux-alldirs)

Sophie Brun's avatar
Sophie Brun committed
1029 1030 1031 1032
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))
1033
libs-y1		:= $(patsubst %/, %/lib.a, $(libs-y))
Sophie Brun's avatar
Sophie Brun committed
1034 1035
libs-y2		:= $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y)))
virt-y		:= $(patsubst %/, %/built-in.a, $(virt-y))
1036 1037

# Externally visible symbols (used by link-vmlinux.sh)
Sophie Brun's avatar
Sophie Brun committed
1038 1039
export KBUILD_VMLINUX_OBJS := $(head-y) $(init-y) $(core-y) $(libs-y2) \
			      $(drivers-y) $(net-y) $(virt-y)
Sophie Brun's avatar
Sophie Brun committed
1040
export KBUILD_VMLINUX_LIBS := $(libs-y1)
1041 1042
export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
export LDFLAGS_vmlinux
Sophie Brun's avatar
Sophie Brun committed
1043
# used by scripts/Makefile.package
Sophie Brun's avatar
Sophie Brun committed
1044
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
1045

Sophie Brun's avatar
Sophie Brun committed
1046
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
1047

Sophie Brun's avatar
Sophie Brun committed
1048 1049
# Recurse until adjust_autoksyms.sh is satisfied
PHONY += autoksyms_recursive
Sophie Brun's avatar
Sophie Brun committed
1050
ifdef CONFIG_TRIM_UNUSED_KSYMS
Sophie Brun's avatar
Sophie Brun committed
1051
autoksyms_recursive: descend modules.order
Sophie Brun's avatar
Sophie Brun committed
1052
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
Sophie Brun's avatar
Sophie Brun committed
1053
	  "$(MAKE) -f $(srctree)/Makefile vmlinux"
Sophie Brun's avatar
Sophie Brun committed
1054 1055
endif

Sophie Brun's avatar
Sophie Brun committed
1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067
# 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

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

$(autoksyms_h):
	$(Q)mkdir -p $(dir $@)
	$(Q)touch $@
Sophie Brun's avatar
Sophie Brun committed
1068

Sophie Brun's avatar
Sophie Brun committed
1069 1070 1071
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)

# Final link of vmlinux with optional arch pass after final link
Sophie Brun's avatar
Sophie Brun committed
1072
cmd_link-vmlinux =                                                 \
Sophie Brun's avatar
Sophie Brun committed
1073
	$(CONFIG_SHELL) $< $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_vmlinux) ;    \
Sophie Brun's avatar
Sophie Brun committed
1074
	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
Sophie Brun's avatar
Sophie Brun committed
1075

Sophie Brun's avatar
Sophie Brun committed
1076
vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
1077 1078
	+$(call if_changed,link-vmlinux)

Sophie Brun's avatar
Sophie Brun committed
1079 1080
targets := vmlinux

1081
# The actual objects are generated when descending,
1082
# make sure no implicit rule kicks in
Sophie Brun's avatar
Sophie Brun committed
1083
$(sort $(vmlinux-deps)): descend ;
1084

Sophie Brun's avatar
Sophie Brun committed
1085
filechk_kernel.release = \
1086 1087 1088
	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"

# Store (new) KERNELRELEASE string in include/config/kernel.release
Sophie Brun's avatar
Sophie Brun committed
1089
include/config/kernel.release: FORCE
1090
	$(call filechk,kernel.release)
1091

Sophie Brun's avatar
Sophie Brun committed
1092 1093 1094 1095
# Additional helpers built in scripts/
# Carefully list dependencies so we do not try to build scripts twice
# in parallel
PHONY += scripts
Sophie Brun's avatar
Sophie Brun committed
1096
scripts: scripts_basic scripts_dtc
Sophie Brun's avatar
Sophie Brun committed
1097
	$(Q)$(MAKE) $(build)=$(@)
1098 1099 1100 1101 1102 1103 1104

# Things we need to do before we recursively start building the kernel
# or the modules are listed in "prepare".
# A multi level approach is used. prepareN is processed before prepareN-1.
# archprepare is used in arch Makefiles and when processed asm symlink,
# version.h and scripts_basic is processed / created.

Sophie Brun's avatar
Sophie Brun committed
1105
PHONY += prepare archprepare
1106

Sophie Brun's avatar
Sophie Brun committed
1107
archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
Sophie Brun's avatar
Sophie Brun committed
1108
	asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h
1109

Sophie Brun's avatar
Sophie Brun committed
1110 1111
prepare0: archprepare
	$(Q)$(MAKE) $(build)=scripts/mod
1112 1113 1114
	$(Q)$(MAKE) $(build)=.

# All the preparing..
1115 1116
prepare: prepare0 prepare-objtool

Sophie Brun's avatar
Sophie Brun committed
1117
# Support for using generic headers in asm-generic
Sophie Brun's avatar
Sophie Brun committed
1118 1119
asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj

Sophie Brun's avatar
Sophie Brun committed
1120 1121
PHONY += asm-generic uapi-asm-generic
asm-generic: uapi-asm-generic
Sophie Brun's avatar
Sophie Brun committed
1122 1123
	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm \
	generic=include/asm-generic
Sophie Brun's avatar
Sophie Brun committed
1124
uapi-asm-generic:
Sophie Brun's avatar
Sophie Brun committed
1125 1126
	$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \
	generic=include/uapi/asm-generic
Sophie Brun's avatar
Sophie Brun committed
1127

1128 1129
PHONY += prepare-objtool
prepare-objtool: $(objtool_target)
1130 1131 1132 1133 1134 1135 1136 1137
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
1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150

# Generate some files
# ---------------------------------------------------------------------------

# KERNELRELEASE can change from a few different places, meaning version.h
# needs to be updated, so this check is forced on all builds

uts_len := 64
define filechk_utsrelease.h
	if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
	  echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2;    \
	  exit 1;                                                         \
	fi;                                                               \
Sophie Brun's avatar
Sophie Brun committed
1151
	echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
1152 1153 1154
endef

define filechk_version.h
Sophie Brun's avatar
Sophie Brun committed
1155
	echo \#define LINUX_VERSION_CODE $(shell                         \
1156
	expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \
Sophie Brun's avatar
Sophie Brun committed
1157
	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'
1158 1159
endef

Sophie Brun's avatar
Sophie Brun committed
1160
$(version_h): FORCE
1161
	$(call filechk,version.h)
1162
	$(Q)rm -f $(old_version_h)
1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177

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

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

# ---------------------------------------------------------------------------
# Kernel headers

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

Sophie Brun's avatar
Sophie Brun committed
1178 1179 1180 1181 1182
quiet_cmd_headers_install = INSTALL $(INSTALL_HDR_PATH)/include
      cmd_headers_install = \
	mkdir -p $(INSTALL_HDR_PATH); \
	rsync -mrl --include='*/' --include='*\.h' --exclude='*' \
	usr/include $(INSTALL_HDR_PATH)
1183

Sophie Brun's avatar
Sophie Brun committed
1184 1185 1186
PHONY += headers_install
headers_install: headers
	$(call cmd,headers_install)
1187

Sophie Brun's avatar
Sophie Brun committed
1188
PHONY += archheaders archscripts
1189

Sophie Brun's avatar
Sophie Brun committed
1190
hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
1191

Sophie Brun's avatar
Sophie Brun committed
1192 1193
PHONY += headers
headers: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
Sophie Brun's avatar
Sophie Brun committed
1194
	$(if $(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/Kbuild),, \
1195
	  $(error Headers not exportable for the $(SRCARCH) architecture))
Sophie Brun's avatar
Sophie Brun committed
1196 1197
	$(Q)$(MAKE) $(hdr-inst)=include/uapi
	$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi
1198 1199

PHONY += headers_check
Sophie Brun's avatar
Sophie Brun committed
1200 1201 1202 1203 1204 1205 1206
headers_check: headers
	$(Q)$(MAKE) $(hdr-inst)=include/uapi HDRCHECK=1
	$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi HDRCHECK=1

ifdef CONFIG_HEADERS_INSTALL
prepare: headers
endif
1207

Sophie Brun's avatar
Sophie Brun committed
1208 1209 1210 1211
ifdef CONFIG_HEADERS_CHECK
all: headers_check
endif

Sophie Brun's avatar
Sophie Brun committed
1212 1213 1214 1215
PHONY += scripts_unifdef
scripts_unifdef: scripts_basic
	$(Q)$(MAKE) $(build)=scripts scripts/unifdef

1216 1217 1218 1219 1220
# ---------------------------------------------------------------------------
# Kernel selftest

PHONY += kselftest
kselftest:
Sophie Brun's avatar
Sophie Brun committed
1221
	$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
1222

Sophie Brun's avatar
Sophie Brun committed
1223 1224
kselftest-%: FORCE
	$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests $*
1225

1226 1227 1228
PHONY += kselftest-merge
kselftest-merge:
	$(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!))
Sophie Brun's avatar
Sophie Brun committed
1229 1230
	$(Q)find $(srctree)/tools/testing/selftests -name config | \
		xargs $(srctree)/scripts/kconfig/merge_config.sh -m $(objtree)/.config
Sophie Brun's avatar
Sophie Brun committed
1231
	$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
1232

Sophie Brun's avatar
Sophie Brun committed
1233 1234 1235 1236 1237 1238 1239 1240 1241
# ---------------------------------------------------------------------------
# Devicetree files

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

ifneq ($(dtstree),)

Sophie Brun's avatar
Sophie Brun committed
1242
%.dtb: include/config/kernel.release scripts_dtc
Sophie Brun's avatar
Sophie Brun committed
1243 1244 1245
	$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@

PHONY += dtbs dtbs_install dt_binding_check
Sophie Brun's avatar
Sophie Brun committed
1246
dtbs dtbs_check: include/config/kernel.release scripts_dtc
Sophie Brun's avatar
Sophie Brun committed
1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267
	$(Q)$(MAKE) $(build)=$(dtstree)

dtbs_check: export CHECK_DTBS=1
dtbs_check: dt_binding_check

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

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

1268 1269 1270 1271 1272 1273 1274 1275 1276
# ---------------------------------------------------------------------------
# Modules

ifdef CONFIG_MODULES

# By default, build modules as well

all: modules

1277
# Build modules
1278
#
1279 1280 1281
# 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.
1282 1283

PHONY += modules
Sophie Brun's avatar
Sophie Brun committed
1284
modules: $(if $(KBUILD_BUILTIN),vmlinux) modules.order modules.builtin
1285
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
Sophie Brun's avatar
Sophie Brun committed
1286
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh
1287

Sophie Brun's avatar
Sophie Brun committed
1288 1289
modules.order: descend
	$(Q)$(AWK) '!x[$$0]++' $(addsuffix /$@, $(build-dirs)) > $@
Sophie Brun's avatar
Sophie Brun committed
1290

Sophie Brun's avatar
Sophie Brun committed
1291
modbuiltin-dirs := $(addprefix _modbuiltin_, $(build-dirs))
1292

Sophie Brun's avatar
Sophie Brun committed
1293
modules.builtin: $(modbuiltin-dirs)
Sophie Brun's avatar
Sophie Brun committed
1294
	$(Q)$(AWK) '!x[$$0]++' $(addsuffix /$@, $(build-dirs)) > $@
1295

Sophie Brun's avatar
Sophie Brun committed
1296 1297 1298 1299 1300
PHONY += $(modbuiltin-dirs)
# tristate.conf is not included from this Makefile. Add it as a prerequisite
# here to make it self-healing in case somebody accidentally removes it.
$(modbuiltin-dirs): include/config/tristate.conf
	$(Q)$(MAKE) $(modbuiltin)=$(patsubst _modbuiltin_%,%,$@)
1301 1302 1303

# Target to prepare building external modules
PHONY += modules_prepare
Sophie Brun's avatar
Sophie Brun committed
1304
modules_prepare: prepare
1305 1306 1307 1308 1309 1310 1311 1312 1313 1314

# Target to install modules
PHONY += modules_install
modules_install: _modinst_ _modinst_post

PHONY += _modinst_
_modinst_:
	@rm -rf $(MODLIB)/kernel
	@rm -f $(MODLIB)/source
	@mkdir -p $(MODLIB)/kernel
Sophie Brun's avatar
Sophie Brun committed
1315
	@ln -s $(abspath $(srctree)) $(MODLIB)/source
1316 1317
	@if [ ! $(objtree) -ef  $(MODLIB)/build ]; then \
		rm -f $(MODLIB)/build ; \
1318
		ln -s $(CURDIR) $(MODLIB)/build ; \
1319
	fi
Sophie Brun's avatar
Sophie Brun committed
1320 1321
	@sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order
	@sed 's:^:kernel/:' modules.builtin > $(MODLIB)/modules.builtin
Sophie Brun's avatar
Sophie Brun committed
1322
	@cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
1323 1324 1325 1326 1327 1328 1329 1330 1331
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst

# This depmod is only for convenience to give the initial
# boot a modules.dep even before / is mounted read-write.  However the
# boot script depmod is the master version.
PHONY += _modinst_post
_modinst_post: _modinst_
	$(call cmd,depmod)

1332 1333 1334 1335 1336 1337
ifeq ($(CONFIG_MODULE_SIG), y)
PHONY += modules_sign
modules_sign:
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modsign
endif

1338 1339 1340 1341 1342
else # CONFIG_MODULES

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

Sophie Brun's avatar
Sophie Brun committed
1343 1344
PHONY += modules modules_install
modules modules_install:
1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361
	@echo >&2
	@echo >&2 "The present kernel configuration has modules disabled."
	@echo >&2 "Type 'make config' and enable loadable module support."
	@echo >&2 "Then build a kernel with module support enabled."
	@echo >&2
	@exit 1

endif # CONFIG_MODULES

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

# Directories & files removed with 'make clean'
Sophie Brun's avatar
Sophie Brun committed
1362
CLEAN_DIRS  += include/ksym
Sophie Brun's avatar
Sophie Brun committed
1363
CLEAN_FILES += modules.builtin.modinfo
1364 1365

# Directories & files removed with 'make mrproper'
Sophie Brun's avatar
Sophie Brun committed
1366
MRPROPER_DIRS  += include/config include/generated          \