1 b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0 2 bfeffd15SLinus TorvaldsVERSION = 5 3 e42617b8SLinus TorvaldsPATCHLEVEL = 5 4 55922c9dSLinus TorvaldsSUBLEVEL = 0 5 c79f46a2SLinus TorvaldsEXTRAVERSION = -rc5 6 d6d5df1dSLinus TorvaldsNAME = Kleptomaniac Octopus 7 1da177e4SLinus Torvalds 8 1da177e4SLinus Torvalds# *DOCUMENTATION* 9 1da177e4SLinus Torvalds# To see a list of typical targets execute "make help" 10 1da177e4SLinus Torvalds# More info can be located in ./README 11 1da177e4SLinus Torvalds# Comments in this file are targeted only to the developer, do not 12 1da177e4SLinus Torvalds# expect to learn how to build the kernel reading this file. 13 1da177e4SLinus Torvalds 14 ba634eceSMasahiro Yamada# That's our default target when none is given on the command line 15 ba634eceSMasahiro YamadaPHONY := _all 16 ba634eceSMasahiro Yamada_all: 17 ba634eceSMasahiro Yamada 18 1da177e4SLinus Torvalds# We are using a recursive build, so we need to do a little thinking 19 1da177e4SLinus Torvalds# to get the ordering right. 20 1da177e4SLinus Torvalds# 21 1da177e4SLinus Torvalds# Most importantly: sub-Makefiles should only ever modify files in 22 1da177e4SLinus Torvalds# their own directory. If in some directory we have a dependency on 23 1da177e4SLinus Torvalds# a file in another dir (which doesn't happen often, but it's often 24 f49821eeSNicholas Piggin# unavoidable when linking the built-in.a targets which finally 25 1da177e4SLinus Torvalds# turn into vmlinux), we will call a sub make in that other dir, and 26 1da177e4SLinus Torvalds# after that we are sure that everything which is in that other dir 27 1da177e4SLinus Torvalds# is now up to date. 28 1da177e4SLinus Torvalds# 29 1da177e4SLinus Torvalds# The only cases where we need to modify files which have global 30 1da177e4SLinus Torvalds# effects are thus separated out and done before the recursive 31 1da177e4SLinus Torvalds# descending is started. They are now explicitly listed as the 32 1da177e4SLinus Torvalds# prepare rule. 33 1da177e4SLinus Torvalds 34 221cc2d2SMasahiro Yamadaifneq ($(sub_make_done),1) 35 3812b8c5SMasahiro Yamada 36 3812b8c5SMasahiro Yamada# Do not use make's built-in rules and variables 37 3812b8c5SMasahiro Yamada# (this increases performance and avoids hard-to-debug behaviour) 38 3812b8c5SMasahiro YamadaMAKEFLAGS += -rR 39 3812b8c5SMasahiro Yamada 40 3812b8c5SMasahiro Yamada# Avoid funny character set dependencies 41 3812b8c5SMasahiro Yamadaunexport LC_ALL 42 3812b8c5SMasahiro YamadaLC_COLLATE=C 43 3812b8c5SMasahiro YamadaLC_NUMERIC=C 44 3812b8c5SMasahiro Yamadaexport LC_COLLATE LC_NUMERIC 45 3812b8c5SMasahiro Yamada 46 3812b8c5SMasahiro Yamada# Avoid interference with shell env settings 47 3812b8c5SMasahiro Yamadaunexport GREP_OPTIONS 48 3812b8c5SMasahiro Yamada 49 066b7ed9SMichal Marek# Beautify output 50 066b7ed9SMichal Marek# --------------------------------------------------------------------------- 51 066b7ed9SMichal Marek# 52 066b7ed9SMichal Marek# Normally, we echo the whole command before executing it. By making 53 066b7ed9SMichal Marek# that echo $($(quiet)$(cmd)), we now have the possibility to set 54 066b7ed9SMichal Marek# $(quiet) to choose other forms of output instead, e.g. 55 066b7ed9SMichal Marek# 56 066b7ed9SMichal Marek# quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@ 57 066b7ed9SMichal Marek# cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< 58 066b7ed9SMichal Marek# 59 066b7ed9SMichal Marek# If $(quiet) is empty, the whole command will be printed. 60 066b7ed9SMichal Marek# If it is set to "quiet_", only the short version will be printed. 61 066b7ed9SMichal Marek# If it is set to "silent_", nothing will be printed at all, since 62 066b7ed9SMichal Marek# the variable $(silent_cmd_cc_o_c) doesn't exist. 63 066b7ed9SMichal Marek# 64 066b7ed9SMichal Marek# A simple variant is to prefix commands with $(Q) - that's useful 65 066b7ed9SMichal Marek# for commands that shall be hidden in non-verbose mode. 66 066b7ed9SMichal Marek# 67 066b7ed9SMichal Marek# $(Q)ln $@ :< 68 066b7ed9SMichal Marek# 69 066b7ed9SMichal Marek# If KBUILD_VERBOSE equals 0 then the above command will be hidden. 70 066b7ed9SMichal Marek# If KBUILD_VERBOSE equals 1 then the above command is displayed. 71 066b7ed9SMichal Marek# 72 1da177e4SLinus Torvalds# To put more focus on warnings, be less verbose as default 73 1da177e4SLinus Torvalds# Use 'make V=1' to see the full commands 74 1da177e4SLinus Torvalds 75 1da177e4SLinus Torvaldsifeq ("$(origin V)", "command line") 76 1da177e4SLinus Torvalds KBUILD_VERBOSE = $(V) 77 1da177e4SLinus Torvaldsendif 78 1da177e4SLinus Torvaldsifndef KBUILD_VERBOSE 79 1da177e4SLinus Torvalds KBUILD_VERBOSE = 0 80 1da177e4SLinus Torvaldsendif 81 1da177e4SLinus Torvalds 82 066b7ed9SMichal Marekifeq ($(KBUILD_VERBOSE),1) 83 066b7ed9SMichal Marek quiet = 84 066b7ed9SMichal Marek Q = 85 066b7ed9SMichal Marekelse 86 066b7ed9SMichal Marek quiet=quiet_ 87 066b7ed9SMichal Marek Q = @ 88 066b7ed9SMichal Marekendif 89 066b7ed9SMichal Marek 90 066b7ed9SMichal Marek# If the user is running make -s (silent mode), suppress echoing of 91 066b7ed9SMichal Marek# commands 92 066b7ed9SMichal Marek 93 6f0fa58eSMasahiro Yamadaifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),) 94 066b7ed9SMichal Marek quiet=silent_ 95 066b7ed9SMichal Marekendif 96 066b7ed9SMichal Marek 97 066b7ed9SMichal Marekexport quiet Q KBUILD_VERBOSE 98 066b7ed9SMichal Marek 99 25b146c5SMasahiro Yamada# Kbuild will save output files in the current working directory. 100 25b146c5SMasahiro Yamada# This does not need to match to the root of the kernel source tree. 101 25b146c5SMasahiro Yamada# 102 25b146c5SMasahiro Yamada# For example, you can do this: 103 25b146c5SMasahiro Yamada# 104 25b146c5SMasahiro Yamada# cd /dir/to/store/output/files; make -f /dir/to/kernel/source/Makefile 105 25b146c5SMasahiro Yamada# 106 25b146c5SMasahiro Yamada# If you want to save output files in a different location, there are 107 25b146c5SMasahiro Yamada# two syntaxes to specify it. 108 25b146c5SMasahiro Yamada# 109 1da177e4SLinus Torvalds# 1) O= 110 1da177e4SLinus Torvalds# Use "make O=dir/to/store/output/files/" 111 1da177e4SLinus Torvalds# 112 1da177e4SLinus Torvalds# 2) Set KBUILD_OUTPUT 113 25b146c5SMasahiro Yamada# Set the environment variable KBUILD_OUTPUT to point to the output directory. 114 25b146c5SMasahiro Yamada# export KBUILD_OUTPUT=dir/to/store/output/files/; make 115 1da177e4SLinus Torvalds# 116 1da177e4SLinus Torvalds# The O= assignment takes precedence over the KBUILD_OUTPUT environment 117 1da177e4SLinus Torvalds# variable. 118 1da177e4SLinus Torvalds 119 25b146c5SMasahiro Yamada# Do we want to change the working directory? 120 1da177e4SLinus Torvaldsifeq ("$(origin O)", "command line") 121 1da177e4SLinus Torvalds KBUILD_OUTPUT := $(O) 122 1da177e4SLinus Torvaldsendif 123 1da177e4SLinus Torvalds 124 25b146c5SMasahiro Yamadaifneq ($(KBUILD_OUTPUT),) 125 25b146c5SMasahiro Yamada# Make's built-in functions such as $(abspath ...), $(realpath ...) cannot 126 25b146c5SMasahiro Yamada# expand a shell special character '~'. We use a somewhat tedious way here. 127 25b146c5SMasahiro Yamadaabs_objtree := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd) 128 25b146c5SMasahiro Yamada$(if $(abs_objtree),, \ 129 25b146c5SMasahiro Yamada $(error failed to create output directory "$(KBUILD_OUTPUT)")) 130 25b146c5SMasahiro Yamada 131 25b146c5SMasahiro Yamada# $(realpath ...) resolves symlinks 132 25b146c5SMasahiro Yamadaabs_objtree := $(realpath $(abs_objtree)) 133 25b146c5SMasahiro Yamadaelse 134 25b146c5SMasahiro Yamadaabs_objtree := $(CURDIR) 135 25b146c5SMasahiro Yamadaendif # ifneq ($(KBUILD_OUTPUT),) 136 25b146c5SMasahiro Yamada 137 25b146c5SMasahiro Yamadaifeq ($(abs_objtree),$(CURDIR)) 138 25b146c5SMasahiro Yamada# Suppress "Entering directory ..." unless we are changing the work directory. 139 25b146c5SMasahiro YamadaMAKEFLAGS += --no-print-directory 140 25b146c5SMasahiro Yamadaelse 141 25b146c5SMasahiro Yamadaneed-sub-make := 1 142 51193b76SRobert Jarzmikendif 143 51193b76SRobert Jarzmik 144 25b146c5SMasahiro Yamadaabs_srctree := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) 145 1da177e4SLinus Torvalds 146 25b146c5SMasahiro Yamadaifneq ($(words $(subst :, ,$(abs_srctree))), 1) 147 25b146c5SMasahiro Yamada$(error source directory cannot contain spaces or colons) 148 25b146c5SMasahiro Yamadaendif 149 25b146c5SMasahiro Yamada 150 25b146c5SMasahiro Yamadaifneq ($(abs_srctree),$(abs_objtree)) 151 80463f1bSMasahiro Yamada# Look for make include files relative to root of kernel src 152 80463f1bSMasahiro Yamada# 153 80463f1bSMasahiro Yamada# This does not become effective immediately because MAKEFLAGS is re-parsed 154 25b146c5SMasahiro Yamada# once after the Makefile is read. We need to invoke sub-make. 155 25b146c5SMasahiro YamadaMAKEFLAGS += --include-dir=$(abs_srctree) 156 688931a5SMasahiro Yamadaneed-sub-make := 1 157 25b146c5SMasahiro Yamadaendif 158 3812b8c5SMasahiro Yamada 159 688931a5SMasahiro Yamadaifneq ($(filter 3.%,$(MAKE_VERSION)),) 160 688931a5SMasahiro Yamada# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x 161 688931a5SMasahiro Yamada# We need to invoke sub-make to avoid implicit rules in the top Makefile. 162 688931a5SMasahiro Yamadaneed-sub-make := 1 163 688931a5SMasahiro Yamada# Cancel implicit rules for this Makefile. 164 688931a5SMasahiro Yamada$(lastword $(MAKEFILE_LIST)): ; 165 688931a5SMasahiro Yamadaendif 166 688931a5SMasahiro Yamada 167 25b146c5SMasahiro Yamadaexport abs_srctree abs_objtree 168 221cc2d2SMasahiro Yamadaexport sub_make_done := 1 169 221cc2d2SMasahiro Yamada 170 688931a5SMasahiro Yamadaifeq ($(need-sub-make),1) 171 688931a5SMasahiro Yamada 172 0b35786dSMilton MillerPHONY += $(MAKECMDGOALS) sub-make 173 0b35786dSMilton Miller 174 0209987fSMasahiro Yamada$(filter-out _all sub-make $(lastword $(MAKEFILE_LIST)), $(MAKECMDGOALS)) _all: sub-make 175 16f89098SCharles Keepax @: 176 0b35786dSMilton Miller 177 c4e6fff1SCao jin# Invoke a second make in the output directory, passing relevant variables 178 2e8d696bSMasahiro Yamadasub-make: 179 25b146c5SMasahiro Yamada $(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS) 180 1da177e4SLinus Torvalds 181 688931a5SMasahiro Yamadaendif # need-sub-make 182 221cc2d2SMasahiro Yamadaendif # sub_make_done 183 688931a5SMasahiro Yamada 184 1da177e4SLinus Torvalds# We process the rest of the Makefile if this is the final invocation of make 185 688931a5SMasahiro Yamadaifeq ($(need-sub-make),) 186 1da177e4SLinus Torvalds 187 7ff52571SMasahiro Yamada# Do not print "Entering directory ...", 188 7ff52571SMasahiro Yamada# but we want to display it when entering to the output directory 189 7ff52571SMasahiro Yamada# so that IDEs/editors are able to understand relative filenames. 190 7ff52571SMasahiro YamadaMAKEFLAGS += --no-print-directory 191 7ff52571SMasahiro Yamada 192 aa55c8e2SMasahiro Yamada# Call a source code checker (by default, "sparse") as part of the 193 aa55c8e2SMasahiro Yamada# C compilation. 194 aa55c8e2SMasahiro Yamada# 195 aa55c8e2SMasahiro Yamada# Use 'make C=1' to enable checking of only re-compiled files. 196 aa55c8e2SMasahiro Yamada# Use 'make C=2' to enable checking of *all* source files, regardless 197 aa55c8e2SMasahiro Yamada# of whether they are re-compiled or not. 198 aa55c8e2SMasahiro Yamada# 199 036db11cSCao jin# See the file "Documentation/dev-tools/sparse.rst" for more details, 200 036db11cSCao jin# including where to get the "sparse" utility. 201 aa55c8e2SMasahiro Yamada 202 aa55c8e2SMasahiro Yamadaifeq ("$(origin C)", "command line") 203 aa55c8e2SMasahiro Yamada KBUILD_CHECKSRC = $(C) 204 aa55c8e2SMasahiro Yamadaendif 205 aa55c8e2SMasahiro Yamadaifndef KBUILD_CHECKSRC 206 aa55c8e2SMasahiro Yamada KBUILD_CHECKSRC = 0 207 aa55c8e2SMasahiro Yamadaendif 208 aa55c8e2SMasahiro Yamada 209 7e35b425SMasahiro Yamada# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the 210 7e35b425SMasahiro Yamada# directory of external module to build. Setting M= takes precedence. 211 aa55c8e2SMasahiro Yamadaifeq ("$(origin M)", "command line") 212 aa55c8e2SMasahiro Yamada KBUILD_EXTMOD := $(M) 213 aa55c8e2SMasahiro Yamadaendif 214 aa55c8e2SMasahiro Yamada 215 051f278eSMasahiro Yamadaexport KBUILD_CHECKSRC KBUILD_EXTMOD 216 051f278eSMasahiro Yamada 217 394053f4SMasahiro Yamadaextmod-prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/) 218 394053f4SMasahiro Yamada 219 25b146c5SMasahiro Yamadaifeq ($(abs_srctree),$(abs_objtree)) 220 9da0763bSMichal Marek # building in the source tree 221 9da0763bSMichal Marek srctree := . 222 051f278eSMasahiro Yamada building_out_of_srctree := 223 9da0763bSMichal Marekelse 224 25b146c5SMasahiro Yamada ifeq ($(abs_srctree)/,$(dir $(abs_objtree))) 225 9da0763bSMichal Marek # building in a subdirectory of the source tree 226 9da0763bSMichal Marek srctree := .. 227 9da0763bSMichal Marek else 228 25b146c5SMasahiro Yamada srctree := $(abs_srctree) 229 9da0763bSMichal Marek endif 230 051f278eSMasahiro Yamada building_out_of_srctree := 1 231 9da0763bSMichal Marekendif 232 2c1f4f12SMasahiro Yamada 233 95fd3f87SMasahiro Yamadaifneq ($(KBUILD_ABS_SRCTREE),) 234 95fd3f87SMasahiro Yamadasrctree := $(abs_srctree) 235 95fd3f87SMasahiro Yamadaendif 236 2c1f4f12SMasahiro Yamada 237 7e1c0477SMichal Marekobjtree := . 238 6b12de69SMasahiro YamadaVPATH := $(srctree) 239 1da177e4SLinus Torvalds 240 051f278eSMasahiro Yamadaexport building_out_of_srctree srctree objtree VPATH 241 1da177e4SLinus Torvalds 242 2c1f4f12SMasahiro Yamada# To make sure we do not include .config for any of the *config targets 243 2c1f4f12SMasahiro Yamada# catch them early, and hand them over to scripts/kconfig/Makefile 244 2c1f4f12SMasahiro Yamada# It is allowed to specify more targets when calling make, including 245 2c1f4f12SMasahiro Yamada# mixing *config targets and build targets. 246 2c1f4f12SMasahiro Yamada# For example 'make oldconfig all'. 247 2c1f4f12SMasahiro Yamada# Detect when mixed targets is specified, and make a second invocation 248 2c1f4f12SMasahiro Yamada# of make so .config is not included in this case either (for *config). 249 2c1f4f12SMasahiro Yamada 250 2c1f4f12SMasahiro Yamadaversion_h := include/generated/uapi/linux/version.h 251 2c1f4f12SMasahiro Yamadaold_version_h := include/linux/version.h 252 2c1f4f12SMasahiro Yamada 253 22340a06SMasahiro Yamadaclean-targets := %clean mrproper cleandocs 254 22340a06SMasahiro Yamadano-dot-config-targets := $(clean-targets) \ 255 2c1f4f12SMasahiro Yamada cscope gtags TAGS tags help% %docs check% coccicheck \ 256 59b2bd05SMasahiro Yamada $(version_h) headers headers_% archheaders archscripts \ 257 63e31a67SMasahiro Yamada %asm-generic kernelversion %src-pkg 258 a29d4d8cSMasahiro Yamadano-sync-config-targets := $(no-dot-config-targets) install %install \ 259 a29d4d8cSMasahiro Yamada kernelrelease 260 394053f4SMasahiro Yamadasingle-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ 261 2c1f4f12SMasahiro Yamada 262 2042b548SMasahiro Yamadaconfig-build := 263 2042b548SMasahiro Yamadamixed-build := 264 2042b548SMasahiro Yamadaneed-config := 1 265 d7942413SMasahiro Yamadamay-sync-config := 1 266 394053f4SMasahiro Yamadasingle-build := 267 2c1f4f12SMasahiro Yamada 268 2c1f4f12SMasahiro Yamadaifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) 269 2c1f4f12SMasahiro Yamada ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),) 270 2042b548SMasahiro Yamada need-config := 271 2c1f4f12SMasahiro Yamada endif 272 2c1f4f12SMasahiro Yamadaendif 273 2c1f4f12SMasahiro Yamada 274 d7942413SMasahiro Yamadaifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),) 275 d7942413SMasahiro Yamada ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),) 276 2042b548SMasahiro Yamada may-sync-config := 277 d7942413SMasahiro Yamada endif 278 d7942413SMasahiro Yamadaendif 279 d7942413SMasahiro Yamada 280 d7942413SMasahiro Yamadaifneq ($(KBUILD_EXTMOD),) 281 2042b548SMasahiro Yamada may-sync-config := 282 d7942413SMasahiro Yamadaendif 283 d7942413SMasahiro Yamada 284 2c1f4f12SMasahiro Yamadaifeq ($(KBUILD_EXTMOD),) 285 2c1f4f12SMasahiro Yamada ifneq ($(filter config %config,$(MAKECMDGOALS)),) 286 2042b548SMasahiro Yamada config-build := 1 287 2c1f4f12SMasahiro Yamada ifneq ($(words $(MAKECMDGOALS)),1) 288 2042b548SMasahiro Yamada mixed-build := 1 289 2c1f4f12SMasahiro Yamada endif 290 2c1f4f12SMasahiro Yamada endif 291 2c1f4f12SMasahiro Yamadaendif 292 22340a06SMasahiro Yamada 293 394053f4SMasahiro Yamada# We cannot build single targets and the others at the same time 294 394053f4SMasahiro Yamadaifneq ($(filter $(single-targets), $(MAKECMDGOALS)),) 295 394053f4SMasahiro Yamada single-build := 1 296 394053f4SMasahiro Yamada ifneq ($(filter-out $(single-targets), $(MAKECMDGOALS)),) 297 394053f4SMasahiro Yamada mixed-build := 1 298 394053f4SMasahiro Yamada endif 299 394053f4SMasahiro Yamadaendif 300 394053f4SMasahiro Yamada 301 22340a06SMasahiro Yamada# For "make -j clean all", "make -j mrproper defconfig all", etc. 302 22340a06SMasahiro Yamadaifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),) 303 22340a06SMasahiro Yamada ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),) 304 2042b548SMasahiro Yamada mixed-build := 1 305 22340a06SMasahiro Yamada endif 306 22340a06SMasahiro Yamadaendif 307 22340a06SMasahiro Yamada 308 2c1f4f12SMasahiro Yamada# install and modules_install need also be processed one by one 309 2c1f4f12SMasahiro Yamadaifneq ($(filter install,$(MAKECMDGOALS)),) 310 2c1f4f12SMasahiro Yamada ifneq ($(filter modules_install,$(MAKECMDGOALS)),) 311 2042b548SMasahiro Yamada mixed-build := 1 312 2c1f4f12SMasahiro Yamada endif 313 2c1f4f12SMasahiro Yamadaendif 314 2c1f4f12SMasahiro Yamada 315 2042b548SMasahiro Yamadaifdef mixed-build 316 2c1f4f12SMasahiro Yamada# =========================================================================== 317 2c1f4f12SMasahiro Yamada# We're called with mixed targets (*config and build targets). 318 2c1f4f12SMasahiro Yamada# Handle them one by one. 319 2c1f4f12SMasahiro Yamada 320 2c1f4f12SMasahiro YamadaPHONY += $(MAKECMDGOALS) __build_one_by_one 321 2c1f4f12SMasahiro Yamada 322 2c1f4f12SMasahiro Yamada$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one 323 2c1f4f12SMasahiro Yamada @: 324 2c1f4f12SMasahiro Yamada 325 2c1f4f12SMasahiro Yamada__build_one_by_one: 326 2c1f4f12SMasahiro Yamada $(Q)set -e; \ 327 2c1f4f12SMasahiro Yamada for i in $(MAKECMDGOALS); do \ 328 2c1f4f12SMasahiro Yamada $(MAKE) -f $(srctree)/Makefile $$i; \ 329 2c1f4f12SMasahiro Yamada done 330 2c1f4f12SMasahiro Yamada 331 2042b548SMasahiro Yamadaelse # !mixed-build 332 2c1f4f12SMasahiro Yamada 333 2c1f4f12SMasahiro Yamadainclude scripts/Kbuild.include 334 2c1f4f12SMasahiro Yamada 335 2c1f4f12SMasahiro Yamada# Read KERNELRELEASE from include/config/kernel.release (if it exists) 336 2c1f4f12SMasahiro YamadaKERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) 337 2c1f4f12SMasahiro YamadaKERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) 338 2c1f4f12SMasahiro Yamadaexport VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION 339 2c1f4f12SMasahiro Yamada 340 b2d35fa5SAnders Roxellinclude scripts/subarch.include 341 1da177e4SLinus Torvalds 342 1da177e4SLinus Torvalds# Cross compiling and selecting different set of gcc/bin-utils 343 1da177e4SLinus Torvalds# --------------------------------------------------------------------------- 344 1da177e4SLinus Torvalds# 345 1da177e4SLinus Torvalds# When performing cross compilation for other architectures ARCH shall be set 346 1da177e4SLinus Torvalds# to the target architecture. (See arch/* for the possibilities). 347 1da177e4SLinus Torvalds# ARCH can be set during invocation of make: 348 1da177e4SLinus Torvalds# make ARCH=ia64 349 1da177e4SLinus Torvalds# Another way is to have ARCH set in the environment. 350 1da177e4SLinus Torvalds# The default ARCH is the host where make is executed. 351 1da177e4SLinus Torvalds 352 1da177e4SLinus Torvalds# CROSS_COMPILE specify the prefix used for all executables used 353 1da177e4SLinus Torvalds# during compilation. Only gcc and related bin-utils executables 354 1da177e4SLinus Torvalds# are prefixed with $(CROSS_COMPILE). 355 1da177e4SLinus Torvalds# CROSS_COMPILE can be set on the command line 356 1da177e4SLinus Torvalds# make CROSS_COMPILE=ia64-linux- 357 1da177e4SLinus Torvalds# Alternatively CROSS_COMPILE can be set in the environment. 358 1da177e4SLinus Torvalds# Default value for CROSS_COMPILE is not to prefix executables 359 1da177e4SLinus Torvalds# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile 360 2331d1a6SSam RavnborgARCH ?= $(SUBARCH) 361 1da177e4SLinus Torvalds 362 1da177e4SLinus Torvalds# Architecture as present in compile.h 363 1da177e4SLinus TorvaldsUTS_MACHINE := $(ARCH) 364 6752ed90SThomas GleixnerSRCARCH := $(ARCH) 365 1da177e4SLinus Torvalds 366 d746d647SSam Ravnborg# Additional ARCH settings for x86 367 d746d647SSam Ravnborgifeq ($(ARCH),i386) 368 d746d647SSam Ravnborg SRCARCH := x86 369 d746d647SSam Ravnborgendif 370 d746d647SSam Ravnborgifeq ($(ARCH),x86_64) 371 d746d647SSam Ravnborg SRCARCH := x86 372 d746d647SSam Ravnborgendif 373 74b469f2SSam Ravnborg 374 5e538790SSam Ravnborg# Additional ARCH settings for sparc 375 e69f58c0SNamhyung Kimifeq ($(ARCH),sparc32) 376 e69f58c0SNamhyung Kim SRCARCH := sparc 377 e69f58c0SNamhyung Kimendif 378 a439fe51SSam Ravnborgifeq ($(ARCH),sparc64) 379 5e538790SSam Ravnborg SRCARCH := sparc 380 a439fe51SSam Ravnborgendif 381 2fb9b1bdSSam Ravnborg 382 3cc000b5SPaul Mundt# Additional ARCH settings for sh 383 3cc000b5SPaul Mundtifeq ($(ARCH),sh64) 384 3cc000b5SPaul Mundt SRCARCH := sh 385 3cc000b5SPaul Mundtendif 386 3cc000b5SPaul Mundt 387 14cdd3c4SRoman ZippelKCONFIG_CONFIG ?= .config 388 41263fc6SBen Gardinerexport KCONFIG_CONFIG 389 14cdd3c4SRoman Zippel 390 1da177e4SLinus Torvalds# SHELL used by kbuild 391 858805b3SMasahiro YamadaCONFIG_SHELL := sh 392 1da177e4SLinus Torvalds 393 6d79a7b4SMasahiro YamadaHOST_LFS_CFLAGS := $(shell getconf LFS_CFLAGS 2>/dev/null) 394 6d79a7b4SMasahiro YamadaHOST_LFS_LDFLAGS := $(shell getconf LFS_LDFLAGS 2>/dev/null) 395 6d79a7b4SMasahiro YamadaHOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null) 396 d7f14c66SUwe Kleine-König 397 1da177e4SLinus TorvaldsHOSTCC = gcc 398 1da177e4SLinus TorvaldsHOSTCXX = g++ 399 96f14fe7SLaura AbbottKBUILD_HOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \ 400 f92d19e0SLaura Abbott -fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \ 401 f92d19e0SLaura Abbott $(HOSTCFLAGS) 402 f92d19e0SLaura AbbottKBUILD_HOSTCXXFLAGS := -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS) 403 f92d19e0SLaura AbbottKBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS) 404 f92d19e0SLaura AbbottKBUILD_HOSTLDLIBS := $(HOST_LFS_LIBS) $(HOSTLDLIBS) 405 1da177e4SLinus Torvalds 406 1da177e4SLinus Torvalds# Make variables (CC, etc...) 407 1da177e4SLinus TorvaldsAS = $(CROSS_COMPILE)as 408 1da177e4SLinus TorvaldsLD = $(CROSS_COMPILE)ld 409 1da177e4SLinus TorvaldsCC = $(CROSS_COMPILE)gcc 410 1da177e4SLinus TorvaldsCPP = $(CC) -E 411 1da177e4SLinus TorvaldsAR = $(CROSS_COMPILE)ar 412 1da177e4SLinus TorvaldsNM = $(CROSS_COMPILE)nm 413 1da177e4SLinus TorvaldsSTRIP = $(CROSS_COMPILE)strip 414 1da177e4SLinus TorvaldsOBJCOPY = $(CROSS_COMPILE)objcopy 415 1da177e4SLinus TorvaldsOBJDUMP = $(CROSS_COMPILE)objdump 416 7bac9870SVasily GorbikOBJSIZE = $(CROSS_COMPILE)size 417 eefb8c12SDmitry GolovinREADELF = $(CROSS_COMPILE)readelf 418 e83b9f55SAndrii NakryikoPAHOLE = pahole 419 73a4f6dbSMasahiro YamadaLEX = flex 420 73a4f6dbSMasahiro YamadaYACC = bison 421 1da177e4SLinus TorvaldsAWK = awk 422 caa27b66SSam RavnborgINSTALLKERNEL := installkernel 423 1da177e4SLinus TorvaldsDEPMOD = /sbin/depmod 424 1da177e4SLinus TorvaldsPERL = perl 425 011bf125SMasahiro YamadaPYTHON = python 426 e9781b52SMasahiro YamadaPYTHON2 = python2 427 e9781b52SMasahiro YamadaPYTHON3 = python3 428 1da177e4SLinus TorvaldsCHECK = sparse 429 858805b3SMasahiro YamadaBASH = bash 430 1da177e4SLinus Torvalds 431 80a7d1d9SHannes EderCHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \ 432 6c49f359SLuc Van Oostenryck -Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF) 433 0c22be07SDouglas AndersonNOSTDINC_FLAGS := 434 6588169dSSam RavnborgCFLAGS_MODULE = 435 6588169dSSam RavnborgAFLAGS_MODULE = 436 6588169dSSam RavnborgLDFLAGS_MODULE = 437 1da177e4SLinus TorvaldsCFLAGS_KERNEL = 438 1da177e4SLinus TorvaldsAFLAGS_KERNEL = 439 b36fad65SMichal MarekLDFLAGS_vmlinux = 440 1da177e4SLinus Torvalds 441 abbf1590SDavid Howells# Use USERINCLUDE when you must reference the UAPI directories only. 442 abbf1590SDavid HowellsUSERINCLUDE := \ 443 9d022c54SMasahiro Yamada -I$(srctree)/arch/$(SRCARCH)/include/uapi \ 444 9d022c54SMasahiro Yamada -I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \ 445 abbf1590SDavid Howells -I$(srctree)/include/uapi \ 446 3308b285SArnd Bergmann -I$(objtree)/include/generated/uapi \ 447 abbf1590SDavid Howells -include $(srctree)/include/linux/kconfig.h 448 abbf1590SDavid Howells 449 1da177e4SLinus Torvalds# Use LINUXINCLUDE when you must reference the include/ directory. 450 1da177e4SLinus Torvalds# Needed to be compatible with the O= option 451 abbf1590SDavid HowellsLINUXINCLUDE := \ 452 9d022c54SMasahiro Yamada -I$(srctree)/arch/$(SRCARCH)/include \ 453 9d022c54SMasahiro Yamada -I$(objtree)/arch/$(SRCARCH)/include/generated \ 454 051f278eSMasahiro Yamada $(if $(building_out_of_srctree),-I$(srctree)/include) \ 455 f8224f7fSMasahiro Yamada -I$(objtree)/include \ 456 f8224f7fSMasahiro Yamada $(USERINCLUDE) 457 1da177e4SLinus Torvalds 458 42a92bccSMasahiro YamadaKBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE 459 eeb5687aSMasahiro YamadaKBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \ 460 42a92bccSMasahiro Yamada -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \ 461 b89f25eaSLuc Van Oostenryck -Werror=implicit-function-declaration -Werror=implicit-int \ 462 51b97e35SKirill A. Shutemov -Wno-format-security \ 463 433dc2ebSMasahiro Yamada -std=gnu89 464 433dc2ebSMasahiro YamadaKBUILD_CPPFLAGS := -D__KERNEL__ 465 80c00ba9SSam RavnborgKBUILD_AFLAGS_KERNEL := 466 80c00ba9SSam RavnborgKBUILD_CFLAGS_KERNEL := 467 6588169dSSam RavnborgKBUILD_AFLAGS_MODULE := -DMODULE 468 6588169dSSam RavnborgKBUILD_CFLAGS_MODULE := -DMODULE 469 10df0638SMasahiro YamadaKBUILD_LDFLAGS_MODULE := 470 10df0638SMasahiro Yamadaexport KBUILD_LDS_MODULE := $(srctree)/scripts/module-common.lds 471 d503ac53SMasahiro YamadaKBUILD_LDFLAGS := 472 433dc2ebSMasahiro YamadaGCC_PLUGINS_CFLAGS := 473 5241ab4cSMasahiro YamadaCLANG_FLAGS := 474 1da177e4SLinus Torvalds 475 858805b3SMasahiro Yamadaexport ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC 476 eefb8c12SDmitry Golovinexport CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE LEX YACC AWK INSTALLKERNEL 477 7bac9870SVasily Gorbikexport PERL PYTHON PYTHON2 PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX 478 7bac9870SVasily Gorbikexport KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE 479 1da177e4SLinus Torvalds 480 d503ac53SMasahiro Yamadaexport KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS 481 0e410e15SAndrey Konovalovexport KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE 482 0e410e15SAndrey Konovalovexport CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN 483 222d394dSSam Ravnborgexport KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE 484 6588169dSSam Ravnborgexport KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE 485 80c00ba9SSam Ravnborgexport KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL 486 1da177e4SLinus Torvalds 487 1da177e4SLinus Torvalds# Files to ignore in find ... statements 488 1da177e4SLinus Torvalds 489 ae63b2d7SPrarit Bhargavaexport RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o \ 490 ae63b2d7SPrarit Bhargava -name CVS -o -name .pc -o -name .hg -o -name .git \) \ 491 ae63b2d7SPrarit Bhargava -prune -o 492 450c6076SJesper Juhlexport RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \ 493 450c6076SJesper Juhl --exclude CVS --exclude .pc --exclude .hg --exclude .git 494 1da177e4SLinus Torvalds 495 1da177e4SLinus Torvalds# =========================================================================== 496 1da177e4SLinus Torvalds# Rules shared between *config targets and build targets 497 1da177e4SLinus Torvalds 498 312a3d09SCao jin# Basic helpers built in scripts/basic/ 499 4f193362SPaul SmithPHONY += scripts_basic 500 1da177e4SLinus Torvaldsscripts_basic: 501 1da177e4SLinus Torvalds $(Q)$(MAKE) $(build)=scripts/basic 502 638adb05SSteven Rostedt $(Q)rm -f .tmp_quiet_recordmcount 503 1da177e4SLinus Torvalds 504 4f193362SPaul SmithPHONY += outputmakefile 505 e8e83a23SMasahiro Yamada# Before starting out-of-tree build, make sure the source tree is clean. 506 fd5f0cd6SJan Beulich# outputmakefile generates a Makefile in the output directory, if using a 507 fd5f0cd6SJan Beulich# separate output directory. This allows convenient use of make in the 508 fd5f0cd6SJan Beulich# output directory. 509 3a51ff34SVladimir Kondratiev# At the same time when output Makefile generated, generate .gitignore to 510 3a51ff34SVladimir Kondratiev# ignore whole output directory 511 1da177e4SLinus Torvaldsoutputmakefile: 512 051f278eSMasahiro Yamadaifdef building_out_of_srctree 513 e8e83a23SMasahiro Yamada $(Q)if [ -f $(srctree)/.config -o \ 514 e8e83a23SMasahiro Yamada -d $(srctree)/include/config -o \ 515 e8e83a23SMasahiro Yamada -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \ 516 e8e83a23SMasahiro Yamada echo >&2 "***"; \ 517 e8e83a23SMasahiro Yamada echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \ 518 e8e83a23SMasahiro Yamada echo >&2 "*** in $(abs_srctree)";\ 519 e8e83a23SMasahiro Yamada echo >&2 "***"; \ 520 e8e83a23SMasahiro Yamada false; \ 521 e8e83a23SMasahiro Yamada fi 522 92979997SAndi Kleen $(Q)ln -fsn $(srctree) source 523 4fd61277SMasahiro Yamada $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) 524 156e7cbbSMasahiro Yamada $(Q)test -e .gitignore || \ 525 156e7cbbSMasahiro Yamada { echo "# this is build directory, ignore it"; echo "*"; } > .gitignore 526 fd5f0cd6SJan Beulichendif 527 1da177e4SLinus Torvalds 528 99516742SMasahiro Yamadaifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) 529 ae6b289aSChris Friesifneq ($(CROSS_COMPILE),) 530 5241ab4cSMasahiro YamadaCLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%)) 531 ad15006cSNick DesaulniersGCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit)) 532 238bcbc4SMasahiro YamadaCLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR) 533 ef8c4ed9SStefan AgnerGCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..) 534 ae6b289aSChris Friesendif 535 ae6b289aSChris Friesifneq ($(GCC_TOOLCHAIN),) 536 238bcbc4SMasahiro YamadaCLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN) 537 ae6b289aSChris Friesendif 538 876a0600SNathan Chancellorifeq ($(shell $(AS) --version 2>&1 | head -n 1 | grep clang),) 539 238bcbc4SMasahiro YamadaCLANG_FLAGS += -no-integrated-as 540 876a0600SNathan Chancellorendif 541 589834b3SNathan ChancellorCLANG_FLAGS += -Werror=unknown-warning-option 542 238bcbc4SMasahiro YamadaKBUILD_CFLAGS += $(CLANG_FLAGS) 543 238bcbc4SMasahiro YamadaKBUILD_AFLAGS += $(CLANG_FLAGS) 544 3bd98050SJoel Stanleyexport CLANG_FLAGS 545 ae6b289aSChris Friesendif 546 ae6b289aSChris Fries 547 315bab4eSMasahiro Yamada# The expansion should be delayed until arch/$(SRCARCH)/Makefile is included. 548 315bab4eSMasahiro Yamada# Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile. 549 315bab4eSMasahiro Yamada# CC_VERSION_TEXT is referenced from Kconfig (so it needs export), 550 315bab4eSMasahiro Yamada# and from include/config/auto.conf.cmd to detect the compiler upgrade. 551 902a6898SMasahiro YamadaCC_VERSION_TEXT = $(shell $(CC) --version 2>/dev/null | head -n 1) 552 315bab4eSMasahiro Yamada 553 2042b548SMasahiro Yamadaifdef config-build 554 1da177e4SLinus Torvalds# =========================================================================== 555 1da177e4SLinus Torvalds# *config targets only - make sure prerequisites are updated, and descend 556 1da177e4SLinus Torvalds# in scripts/kconfig to make the *config target 557 1da177e4SLinus Torvalds 558 1da177e4SLinus Torvalds# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed. 559 1da177e4SLinus Torvalds# KBUILD_DEFCONFIG may point out an alternative default configuration 560 1da177e4SLinus Torvalds# used for 'make defconfig' 561 a436bb7bSMasahiro Yamadainclude arch/$(SRCARCH)/Makefile 562 315bab4eSMasahiro Yamadaexport KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT 563 1da177e4SLinus Torvalds 564 36de077bSMasahiro Yamadaconfig: outputmakefile scripts_basic FORCE 565 31110ebbSSam Ravnborg $(Q)$(MAKE) $(build)=scripts/kconfig $@ 566 31110ebbSSam Ravnborg 567 36de077bSMasahiro Yamada%config: outputmakefile scripts_basic FORCE 568 1da177e4SLinus Torvalds $(Q)$(MAKE) $(build)=scripts/kconfig $@ 569 1da177e4SLinus Torvalds 570 2042b548SMasahiro Yamadaelse #!config-build 571 1da177e4SLinus Torvalds# =========================================================================== 572 1da177e4SLinus Torvalds# Build targets only - this includes vmlinux, arch specific targets, clean 573 1da177e4SLinus Torvalds# targets and others. In general all targets except *config targets. 574 1da177e4SLinus Torvalds 575 2c1f4f12SMasahiro Yamada# If building an external module we do not care about the all: rule 576 2c1f4f12SMasahiro Yamada# but instead _all depend on modules 577 2c1f4f12SMasahiro YamadaPHONY += all 578 2c1f4f12SMasahiro Yamadaifeq ($(KBUILD_EXTMOD),) 579 2c1f4f12SMasahiro Yamada_all: all 580 2c1f4f12SMasahiro Yamadaelse 581 2c1f4f12SMasahiro Yamada_all: modules 582 2c1f4f12SMasahiro Yamadaendif 583 2c1f4f12SMasahiro Yamada 584 2c1f4f12SMasahiro Yamada# Decide whether to build built-in, modular, or both. 585 2c1f4f12SMasahiro Yamada# Normally, just do built-in. 586 2c1f4f12SMasahiro Yamada 587 2c1f4f12SMasahiro YamadaKBUILD_MODULES := 588 2c1f4f12SMasahiro YamadaKBUILD_BUILTIN := 1 589 2c1f4f12SMasahiro Yamada 590 2c1f4f12SMasahiro Yamada# If we have only "make modules", don't compile built-in objects. 591 2c1f4f12SMasahiro Yamada# When we're building modules with modversions, we need to consider 592 2c1f4f12SMasahiro Yamada# the built-in objects during the descend as well, in order to 593 2c1f4f12SMasahiro Yamada# make sure the checksums are up to date before we record them. 594 2c1f4f12SMasahiro Yamada 595 2c1f4f12SMasahiro Yamadaifeq ($(MAKECMDGOALS),modules) 596 2c1f4f12SMasahiro Yamada KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1) 597 2c1f4f12SMasahiro Yamadaendif 598 2c1f4f12SMasahiro Yamada 599 2c1f4f12SMasahiro Yamada# If we have "make <whatever> modules", compile modules 600 2c1f4f12SMasahiro Yamada# in addition to whatever we do anyway. 601 2c1f4f12SMasahiro Yamada# Just "make" or "make all" shall build modules as well 602 2c1f4f12SMasahiro Yamada 603 d85103acSMasahiro Yamadaifneq ($(filter all _all modules nsdeps,$(MAKECMDGOALS)),) 604 2c1f4f12SMasahiro Yamada KBUILD_MODULES := 1 605 2c1f4f12SMasahiro Yamadaendif 606 2c1f4f12SMasahiro Yamada 607 2c1f4f12SMasahiro Yamadaifeq ($(MAKECMDGOALS),) 608 2c1f4f12SMasahiro Yamada KBUILD_MODULES := 1 609 2c1f4f12SMasahiro Yamadaendif 610 2c1f4f12SMasahiro Yamada 611 2c1f4f12SMasahiro Yamadaexport KBUILD_MODULES KBUILD_BUILTIN 612 2c1f4f12SMasahiro Yamada 613 2042b548SMasahiro Yamadaifdef need-config 614 d93a18f2SMasahiro Yamadainclude include/config/auto.conf 615 d93a18f2SMasahiro Yamadaendif 616 d93a18f2SMasahiro Yamada 617 1da177e4SLinus Torvaldsifeq ($(KBUILD_EXTMOD),) 618 1da177e4SLinus Torvalds# Objects we will link into vmlinux / subdirs we need to visit 619 1da177e4SLinus Torvaldsinit-y := init/ 620 f96182e9SMasahiro Yamadadrivers-y := drivers/ sound/ 621 d93a18f2SMasahiro Yamadadrivers-$(CONFIG_SAMPLES) += samples/ 622 1da177e4SLinus Torvaldsnet-y := net/ 623 1da177e4SLinus Torvaldslibs-y := lib/ 624 1da177e4SLinus Torvaldscore-y := usr/ 625 37d9fe47SFeng Wuvirt-y := virt/ 626 1da177e4SLinus Torvaldsendif # KBUILD_EXTMOD 627 1da177e4SLinus Torvalds 628 315bab4eSMasahiro Yamada# The all: target is the default when no target is given on the 629 315bab4eSMasahiro Yamada# command line. 630 315bab4eSMasahiro Yamada# This allow a user to issue only 'make' to build a kernel including modules 631 315bab4eSMasahiro Yamada# Defaults to vmlinux, but the arch makefile usually adds further targets 632 315bab4eSMasahiro Yamadaall: vmlinux 633 315bab4eSMasahiro Yamada 634 315bab4eSMasahiro YamadaCFLAGS_GCOV := -fprofile-arcs -ftest-coverage \ 635 315bab4eSMasahiro Yamada $(call cc-option,-fno-tree-loop-im) \ 636 315bab4eSMasahiro Yamada $(call cc-disable-warning,maybe-uninitialized,) 637 5aadfdebSMasahiro Yamadaexport CFLAGS_GCOV 638 315bab4eSMasahiro Yamada 639 b1f4ff74SPaulo Zanoni# The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later. 640 b1f4ff74SPaulo Zanoniifdef CONFIG_FUNCTION_TRACER 641 b1f4ff74SPaulo Zanoni CC_FLAGS_FTRACE := -pg 642 b1f4ff74SPaulo Zanoniendif 643 b1f4ff74SPaulo Zanoni 644 669e06b1SMasahiro YamadaRETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register 645 669e06b1SMasahiro YamadaRETPOLINE_VDSO_CFLAGS_GCC := -mindirect-branch=thunk-inline -mindirect-branch-register 646 669e06b1SMasahiro YamadaRETPOLINE_CFLAGS_CLANG := -mretpoline-external-thunk 647 669e06b1SMasahiro YamadaRETPOLINE_VDSO_CFLAGS_CLANG := -mretpoline 648 669e06b1SMasahiro YamadaRETPOLINE_CFLAGS := $(call cc-option,$(RETPOLINE_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_CFLAGS_CLANG))) 649 669e06b1SMasahiro YamadaRETPOLINE_VDSO_CFLAGS := $(call cc-option,$(RETPOLINE_VDSO_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_VDSO_CFLAGS_CLANG))) 650 669e06b1SMasahiro Yamadaexport RETPOLINE_CFLAGS 651 669e06b1SMasahiro Yamadaexport RETPOLINE_VDSO_CFLAGS 652 669e06b1SMasahiro Yamada 653 315bab4eSMasahiro Yamadainclude arch/$(SRCARCH)/Makefile 654 315bab4eSMasahiro Yamada 655 2042b548SMasahiro Yamadaifdef need-config 656 2042b548SMasahiro Yamadaifdef may-sync-config 657 315bab4eSMasahiro Yamada# Read in dependencies to all Kconfig* files, make sure to run syncconfig if 658 315bab4eSMasahiro Yamada# changes are detected. This should be included after arch/$(SRCARCH)/Makefile 659 315bab4eSMasahiro Yamada# because some architectures define CROSS_COMPILE there. 660 d2f8ae0eSMasahiro Yamadainclude include/config/auto.conf.cmd 661 1da177e4SLinus Torvalds 662 05850719SMasahiro Yamada$(KCONFIG_CONFIG): 663 05850719SMasahiro Yamada @echo >&2 '***' 664 05850719SMasahiro Yamada @echo >&2 '*** Configuration file "$@" not found!' 665 05850719SMasahiro Yamada @echo >&2 '***' 666 05850719SMasahiro Yamada @echo >&2 '*** Please run some configurator (e.g. "make oldconfig" or' 667 05850719SMasahiro Yamada @echo >&2 '*** "make menuconfig" or "make xconfig").' 668 05850719SMasahiro Yamada @echo >&2 '***' 669 05850719SMasahiro Yamada @/bin/false 670 1da177e4SLinus Torvalds 671 61277981SUlf Magnusson# The actual configuration files used during the build are stored in 672 61277981SUlf Magnusson# include/generated/ and include/config/. Update them if .config is newer than 673 61277981SUlf Magnusson# include/config/auto.conf (which mirrors .config). 674 9390dff6SMasahiro Yamada# 675 9390dff6SMasahiro Yamada# This exploits the 'multi-target pattern rule' trick. 676 9390dff6SMasahiro Yamada# The syncconfig should be executed only once to make all the targets. 677 *8b41fc44SMasahiro Yamada%/auto.conf %/auto.conf.cmd: $(KCONFIG_CONFIG) 678 911a91c3SMasahiro Yamada $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig 679 2042b548SMasahiro Yamadaelse # !may-sync-config 680 d7942413SMasahiro Yamada# External modules and some install targets need include/generated/autoconf.h 681 d7942413SMasahiro Yamada# and include/config/auto.conf but do not care if they are up-to-date. 682 d7942413SMasahiro Yamada# Use auto.conf to trigger the test 683 9ee4e336SSam RavnborgPHONY += include/config/auto.conf 684 9ee4e336SSam Ravnborg 685 9ee4e336SSam Ravnborginclude/config/auto.conf: 686 264a2683SSam Ravnborg $(Q)test -e include/generated/autoconf.h -a -e $@ || ( \ 687 5369f550SMichal Marek echo >&2; \ 688 5369f550SMichal Marek echo >&2 " ERROR: Kernel configuration is invalid."; \ 689 5369f550SMichal Marek echo >&2 " include/generated/autoconf.h or $@ are missing.";\ 690 5369f550SMichal Marek echo >&2 " Run 'make oldconfig && make prepare' on kernel src to fix it."; \ 691 5369f550SMichal Marek echo >&2 ; \ 692 9ee4e336SSam Ravnborg /bin/false) 693 9ee4e336SSam Ravnborg 694 d7942413SMasahiro Yamadaendif # may-sync-config 695 2042b548SMasahiro Yamadaendif # need-config 696 1da177e4SLinus Torvalds 697 a1c48bb1SGeert UytterhoevenKBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,) 698 ef6000b4SLinus TorvaldsKBUILD_CFLAGS += $(call cc-disable-warning,frame-address,) 699 bd664f6bSLinus TorvaldsKBUILD_CFLAGS += $(call cc-disable-warning, format-truncation) 700 bd664f6bSLinus TorvaldsKBUILD_CFLAGS += $(call cc-disable-warning, format-overflow) 701 6f303d60SLinus TorvaldsKBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) 702 a1c48bb1SGeert Uytterhoeven 703 15f5db60SMasahiro Yamadaifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE 704 a0f97e06SSam RavnborgKBUILD_CFLAGS += -O2 705 15f5db60SMasahiro Yamadaelse ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3 706 15f5db60SMasahiro YamadaKBUILD_CFLAGS += -O3 707 15f5db60SMasahiro Yamadaelse ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE 708 15f5db60SMasahiro YamadaKBUILD_CFLAGS += -Os 709 1da177e4SLinus Torvaldsendif 710 1da177e4SLinus Torvalds 711 b303c6dfSMasahiro Yamadaifdef CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED 712 b303c6dfSMasahiro YamadaKBUILD_CFLAGS += -Wno-maybe-uninitialized 713 b303c6dfSMasahiro Yamadaendif 714 a76bcf55SArnd Bergmann 715 69102311SJiri Kosina# Tell gcc to never replace conditional load with a non-conditional one 716 69102311SJiri KosinaKBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0) 717 69102311SJiri Kosina 718 d677a4d6SVictor Chibotaruinclude scripts/Makefile.kcov 719 6b90bd4bSEmese Revfyinclude scripts/Makefile.gcc-plugins 720 6b90bd4bSEmese Revfy 721 1873e870SAndi Kleenifdef CONFIG_READABLE_ASM 722 1873e870SAndi Kleen# Disable optimizations that make assembler listings hard to read. 723 1873e870SAndi Kleen# reorder blocks reorders the control in the function 724 1873e870SAndi Kleen# ipa clone creates specialized cloned functions 725 1873e870SAndi Kleen# partial inlining inlines only parts of functions 726 1873e870SAndi KleenKBUILD_CFLAGS += $(call cc-option,-fno-reorder-blocks,) \ 727 1873e870SAndi Kleen $(call cc-option,-fno-ipa-cp-clone,) \ 728 1873e870SAndi Kleen $(call cc-option,-fno-partial-inlining) 729 1873e870SAndi Kleenendif 730 1873e870SAndi Kleen 731 08f67461SMike Frysingerifneq ($(CONFIG_FRAME_WARN),0) 732 35bb5b1eSAndi KleenKBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN}) 733 35bb5b1eSAndi Kleenendif 734 35bb5b1eSAndi Kleen 735 2a61f474SMasahiro Yamadastackp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector 736 050e9baaSLinus Torvaldsstackp-flags-$(CONFIG_STACKPROTECTOR) := -fstack-protector 737 050e9baaSLinus Torvaldsstackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong 738 2a61f474SMasahiro Yamada 739 2a61f474SMasahiro YamadaKBUILD_CFLAGS += $(stackp-flags-y) 740 e06b8b98SSam Ravnborg 741 076f421dSMasahiro Yamadaifdef CONFIG_CC_IS_CLANG 742 a1494304SMasahiro YamadaKBUILD_CPPFLAGS += -Qunused-arguments 743 a1494304SMasahiro YamadaKBUILD_CFLAGS += -Wno-format-invalid-specifier 744 a1494304SMasahiro YamadaKBUILD_CFLAGS += -Wno-gnu 745 cfe17c9bSMasahiro Yamada# Quiet clang warning: comparison of unsigned expression < 0 is always false 746 a1494304SMasahiro YamadaKBUILD_CFLAGS += -Wno-tautological-compare 747 cfe17c9bSMasahiro Yamada# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the 748 cfe17c9bSMasahiro Yamada# source of a reference will be _MergedGlobals and not on of the whitelisted names. 749 cfe17c9bSMasahiro Yamada# See modpost pattern 2 750 a1494304SMasahiro YamadaKBUILD_CFLAGS += -mno-global-merge 751 cfe17c9bSMasahiro Yamadaelse 752 cfe17c9bSMasahiro Yamada 753 cfe17c9bSMasahiro Yamada# These warnings generated too much noise in a regular build. 754 cfe17c9bSMasahiro Yamada# Use make W=1 to enable them (see scripts/Makefile.extrawarn) 755 9df3e7a7SMasahiro YamadaKBUILD_CFLAGS += -Wno-unused-but-set-variable 756 e2079e93SNathan Chancellor 757 e2079e93SNathan Chancellor# Warn about unmarked fall-throughs in switch statement. 758 e2079e93SNathan Chancellor# Disabled for clang while comment to attribute conversion happens and 759 e2079e93SNathan Chancellor# https://github.com/ClangBuiltLinux/linux/issues/636 is discussed. 760 e2079e93SNathan ChancellorKBUILD_CFLAGS += $(call cc-option,-Wimplicit-fallthrough,) 761 cfe17c9bSMasahiro Yamadaendif 762 cfe17c9bSMasahiro Yamada 763 0a5f4176SSodagudi PrasadKBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable) 764 1da177e4SLinus Torvaldsifdef CONFIG_FRAME_POINTER 765 a0f97e06SSam RavnborgKBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls 766 1da177e4SLinus Torvaldselse 767 7e9501fdSRabin Vincent# Some targets (ARM with Thumb2, for example), can't be built with frame 768 7e9501fdSRabin Vincent# pointers. For those, we don't have FUNCTION_TRACER automatically 769 7e9501fdSRabin Vincent# select FRAME_POINTER. However, FUNCTION_TRACER adds -pg, and this is 770 7e9501fdSRabin Vincent# incompatible with -fomit-frame-pointer with current GCC, so we don't use 771 7e9501fdSRabin Vincent# -fomit-frame-pointer with FUNCTION_TRACER. 772 7e9501fdSRabin Vincentifndef CONFIG_FUNCTION_TRACER 773 a0f97e06SSam RavnborgKBUILD_CFLAGS += -fomit-frame-pointer 774 1da177e4SLinus Torvaldsendif 775 7e9501fdSRabin Vincentendif 776 1da177e4SLinus Torvalds 777 709a972eSKees Cook# Initialize all stack variables with a pattern, if desired. 778 709a972eSKees Cookifdef CONFIG_INIT_STACK_ALL 779 709a972eSKees CookKBUILD_CFLAGS += -ftrivial-auto-var-init=pattern 780 709a972eSKees Cookendif 781 709a972eSKees Cook 782 1e88e415SMasahiro YamadaDEBUG_CFLAGS := $(call cc-option, -fno-var-tracking-assignments) 783 2062afb4SLinus Torvalds 784 1da177e4SLinus Torvaldsifdef CONFIG_DEBUG_INFO 785 866ced95SAndi Kleenifdef CONFIG_DEBUG_INFO_SPLIT 786 9d937444SMasahiro YamadaDEBUG_CFLAGS += -gsplit-dwarf 787 866ced95SAndi Kleenelse 788 1e88e415SMasahiro YamadaDEBUG_CFLAGS += -g 789 866ced95SAndi Kleenendif 790 2288328cSBehan WebsterKBUILD_AFLAGS += -Wa,-gdwarf-2 791 1da177e4SLinus Torvaldsendif 792 bfaf2dd3SAndi Kleenifdef CONFIG_DEBUG_INFO_DWARF4 793 9d937444SMasahiro YamadaDEBUG_CFLAGS += -gdwarf-4 794 bfaf2dd3SAndi Kleenendif 795 1da177e4SLinus Torvalds 796 d6f4ceb7SAndi Kleenifdef CONFIG_DEBUG_INFO_REDUCED 797 1e88e415SMasahiro YamadaDEBUG_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \ 798 e82c4bb8SAndi Kleen $(call cc-option,-fno-var-tracking) 799 d6f4ceb7SAndi Kleenendif 800 d6f4ceb7SAndi Kleen 801 1e88e415SMasahiro YamadaKBUILD_CFLAGS += $(DEBUG_CFLAGS) 802 1e88e415SMasahiro Yamadaexport DEBUG_CFLAGS 803 1e88e415SMasahiro Yamada 804 606576ceSSteven Rostedtifdef CONFIG_FUNCTION_TRACER 805 07d04081SVasily Gorbikifdef CONFIG_FTRACE_MCOUNT_RECORD 806 07d04081SVasily Gorbik # gcc 5 supports generating the mcount tables directly 807 07d04081SVasily Gorbik ifeq ($(call cc-option-yn,-mrecord-mcount),y) 808 07d04081SVasily Gorbik CC_FLAGS_FTRACE += -mrecord-mcount 809 07d04081SVasily Gorbik export CC_USING_RECORD_MCOUNT := 1 810 a2546faeSSteven Rostedt endif 811 2f4df001SVasily Gorbik ifdef CONFIG_HAVE_NOP_MCOUNT 812 2f4df001SVasily Gorbik ifeq ($(call cc-option-yn, -mnop-mcount),y) 813 2f4df001SVasily Gorbik CC_FLAGS_FTRACE += -mnop-mcount 814 2f4df001SVasily Gorbik CC_FLAGS_USING += -DCC_USING_NOP_MCOUNT 815 2f4df001SVasily Gorbik endif 816 2f4df001SVasily Gorbik endif 817 07d04081SVasily Gorbikendif 818 a2546faeSSteven Rostedtifdef CONFIG_HAVE_FENTRY 819 f28bc3c3SVasily Gorbik ifeq ($(call cc-option-yn, -mfentry),y) 820 f28bc3c3SVasily Gorbik CC_FLAGS_FTRACE += -mfentry 821 f28bc3c3SVasily Gorbik CC_FLAGS_USING += -DCC_USING_FENTRY 822 a2546faeSSteven Rostedt endif 823 f28bc3c3SVasily Gorbikendif 824 f28bc3c3SVasily Gorbikexport CC_FLAGS_FTRACE 825 f28bc3c3SVasily GorbikKBUILD_CFLAGS += $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING) 826 f28bc3c3SVasily GorbikKBUILD_AFLAGS += $(CC_FLAGS_USING) 827 72441cb1SSteven Rostedtifdef CONFIG_DYNAMIC_FTRACE 828 cf4db259SSteven Rostedt ifdef CONFIG_HAVE_C_RECORDMCOUNT 829 72441cb1SSteven Rostedt BUILD_C_RECORDMCOUNT := y 830 72441cb1SSteven Rostedt export BUILD_C_RECORDMCOUNT 831 72441cb1SSteven Rostedt endif 832 72441cb1SSteven Rostedtendif 833 16444a8aSArnaldo Carvalho de Meloendif 834 16444a8aSArnaldo Carvalho de Melo 835 91341d4bSSam Ravnborg# We trigger additional mismatches with less inlining 836 91341d4bSSam Ravnborgifdef CONFIG_DEBUG_SECTION_MISMATCH 837 91341d4bSSam RavnborgKBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once) 838 91341d4bSSam Ravnborgendif 839 91341d4bSSam Ravnborg 840 90ad4052SMasahiro Yamadaifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION 841 e85d1d65SMasahiro YamadaKBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections 842 e85d1d65SMasahiro YamadaLDFLAGS_vmlinux += --gc-sections 843 90ad4052SMasahiro Yamadaendif 844 90ad4052SMasahiro Yamada 845 43bd3a95SMiroslav Benesifdef CONFIG_LIVEPATCH 846 43bd3a95SMiroslav BenesKBUILD_CFLAGS += $(call cc-option, -flive-patching=inline-clone) 847 43bd3a95SMiroslav Benesendif 848 43bd3a95SMiroslav Benes 849 e8e69931SSam Ravnborg# arch Makefile may override CC so keep this after arch Makefile is included 850 e08d6de4SMasahiro YamadaNOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) 851 e8e69931SSam Ravnborg 852 1da177e4SLinus Torvalds# warn about C99 declaration after statement 853 a33e7ae2SMasahiro YamadaKBUILD_CFLAGS += -Wdeclaration-after-statement 854 1da177e4SLinus Torvalds 855 0bb95f80SKees Cook# Variable Length Arrays (VLAs) should not be used anywhere in the kernel 856 8289f913SMasahiro YamadaKBUILD_CFLAGS += -Wvla 857 0bb95f80SKees Cook 858 070b98bfSSam Ravnborg# disable pointer signed / unsigned warnings in gcc 4.0 859 fb073a4bSMasahiro YamadaKBUILD_CFLAGS += -Wno-pointer-sign 860 1da177e4SLinus Torvalds 861 217c3e01SStephen Rothwell# disable stringop warnings in gcc 8+ 862 217c3e01SStephen RothwellKBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation) 863 217c3e01SStephen Rothwell 864 fe8d0a41SKirill Smelkov# disable invalid "can't wrap" optimizations for signed / pointers 865 a137802eSLinus TorvaldsKBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow) 866 d0115552SLinus Torvalds 867 87e0d4f0SDaniel Borkmann# clang sets -fmerge-all-constants by default as optimization, but this 868 87e0d4f0SDaniel Borkmann# is non-conforming behavior for C and in fact breaks the kernel, so we 869 87e0d4f0SDaniel Borkmann# need to disable it here generally. 870 87e0d4f0SDaniel BorkmannKBUILD_CFLAGS += $(call cc-option,-fno-merge-all-constants) 871 87e0d4f0SDaniel Borkmann 872 87e0d4f0SDaniel Borkmann# for gcc -fno-merge-all-constants disables everything, but it is fine 873 87e0d4f0SDaniel Borkmann# to have actual conforming behavior enabled. 874 87e0d4f0SDaniel BorkmannKBUILD_CFLAGS += $(call cc-option,-fmerge-constants) 875 87e0d4f0SDaniel Borkmann 876 3ce120b1SLinus Torvalds# Make sure -fstack-check isn't enabled (like gentoo apparently did) 877 3ce120b1SLinus TorvaldsKBUILD_CFLAGS += $(call cc-option,-fno-stack-check,) 878 3ce120b1SLinus Torvalds 879 8f7f5c9fSAndi Kleen# conserve stack if available 880 8f7f5c9fSAndi KleenKBUILD_CFLAGS += $(call cc-option,-fconserve-stack) 881 8f7f5c9fSAndi Kleen 882 fe7c36c7SJosh Triplett# Prohibit date/time macros, which would make the build non-deterministic 883 fe7c36c7SJosh TriplettKBUILD_CFLAGS += $(call cc-option,-Werror=date-time) 884 fe7c36c7SJosh Triplett 885 ea8daa7bSDaniel Wagner# enforce correct pointer usage 886 ea8daa7bSDaniel WagnerKBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types) 887 ea8daa7bSDaniel Wagner 888 c834f0e8SKees Cook# Require designated initializers for all marked structures 889 c834f0e8SKees CookKBUILD_CFLAGS += $(call cc-option,-Werror=designated-init) 890 c834f0e8SKees Cook 891 a73619a8SMasahiro Yamada# change __FILE__ to the relative path from the srctree 892 a73619a8SMasahiro YamadaKBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=) 893 a73619a8SMasahiro Yamada 894 29be86d7SSeth Forshee# ensure -fcf-protection is disabled when using retpoline as it is 895 29be86d7SSeth Forshee# incompatible with -mindirect-branch=thunk-extern 896 29be86d7SSeth Forsheeifdef CONFIG_RETPOLINE 897 29be86d7SSeth ForsheeKBUILD_CFLAGS += $(call cc-option,-fcf-protection=none) 898 29be86d7SSeth Forsheeendif 899 29be86d7SSeth Forshee 900 a436bb7bSMasahiro Yamadainclude scripts/Makefile.kasan 901 a436bb7bSMasahiro Yamadainclude scripts/Makefile.extrawarn 902 c6d30853SAndrey Ryabinininclude scripts/Makefile.ubsan 903 a86fe353SMasahiro Yamada 904 8cc7af75SMasahiro Yamada# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments 905 8cc7af75SMasahiro YamadaKBUILD_CPPFLAGS += $(KCPPFLAGS) 906 8cc7af75SMasahiro YamadaKBUILD_AFLAGS += $(KAFLAGS) 907 8cc7af75SMasahiro YamadaKBUILD_CFLAGS += $(KCFLAGS) 908 52bcc330SSam Ravnborg 909 89ff7131SMasahiro YamadaKBUILD_LDFLAGS_MODULE += --build-id 910 89ff7131SMasahiro YamadaLDFLAGS_vmlinux += --build-id 911 18991197SRoland McGrath 912 5d7d18f5SDavid Howellsifeq ($(CONFIG_STRIP_ASM_SYMS),y) 913 d79a2719SAndi KleenLDFLAGS_vmlinux += $(call ld-option, -X,) 914 5d7d18f5SDavid Howellsendif 915 5d7d18f5SDavid Howells 916 5cf896fbSPeter Collingbourneifeq ($(CONFIG_RELR),y) 917 5cf896fbSPeter CollingbourneLDFLAGS_vmlinux += --pack-dyn-relocs=relr 918 5cf896fbSPeter Collingbourneendif 919 5cf896fbSPeter Collingbourne 920 80591e61SLuc Van Oostenryck# make the checker run with the right architecture 921 80591e61SLuc Van OostenryckCHECKFLAGS += --arch=$(ARCH) 922 80591e61SLuc Van Oostenryck 923 14516765SLuc Van Oostenryck# insure the checker run with the right endianness 924 14516765SLuc Van OostenryckCHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian) 925 14516765SLuc Van Oostenryck 926 1f2f01b1SLuc Van Oostenryck# the checker needs the correct machine size 927 1f2f01b1SLuc Van OostenryckCHECKFLAGS += $(if $(CONFIG_64BIT),-m64,-m32) 928 1f2f01b1SLuc Van Oostenryck 929 1da177e4SLinus Torvalds# Default kernel image to build when no specific target is given. 930 1da177e4SLinus Torvalds# KBUILD_IMAGE may be overruled on the command line or 931 1da177e4SLinus Torvalds# set in the environment 932 1da177e4SLinus Torvalds# Also any assignments in arch/$(ARCH)/Makefile take precedence over 933 1da177e4SLinus Torvalds# this default value 934 1da177e4SLinus Torvaldsexport KBUILD_IMAGE ?= vmlinux 935 1da177e4SLinus Torvalds 936 1da177e4SLinus Torvalds# 937 1da177e4SLinus Torvalds# INSTALL_PATH specifies where to place the updated kernel and system map 938 1da177e4SLinus Torvalds# images. Default is /boot, but you can set it to other values 939 1da177e4SLinus Torvaldsexport INSTALL_PATH ?= /boot 940 1da177e4SLinus Torvalds 941 1da177e4SLinus Torvalds# 942 f4d4ffc0SJason Cooper# INSTALL_DTBS_PATH specifies a prefix for relocations required by build roots. 943 f4d4ffc0SJason Cooper# Like INSTALL_MOD_PATH, it isn't defined in the Makefile, but can be passed as 944 f4d4ffc0SJason Cooper# an argument if needed. Otherwise it defaults to the kernel install path 945 f4d4ffc0SJason Cooper# 946 f4d4ffc0SJason Cooperexport INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE) 947 f4d4ffc0SJason Cooper 948 f4d4ffc0SJason Cooper# 949 1da177e4SLinus Torvalds# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory 950 1da177e4SLinus Torvalds# relocations required by build roots. This is not defined in the 951 070b98bfSSam Ravnborg# makefile but the argument can be passed to make if needed. 952 1da177e4SLinus Torvalds# 953 1da177e4SLinus Torvalds 954 df9df036SSam RavnborgMODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) 955 1da177e4SLinus Torvaldsexport MODLIB 956 1da177e4SLinus Torvalds 957 ac031f26STheodore Ts'o# 958 2ea03891SSam Ravnborg# INSTALL_MOD_STRIP, if defined, will cause modules to be 959 2ea03891SSam Ravnborg# stripped after they are installed. If INSTALL_MOD_STRIP is '1', then 960 2ea03891SSam Ravnborg# the default option --strip-debug will be used. Otherwise, 961 177b241dSGilles Espinasse# INSTALL_MOD_STRIP value will be used as the options to the strip command. 962 2ea03891SSam Ravnborg 963 ac031f26STheodore Ts'oifdef INSTALL_MOD_STRIP 964 ac031f26STheodore Ts'oifeq ($(INSTALL_MOD_STRIP),1) 965 2ea03891SSam Ravnborgmod_strip_cmd = $(STRIP) --strip-debug 966 ac031f26STheodore Ts'oelse 967 2ea03891SSam Ravnborgmod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP) 968 ac031f26STheodore Ts'oendif # INSTALL_MOD_STRIP=1 969 ac031f26STheodore Ts'oelse 970 2ea03891SSam Ravnborgmod_strip_cmd = true 971 ac031f26STheodore Ts'oendif # INSTALL_MOD_STRIP 972 ac031f26STheodore Ts'oexport mod_strip_cmd 973 ac031f26STheodore Ts'o 974 beb50df3SBertrand Jacquin# CONFIG_MODULE_COMPRESS, if defined, will cause module to be compressed 975 beb50df3SBertrand Jacquin# after they are installed in agreement with CONFIG_MODULE_COMPRESS_GZIP 976 beb50df3SBertrand Jacquin# or CONFIG_MODULE_COMPRESS_XZ. 977 beb50df3SBertrand Jacquin 978 beb50df3SBertrand Jacquinmod_compress_cmd = true 979 beb50df3SBertrand Jacquinifdef CONFIG_MODULE_COMPRESS 980 beb50df3SBertrand Jacquin ifdef CONFIG_MODULE_COMPRESS_GZIP 981 3d1450d5SJason A. Donenfeld mod_compress_cmd = gzip -n -f 982 beb50df3SBertrand Jacquin endif # CONFIG_MODULE_COMPRESS_GZIP 983 beb50df3SBertrand Jacquin ifdef CONFIG_MODULE_COMPRESS_XZ 984 3d1450d5SJason A. Donenfeld mod_compress_cmd = xz -f 985 beb50df3SBertrand Jacquin endif # CONFIG_MODULE_COMPRESS_XZ 986 beb50df3SBertrand Jacquinendif # CONFIG_MODULE_COMPRESS 987 beb50df3SBertrand Jacquinexport mod_compress_cmd 988 beb50df3SBertrand Jacquin 989 d9d8d7edSMichal Marekifdef CONFIG_MODULE_SIG_ALL 990 3ee550f1SDavid Woodhouse$(eval $(call config_filename,MODULE_SIG_KEY)) 991 3ee550f1SDavid Woodhouse 992 3ee550f1SDavid Woodhousemod_sign_cmd = scripts/sign-file $(CONFIG_MODULE_SIG_HASH) $(MODULE_SIG_KEY_SRCPREFIX)$(CONFIG_MODULE_SIG_KEY) certs/signing_key.x509 993 e2a666d5SRusty Russellelse 994 e2a666d5SRusty Russellmod_sign_cmd = true 995 e2a666d5SRusty Russellendif 996 e2a666d5SRusty Russellexport mod_sign_cmd 997 e2a666d5SRusty Russell 998 056d28d1SRolf Eike BeerHOST_LIBELF_LIBS = $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf) 999 056d28d1SRolf Eike Beer 1000 9f0c18aeSJosh Poimboeufifdef CONFIG_STACK_VALIDATION 1001 9f0c18aeSJosh Poimboeuf has_libelf := $(call try-run,\ 1002 056d28d1SRolf Eike Beer echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0) 1003 9f0c18aeSJosh Poimboeuf ifeq ($(has_libelf),1) 1004 9f0c18aeSJosh Poimboeuf objtool_target := tools/objtool FORCE 1005 9f0c18aeSJosh Poimboeuf else 1006 9f0c18aeSJosh Poimboeuf SKIP_STACK_VALIDATION := 1 1007 9f0c18aeSJosh Poimboeuf export SKIP_STACK_VALIDATION 1008 9f0c18aeSJosh Poimboeuf endif 1009 9f0c18aeSJosh Poimboeufendif 1010 9f0c18aeSJosh Poimboeuf 1011 e00d8880SMasahiro YamadaPHONY += prepare0 1012 e2a666d5SRusty Russell 1013 394053f4SMasahiro Yamadaexport MODORDER := $(extmod-prefix)modules.order 1014 bc35d4bdSMasahiro Yamadaexport MODULES_NSDEPS := $(extmod-prefix)modules.nsdeps 1015 47801c97SMasahiro Yamada 1016 1da177e4SLinus Torvaldsifeq ($(KBUILD_EXTMOD),) 1017 cfc411e7SDavid Howellscore-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/ 1018 1da177e4SLinus Torvalds 1019 1da177e4SLinus Torvaldsvmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \ 1020 1da177e4SLinus Torvalds $(core-y) $(core-m) $(drivers-y) $(drivers-m) \ 1021 37d9fe47SFeng Wu $(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y))) 1022 1da177e4SLinus Torvalds 1023 1eaca4b9SMasahiro Yamadavmlinux-alldirs := $(sort $(vmlinux-dirs) Documentation \ 1024 1eaca4b9SMasahiro Yamada $(patsubst %/,%,$(filter %/, $(init-) $(core-) \ 1025 1eaca4b9SMasahiro Yamada $(drivers-) $(net-) $(libs-) $(virt-)))) 1026 1da177e4SLinus Torvalds 1027 c99f3918SMasahiro Yamadabuild-dirs := $(vmlinux-dirs) 1028 76cd306dSMasahiro Yamadaclean-dirs := $(vmlinux-alldirs) 1029 c99f3918SMasahiro Yamada 1030 f49821eeSNicholas Piggininit-y := $(patsubst %/, %/built-in.a, $(init-y)) 1031 f49821eeSNicholas Piggincore-y := $(patsubst %/, %/built-in.a, $(core-y)) 1032 f49821eeSNicholas Piggindrivers-y := $(patsubst %/, %/built-in.a, $(drivers-y)) 1033 f49821eeSNicholas Pigginnet-y := $(patsubst %/, %/built-in.a, $(net-y)) 1034 1da177e4SLinus Torvaldslibs-y1 := $(patsubst %/, %/lib.a, $(libs-y)) 1035 f49821eeSNicholas Pigginlibs-y2 := $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y))) 1036 f49821eeSNicholas Pigginvirt-y := $(patsubst %/, %/built-in.a, $(virt-y)) 1037 1da177e4SLinus Torvalds 1038 1f2bfbd0SSam Ravnborg# Externally visible symbols (used by link-vmlinux.sh) 1039 d151e971SMasahiro Yamadaexport KBUILD_VMLINUX_OBJS := $(head-y) $(init-y) $(core-y) $(libs-y2) \ 1040 d151e971SMasahiro Yamada $(drivers-y) $(net-y) $(virt-y) 1041 3a166fc2SNicholas Pigginexport KBUILD_VMLINUX_LIBS := $(libs-y1) 1042 95698570SSam Ravnborgexport KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds 1043 1f2bfbd0SSam Ravnborgexport LDFLAGS_vmlinux 1044 85f0ae7eSMasahiro Yamada# used by scripts/Makefile.package 1045 233c741dSMasahiro Yamadaexport KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools) 1046 1da177e4SLinus Torvalds 1047 d151e971SMasahiro Yamadavmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS) 1048 1da177e4SLinus Torvalds 1049 3fdc7d3fSMasahiro Yamada# Recurse until adjust_autoksyms.sh is satisfied 1050 3fdc7d3fSMasahiro YamadaPHONY += autoksyms_recursive 1051 2441e78bSNicolas Pitreifdef CONFIG_TRIM_UNUSED_KSYMS 1052 c99f3918SMasahiro Yamadaautoksyms_recursive: descend modules.order 1053 ba79d401SNicolas Ferre $(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \ 1054 86556392SNicolas Pitre "$(MAKE) -f $(srctree)/Makefile vmlinux" 1055 2441e78bSNicolas Pitreendif 1056 23121ca2SNicolas Pitre 1057 1f50b80aSMasahiro Yamada# For the kernel to actually contain only the needed exported symbols, 1058 1f50b80aSMasahiro Yamada# we have to build modules as well to determine what those symbols are. 1059 1f50b80aSMasahiro Yamada# (this can be evaluated only once include/config/auto.conf has been included) 1060 1f50b80aSMasahiro Yamadaifdef CONFIG_TRIM_UNUSED_KSYMS 1061 1f50b80aSMasahiro Yamada KBUILD_MODULES := 1 1062 1f50b80aSMasahiro Yamadaendif 1063 1f50b80aSMasahiro Yamada 1064 07a422bbSMasahiro Yamadaautoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h) 1065 07a422bbSMasahiro Yamada 1066 07a422bbSMasahiro Yamada$(autoksyms_h): 1067 07a422bbSMasahiro Yamada $(Q)mkdir -p $(dir $@) 1068 07a422bbSMasahiro Yamada $(Q)touch $@ 1069 23121ca2SNicolas Pitre 1070 fbe6e37dSNicholas PigginARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) 1071 fbe6e37dSNicholas Piggin 1072 fbe6e37dSNicholas Piggin# Final link of vmlinux with optional arch pass after final link 1073 fbe6e37dSNicholas Piggincmd_link-vmlinux = \ 1074 d503ac53SMasahiro Yamada $(CONFIG_SHELL) $< $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_vmlinux) ; \ 1075 fbe6e37dSNicholas Piggin $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) 1076 2441e78bSNicolas Pitre 1077 3fdc7d3fSMasahiro Yamadavmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE 1078 1f2bfbd0SSam Ravnborg +$(call if_changed,link-vmlinux) 1079 741f98feSSam Ravnborg 1080 392885eeSMasahiro Yamadatargets := vmlinux 1081 392885eeSMasahiro Yamada 1082 1da177e4SLinus Torvalds# The actual objects are generated when descending, 1083 1da177e4SLinus Torvalds# make sure no implicit rule kicks in 1084 c99f3918SMasahiro Yamada$(sort $(vmlinux-deps)): descend ; 1085 1da177e4SLinus Torvalds 1086 ba97df45SMasahiro Yamadafilechk_kernel.release = \ 1087 0d0e7718SMichal Marek echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))" 1088 0d0e7718SMichal Marek 1089 83a35e36SGeert Uytterhoeven# Store (new) KERNELRELEASE string in include/config/kernel.release 1090 24512795SMasahiro Yamadainclude/config/kernel.release: FORCE 1091 0d0e7718SMichal Marek $(call filechk,kernel.release) 1092 cb58455cSSam Ravnborg 1093 d8821622SMasahiro Yamada# Additional helpers built in scripts/ 1094 d8821622SMasahiro Yamada# Carefully list dependencies so we do not try to build scripts twice 1095 d8821622SMasahiro Yamada# in parallel 1096 d8821622SMasahiro YamadaPHONY += scripts 1097 60df1aeeSMasahiro Yamadascripts: scripts_basic scripts_dtc 1098 d8821622SMasahiro Yamada $(Q)$(MAKE) $(build)=$(@) 1099 cb58455cSSam Ravnborg 1100 1da177e4SLinus Torvalds# Things we need to do before we recursively start building the kernel 1101 5bb78269SSam Ravnborg# or the modules are listed in "prepare". 1102 5bb78269SSam Ravnborg# A multi level approach is used. prepareN is processed before prepareN-1. 1103 5bb78269SSam Ravnborg# archprepare is used in arch Makefiles and when processed asm symlink, 1104 5bb78269SSam Ravnborg# version.h and scripts_basic is processed / created. 1105 1da177e4SLinus Torvalds 1106 a5139fb3SMasahiro YamadaPHONY += prepare archprepare 1107 5bb78269SSam Ravnborg 1108 36de077bSMasahiro Yamadaarchprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \ 1109 30527cefSMasahiro Yamada asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h 1110 5bb78269SSam Ravnborg 1111 65bba042SMasahiro Yamadaprepare0: archprepare 1112 60df1aeeSMasahiro Yamada $(Q)$(MAKE) $(build)=scripts/mod 1113 8d36a623SSam Ravnborg $(Q)$(MAKE) $(build)=. 1114 86feeaa8SSam Ravnborg 1115 1da177e4SLinus Torvalds# All the preparing.. 1116 b9ab5ebbSJosh Poimboeufprepare: prepare0 prepare-objtool 1117 b9ab5ebbSJosh Poimboeuf 1118 2c1f4f12SMasahiro Yamada# Support for using generic headers in asm-generic 1119 7d0e5c20SMasahiro Yamadaasm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj 1120 7d0e5c20SMasahiro Yamada 1121 2c1f4f12SMasahiro YamadaPHONY += asm-generic uapi-asm-generic 1122 2c1f4f12SMasahiro Yamadaasm-generic: uapi-asm-generic 1123 037fc336SMasahiro Yamada $(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm \ 1124 037fc336SMasahiro Yamada generic=include/asm-generic 1125 2c1f4f12SMasahiro Yamadauapi-asm-generic: 1126 037fc336SMasahiro Yamada $(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \ 1127 037fc336SMasahiro Yamada generic=include/uapi/asm-generic 1128 2c1f4f12SMasahiro Yamada 1129 b9ab5ebbSJosh PoimboeufPHONY += prepare-objtool 1130 3b27a0c8SJosh Poimboeufprepare-objtool: $(objtool_target) 1131 ef7cfd00SMasahiro Yamadaifeq ($(SKIP_STACK_VALIDATION),1) 1132 ef7cfd00SMasahiro Yamadaifdef CONFIG_UNWINDER_ORC 1133 ef7cfd00SMasahiro Yamada @echo "error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2 1134 ef7cfd00SMasahiro Yamada @false 1135 ef7cfd00SMasahiro Yamadaelse 1136 ef7cfd00SMasahiro Yamada @echo "warning: Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2 1137 ef7cfd00SMasahiro Yamadaendif 1138 ef7cfd00SMasahiro Yamadaendif 1139 1da177e4SLinus Torvalds 1140 1da177e4SLinus Torvalds# Generate some files 1141 1da177e4SLinus Torvalds# --------------------------------------------------------------------------- 1142 1da177e4SLinus Torvalds 1143 1da177e4SLinus Torvalds# KERNELRELEASE can change from a few different places, meaning version.h 1144 1da177e4SLinus Torvalds# needs to be updated, so this check is forced on all builds 1145 1da177e4SLinus Torvalds 1146 1da177e4SLinus Torvaldsuts_len := 64 1147 63104eecSSam Ravnborgdefine filechk_utsrelease.h 1148 1da177e4SLinus Torvalds if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \ 1149 1da177e4SLinus Torvalds echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \ 1150 1da177e4SLinus Torvalds exit 1; \ 1151 1da177e4SLinus Torvalds fi; \ 1152 ad774086SMasahiro Yamada echo \#define UTS_RELEASE \"$(KERNELRELEASE)\" 1153 1da177e4SLinus Torvaldsendef 1154 1da177e4SLinus Torvalds 1155 63104eecSSam Ravnborgdefine filechk_version.h 1156 ad774086SMasahiro Yamada echo \#define LINUX_VERSION_CODE $(shell \ 1157 78d3bb44SMichal Marek expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \ 1158 ad774086SMasahiro Yamada echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' 1159 63104eecSSam Ravnborgendef 1160 63104eecSSam Ravnborg 1161 43fee2b2SMasahiro Yamada$(version_h): FORCE 1162 1da177e4SLinus Torvalds $(call filechk,version.h) 1163 223c24a7SMichal Marek $(Q)rm -f $(old_version_h) 1164 1da177e4SLinus Torvalds 1165 273b281fSSam Ravnborginclude/generated/utsrelease.h: include/config/kernel.release FORCE 1166 63104eecSSam Ravnborg $(call filechk,utsrelease.h) 1167 63104eecSSam Ravnborg 1168 179efcb4SVegard NossumPHONY += headerdep 1169 179efcb4SVegard Nossumheaderdep: 1170 9663d989SPeter Foley $(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \ 1171 9663d989SPeter Foley $(srctree)/scripts/headerdep.pl -I$(srctree)/include 1172 179efcb4SVegard Nossum 1173 1da177e4SLinus Torvalds# --------------------------------------------------------------------------- 1174 8d730cfbSDavid Woodhouse# Kernel headers 1175 8d730cfbSDavid Woodhouse 1176 e6883b18SSam Ravnborg#Default location for installed headers 1177 e6883b18SSam Ravnborgexport INSTALL_HDR_PATH = $(objtree)/usr 1178 e6883b18SSam Ravnborg 1179 59b2bd05SMasahiro Yamadaquiet_cmd_headers_install = INSTALL $(INSTALL_HDR_PATH)/include 1180 59b2bd05SMasahiro Yamada cmd_headers_install = \ 1181 59b2bd05SMasahiro Yamada mkdir -p $(INSTALL_HDR_PATH); \ 1182 59b2bd05SMasahiro Yamada rsync -mrl --include='*/' --include='*\.h' --exclude='*' \ 1183 59b2bd05SMasahiro Yamada usr/include $(INSTALL_HDR_PATH) 1184 6d716275SDavid Woodhouse 1185 8d730cfbSDavid WoodhousePHONY += headers_install 1186 59b2bd05SMasahiro Yamadaheaders_install: headers 1187 59b2bd05SMasahiro Yamada $(call cmd,headers_install) 1188 4f193362SPaul Smith 1189 1da177e4SLinus TorvaldsPHONY += archheaders archscripts 1190 1da177e4SLinus Torvalds 1191 a5bae54cSMasahiro Yamadahdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj 1192 1da177e4SLinus Torvalds 1193 59b2bd05SMasahiro YamadaPHONY += headers 1194 59b2bd05SMasahiro Yamadaheaders: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts 1195 9d022c54SMasahiro Yamada $(if $(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/Kbuild),, \ 1196 2fb9b1bdSSam Ravnborg $(error Headers not exportable for the $(SRCARCH) architecture)) 1197 d5470d14SMasahiro Yamada $(Q)$(MAKE) $(hdr-inst)=include/uapi 1198 d5470d14SMasahiro Yamada $(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi 1199 1f85712eSMike Frysinger 1200 7ecaf069SMasahiro Yamada# Deprecated. It is no-op now. 1201 68475359SDavid WoodhousePHONY += headers_check 1202 7ecaf069SMasahiro Yamadaheaders_check: 1203 7ecaf069SMasahiro Yamada @: 1204 68475359SDavid Woodhouse 1205 e949f4c2SMasahiro Yamadaifdef CONFIG_HEADERS_INSTALL 1206 59b2bd05SMasahiro Yamadaprepare: headers 1207 e949f4c2SMasahiro Yamadaendif 1208 1da177e4SLinus Torvalds 1209 bdd7714bSMasahiro YamadaPHONY += scripts_unifdef 1210 bdd7714bSMasahiro Yamadascripts_unifdef: scripts_basic 1211 bdd7714bSMasahiro Yamada $(Q)$(MAKE) $(build)=scripts scripts/unifdef 1212 bdd7714bSMasahiro Yamada 1213 1da177e4SLinus Torvalds# --------------------------------------------------------------------------- 1214 5a5da78bSShuah Khan# Kernel selftest 1215 5a5da78bSShuah Khan 1216 5a5da78bSShuah KhanPHONY += kselftest 1217 5a5da78bSShuah Khankselftest: 1218 2bc84526SShuah Khan $(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests 1219 5a5da78bSShuah Khan 1220 17eac6c2SShuah Khankselftest-%: FORCE 1221 17eac6c2SShuah Khan $(Q)$(MAKE) -C $(srctree)/tools/testing/selftests $* 1222 dcb825a9SWang Long 1223 3d6dee7aSBamvor Jian ZhangPHONY += kselftest-merge 1224 3d6dee7aSBamvor Jian Zhangkselftest-merge: 1225 3d6dee7aSBamvor Jian Zhang $(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!)) 1226 6d3db46cSDan Rue $(Q)find $(srctree)/tools/testing/selftests -name config | \ 1227 6d3db46cSDan Rue xargs $(srctree)/scripts/kconfig/merge_config.sh -m $(objtree)/.config 1228 3e4c6948SMasahiro Yamada $(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig 1229 3d6dee7aSBamvor Jian Zhang 1230 5a5da78bSShuah Khan# --------------------------------------------------------------------------- 1231 37c8a5faSRob Herring# Devicetree files 1232 37c8a5faSRob Herring 1233 37c8a5faSRob Herringifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) 1234 37c8a5faSRob Herringdtstree := arch/$(SRCARCH)/boot/dts 1235 37c8a5faSRob Herringendif 1236 37c8a5faSRob Herring 1237 37c8a5faSRob Herringifneq ($(dtstree),) 1238 37c8a5faSRob Herring 1239 a5139fb3SMasahiro Yamada%.dtb: include/config/kernel.release scripts_dtc 1240 37c8a5faSRob Herring $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ 1241 37c8a5faSRob Herring 1242 4f0e3a57SRob HerringPHONY += dtbs dtbs_install dt_binding_check 1243 a5139fb3SMasahiro Yamadadtbs dtbs_check: include/config/kernel.release scripts_dtc 1244 37c8a5faSRob Herring $(Q)$(MAKE) $(build)=$(dtstree) 1245 37c8a5faSRob Herring 1246 4f0e3a57SRob Herringdtbs_check: export CHECK_DTBS=1 1247 4f0e3a57SRob Herringdtbs_check: dt_binding_check 1248 4f0e3a57SRob Herring 1249 37c8a5faSRob Herringdtbs_install: 1250 37c8a5faSRob Herring $(Q)$(MAKE) $(dtbinst)=$(dtstree) 1251 37c8a5faSRob Herring 1252 37c8a5faSRob Herringifdef CONFIG_OF_EARLY_FLATTREE 1253 37c8a5faSRob Herringall: dtbs 1254 37c8a5faSRob Herringendif 1255 37c8a5faSRob Herring 1256 37c8a5faSRob Herringendif 1257 37c8a5faSRob Herring 1258 37c8a5faSRob HerringPHONY += scripts_dtc 1259 37c8a5faSRob Herringscripts_dtc: scripts_basic 1260 37c8a5faSRob Herring $(Q)$(MAKE) $(build)=scripts/dtc 1261 37c8a5faSRob Herring 1262 4f0e3a57SRob Herringdt_binding_check: scripts_dtc 1263 4f0e3a57SRob Herring $(Q)$(MAKE) $(build)=Documentation/devicetree/bindings 1264 4f0e3a57SRob Herring 1265 37c8a5faSRob Herring# --------------------------------------------------------------------------- 1266 1da177e4SLinus Torvalds# Modules 1267 1da177e4SLinus Torvalds 1268 1da177e4SLinus Torvaldsifdef CONFIG_MODULES 1269 1da177e4SLinus Torvalds 1270 1da177e4SLinus Torvalds# By default, build modules as well 1271 1da177e4SLinus Torvalds 1272 73d1393eSMichal Marekall: modules 1273 1da177e4SLinus Torvalds 1274 1da177e4SLinus Torvalds# Build modules 1275 551559e1STejun Heo# 1276 551559e1STejun Heo# A module can be listed more than once in obj-m resulting in 1277 551559e1STejun Heo# duplicate lines in modules.order files. Those are removed 1278 551559e1STejun Heo# using awk while concatenating to the final file. 1279 1da177e4SLinus Torvalds 1280 4f193362SPaul SmithPHONY += modules 1281 *8b41fc44SMasahiro Yamadamodules: $(if $(KBUILD_BUILTIN),vmlinux) modules.order 1282 b805aa0eSSam Ravnborg $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost 1283 3a48a919SMasahiro Yamada $(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh 1284 1da177e4SLinus Torvalds 1285 c99f3918SMasahiro Yamadamodules.order: descend 1286 c99f3918SMasahiro Yamada $(Q)$(AWK) '!x[$$0]++' $(addsuffix /$@, $(build-dirs)) > $@ 1287 a6c36632SMichal Marek 1288 1da177e4SLinus Torvalds# Target to prepare building external modules 1289 4f193362SPaul SmithPHONY += modules_prepare 1290 059bc9fcSMasahiro Yamadamodules_prepare: prepare 1291 1da177e4SLinus Torvalds 1292 1da177e4SLinus Torvalds# Target to install modules 1293 4f193362SPaul SmithPHONY += modules_install 1294 1da177e4SLinus Torvaldsmodules_install: _modinst_ _modinst_post 1295 1da177e4SLinus Torvalds 1296 4f193362SPaul SmithPHONY += _modinst_ 1297 2da30e70SMichal Marek_modinst_: 1298 1da177e4SLinus Torvalds @rm -rf $(MODLIB)/kernel 1299 1da177e4SLinus Torvalds @rm -f $(MODLIB)/source 1300 1da177e4SLinus Torvalds @mkdir -p $(MODLIB)/kernel 1301 8e9b4667SMasahiro Yamada @ln -s $(abspath $(srctree)) $(MODLIB)/source 1302 1da177e4SLinus Torvalds @if [ ! $(objtree) -ef $(MODLIB)/build ]; then \ 1303 1da177e4SLinus Torvalds rm -f $(MODLIB)/build ; \ 1304 7e1c0477SMichal Marek ln -s $(CURDIR) $(MODLIB)/build ; \ 1305 1da177e4SLinus Torvalds fi 1306 1bd9a468SMasahiro Yamada @sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order 1307 *8b41fc44SMasahiro Yamada @cp -f modules.builtin $(MODLIB)/ 1308 898490c0SAlexey Gladkov @cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/ 1309 b805aa0eSSam Ravnborg $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst 1310 1da177e4SLinus Torvalds 1311 50a8ec31SSam Ravnborg# This depmod is only for convenience to give the initial 1312 1da177e4SLinus Torvalds# boot a modules.dep even before / is mounted read-write. However the 1313 1da177e4SLinus Torvalds# boot script depmod is the master version. 1314 4f193362SPaul SmithPHONY += _modinst_post 1315 6d128e1eSLinus Torvalds_modinst_post: _modinst_ 1316 50a8ec31SSam Ravnborg $(call cmd,depmod) 1317 1da177e4SLinus Torvalds 1318 d890f510SJosh Boyerifeq ($(CONFIG_MODULE_SIG), y) 1319 d890f510SJosh BoyerPHONY += modules_sign 1320 d890f510SJosh Boyermodules_sign: 1321 d890f510SJosh Boyer $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modsign 1322 d890f510SJosh Boyerendif 1323 d890f510SJosh Boyer 1324 1da177e4SLinus Torvaldselse # CONFIG_MODULES 1325 1da177e4SLinus Torvalds 1326 1da177e4SLinus Torvalds# Modules not configured 1327 1da177e4SLinus Torvalds# --------------------------------------------------------------------------- 1328 1da177e4SLinus Torvalds 1329 612e47ceSMasahiro YamadaPHONY += modules modules_install 1330 612e47ceSMasahiro Yamadamodules modules_install: 1331 5369f550SMichal Marek @echo >&2 1332 5369f550SMichal Marek @echo >&2 "The present kernel configuration has modules disabled." 1333 5369f550SMichal Marek @echo >&2 "Type 'make config' and enable loadable module support." 1334 5369f550SMichal Marek @echo >&2 "Then build a kernel with module support enabled." 1335 5369f550SMichal Marek @echo >&2 1336 1da177e4SLinus Torvalds @exit 1 1337 1da177e4SLinus Torvalds 1338 1da177e4SLinus Torvaldsendif # CONFIG_MODULES 1339 1da177e4SLinus Torvalds 1340 1da177e4SLinus Torvalds### 1341 1da177e4SLinus Torvalds# Cleaning is done on three levels. 1342 1da177e4SLinus Torvalds# make clean Delete most generated files 1343 1da177e4SLinus Torvalds# Leave enough to build external modules 1344 1da177e4SLinus Torvalds# make mrproper Delete the current configuration, and all generated files 1345 1da177e4SLinus Torvalds# make distclean Remove editor backup files, patch leftover files and the like 1346 1da177e4SLinus Torvalds 1347 1da177e4SLinus Torvalds# Directories & files removed with 'make clean' 1348 b7dca6ddSMasahiro YamadaCLEAN_DIRS += include/ksym 1349 *8b41fc44SMasahiro YamadaCLEAN_FILES += modules.builtin modules.builtin.modinfo modules.nsdeps 1350 1da177e4SLinus Torvalds 1351 1da177e4SLinus Torvalds# Directories & files removed with 'make mrproper' 1352 d6fc9fcbSMasahiro YamadaMRPROPER_DIRS += include/config include/generated \ 1353 46a63d4bSMasahiro Yamada arch/$(SRCARCH)/include/generated .tmp_objdiff \ 1354 46a63d4bSMasahiro Yamada debian/ snap/ tar-install/ 1355 278ae604SMasahiro YamadaMRPROPER_FILES += .config .config.old .version \ 1356 46457133SMasahiro Yamada Module.symvers \ 1357 fb117949SDavid Woodhouse signing_key.pem signing_key.priv signing_key.x509 \ 1358 fb117949SDavid Woodhouse x509.genkey extra_certificates signing_key.x509.keyid \ 1359 46a63d4bSMasahiro Yamada signing_key.x509.signer vmlinux-gdb.py \ 1360 46a63d4bSMasahiro Yamada *.spec 1361 1da177e4SLinus Torvalds 1362 46457133SMasahiro Yamada# Directories & files removed with 'make distclean' 1363 46457133SMasahiro YamadaDISTCLEAN_DIRS += 1364 46457133SMasahiro YamadaDISTCLEAN_FILES += tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS 1365 46457133SMasahiro Yamada 1366 1da177e4SLinus Torvalds# clean - Delete most, but leave enough to build external modules 1367 1da177e4SLinus Torvalds# 1368 1da177e4SLinus Torvaldsclean: rm-dirs := $(CLEAN_DIRS) 1369 1da177e4SLinus Torvaldsclean: rm-files := $(CLEAN_FILES) 1370 1da177e4SLinus Torvalds 1371 76cd306dSMasahiro YamadaPHONY += archclean vmlinuxclean 1372 1da177e4SLinus Torvalds 1373 bd1ee804SPawel Mollvmlinuxclean: 1374 bd1ee804SPawel Moll $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean 1375 fbe6e37dSNicholas Piggin $(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean) 1376 bd1ee804SPawel Moll 1377 bd1ee804SPawel Mollclean: archclean vmlinuxclean 1378 1da177e4SLinus Torvalds 1379 1da177e4SLinus Torvalds# mrproper - Delete all generated files, including .config 1380 1da177e4SLinus Torvalds# 1381 1da177e4SLinus Torvaldsmrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS)) 1382 1da177e4SLinus Torvaldsmrproper: rm-files := $(wildcard $(MRPROPER_FILES)) 1383 cb43fb57SMauro Carvalho Chehabmrproper-dirs := $(addprefix _mrproper_,scripts) 1384 1da177e4SLinus Torvalds 1385 b421b8a6SMasahiro YamadaPHONY += $(mrproper-dirs) mrproper 1386 1da177e4SLinus Torvalds$(mrproper-dirs): 1387 1da177e4SLinus Torvalds $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@) 1388 1da177e4SLinus Torvalds 1389 b421b8a6SMasahiro Yamadamrproper: clean $(mrproper-dirs) 1390 1da177e4SLinus Torvalds $(call cmd,rmdirs) 1391 1da177e4SLinus Torvalds $(call cmd,rmfiles) 1392 1da177e4SLinus Torvalds 1393 1da177e4SLinus Torvalds# distclean 1394 1da177e4SLinus Torvalds# 1395 46457133SMasahiro Yamadadistclean: rm-dirs := $(wildcard $(DISTCLEAN_DIRS)) 1396 46457133SMasahiro Yamadadistclean: rm-files := $(wildcard $(DISTCLEAN_FILES)) 1397 46457133SMasahiro Yamada 1398 4f193362SPaul SmithPHONY += distclean 1399 1da177e4SLinus Torvalds 1400 1da177e4SLinus Torvaldsdistclean: mrproper 1401 46457133SMasahiro Yamada $(call cmd,rmdirs) 1402 46457133SMasahiro Yamada $(call cmd,rmfiles) 1403 1da177e4SLinus Torvalds @find $(srctree) $(RCS_FIND_IGNORE) \ 1404 1da177e4SLinus Torvalds \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ 1405 f78271dfSMasahiro Yamada -o -name '*.bak' -o -name '#*#' -o -name '*%' \ 1406 f78271dfSMasahiro Yamada -o -name 'core' \) \ 1407 1da177e4SLinus Torvalds -type f -print | xargs rm -f 1408 1da177e4SLinus Torvalds 1409 1da177e4SLinus Torvalds 1410 1da177e4SLinus Torvalds# Packaging of the kernel to various formats 1411 1da177e4SLinus Torvalds# --------------------------------------------------------------------------- 1412 1da177e4SLinus Torvalds 1413 bafb6747SArnaldo Carvalho de Melo%src-pkg: FORCE 1414 000ec95fSMasahiro Yamada $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@ 1415 031ecc6dSZach Brown%pkg: include/config/kernel.release FORCE 1416 000ec95fSMasahiro Yamada $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@ 1417 1da177e4SLinus Torvalds 1418 1da177e4SLinus Torvalds# Brief documentation of the typical targets used 1419 1da177e4SLinus Torvalds# --------------------------------------------------------------------------- 1420 1da177e4SLinus Torvalds 1421 5dffbe81SSegher Boessenkoolboards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig) 1422 a1e7b7bbSKonstantin Khlebnikovboards := $(sort $(notdir $(boards))) 1423 5dffbe81SSegher Boessenkoolboard-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig)) 1424 5dffbe81SSegher Boessenkoolboard-dirs := $(sort $(notdir $(board-dirs:/=))) 1425 1da177e4SLinus Torvalds 1426 fe69b420SMasahiro YamadaPHONY += help 1427 1da177e4SLinus Torvaldshelp: 1428 1da177e4SLinus Torvalds @echo 'Cleaning targets:' 1429 5ea084efSSamuel Tardieu @echo ' clean - Remove most generated files but keep the config and' 1430 5cc8d246SJesper Juhl @echo ' enough build support to build external modules' 1431 5ea084efSSamuel Tardieu @echo ' mrproper - Remove all generated files + config + various backup files' 1432 5cc8d246SJesper Juhl @echo ' distclean - mrproper + remove editor backup and patch files' 1433 1da177e4SLinus Torvalds @echo '' 1434 1da177e4SLinus Torvalds @echo 'Configuration targets:' 1435 1da177e4SLinus Torvalds @$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help 1436 1da177e4SLinus Torvalds @echo '' 1437 1da177e4SLinus Torvalds @echo 'Other generic targets:' 1438 1da177e4SLinus Torvalds @echo ' all - Build all targets marked with [*]' 1439 1da177e4SLinus Torvalds @echo '* vmlinux - Build the bare kernel' 1440 1da177e4SLinus Torvalds @echo '* modules - Build all modules' 1441 9cc5d74cSBodo Eggert @echo ' modules_install - Install all modules to INSTALL_MOD_PATH (default: /)' 1442 1da177e4SLinus Torvalds @echo ' dir/ - Build all files in dir and below' 1443 40ab87a4SWang YanQing @echo ' dir/file.[ois] - Build specified target only' 1444 433db3e2SVinÃcius Tinti @echo ' dir/file.ll - Build the LLVM assembly file' 1445 433db3e2SVinÃcius Tinti @echo ' (requires compiler support for LLVM assembly generation)' 1446 62718979SJoe Perches @echo ' dir/file.lst - Build specified mixed source/assembly target only' 1447 62718979SJoe Perches @echo ' (requires a recent binutils and recent build (System.map))' 1448 155ad605SSam Ravnborg @echo ' dir/file.ko - Build module including final link' 1449 c4d5ee67SRobert P. J. Day @echo ' modules_prepare - Set up for building external modules' 1450 1da177e4SLinus Torvalds @echo ' tags/TAGS - Generate tags file for editors' 1451 1da177e4SLinus Torvalds @echo ' cscope - Generate cscope index' 1452 f4ed1009SJianbin Kang @echo ' gtags - Generate GNU GLOBAL index' 1453 3f1d9a6cSMichal Marek @echo ' kernelrelease - Output the release version string (use with make -s)' 1454 3f1d9a6cSMichal Marek @echo ' kernelversion - Output the version stored in Makefile (use with make -s)' 1455 3f1d9a6cSMichal Marek @echo ' image_name - Output the image name (use with make -s)' 1456 2fb9b1bdSSam Ravnborg @echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \ 1457 59df3230SGeert Uytterhoeven echo ' (default: $(INSTALL_HDR_PATH))'; \ 1458 2fb9b1bdSSam Ravnborg echo '' 1459 31b8cc80SRandy Dunlap @echo 'Static analysers:' 1460 1da177e4SLinus Torvalds @echo ' checkstack - Generate a list of stack hogs' 1461 1da177e4SLinus Torvalds @echo ' namespacecheck - Name space analysis on compiled kernel' 1462 aa025e7dSSam Ravnborg @echo ' versioncheck - Sanity check on version.h usage' 1463 ec2d987fSRandy Dunlap @echo ' includecheck - Check for duplicate included header files' 1464 295ac051SAdrian Bunk @echo ' export_report - List the usages of all exported symbols' 1465 74425eeeSNicolas Palix @echo ' headerdep - Detect inclusion cycles in headers' 1466 7f855fc8SMasahiro Yamada @echo ' coccicheck - Check with Coccinelle' 1467 74425eeeSNicolas Palix @echo '' 1468 eb8305aeSMatthias Maennich @echo 'Tools:' 1469 eb8305aeSMatthias Maennich @echo ' nsdeps - Generate missing symbol namespace dependencies' 1470 eb8305aeSMatthias Maennich @echo '' 1471 31b8cc80SRandy Dunlap @echo 'Kernel selftest:' 1472 5a5da78bSShuah Khan @echo ' kselftest - Build and run kernel selftest (run as root)' 1473 5a5da78bSShuah Khan @echo ' Build, install, and boot kernel before' 1474 5a5da78bSShuah Khan @echo ' running kselftest on it' 1475 dcb825a9SWang Long @echo ' kselftest-clean - Remove all generated kselftest files' 1476 bbfe63b6SRandy Dunlap @echo ' kselftest-merge - Merge all the config dependencies of kselftest to existing' 1477 3d6dee7aSBamvor Jian Zhang @echo ' .config.' 1478 5a5da78bSShuah Khan @echo '' 1479 37c8a5faSRob Herring @$(if $(dtstree), \ 1480 37c8a5faSRob Herring echo 'Devicetree:'; \ 1481 37c8a5faSRob Herring echo '* dtbs - Build device tree blobs for enabled boards'; \ 1482 37c8a5faSRob Herring echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)'; \ 1483 7aa8dd91SStephen Boyd echo ' dt_binding_check - Validate device tree binding documents'; \ 1484 7aa8dd91SStephen Boyd echo ' dtbs_check - Validate device tree source files';\ 1485 37c8a5faSRob Herring echo '') 1486 37c8a5faSRob Herring 1487 31b8cc80SRandy Dunlap @echo 'Userspace tools targets:' 1488 31b8cc80SRandy Dunlap @echo ' use "make tools/help"' 1489 31b8cc80SRandy Dunlap @echo ' or "cd tools; make help"' 1490 31b8cc80SRandy Dunlap @echo '' 1491 1da177e4SLinus Torvalds @echo 'Kernel packaging:' 1492 000ec95fSMasahiro Yamada @$(MAKE) -f $(srctree)/scripts/Makefile.package help 1493 1da177e4SLinus Torvalds @echo '' 1494 1da177e4SLinus Torvalds @echo 'Documentation targets:' 1495 cb43fb57SMauro Carvalho Chehab @$(MAKE) -f $(srctree)/Documentation/Makefile dochelp 1496 1da177e4SLinus Torvalds @echo '' 1497 01dee188SAndres Salomon @echo 'Architecture specific targets ($(SRCARCH)):' 1498 1da177e4SLinus Torvalds @$(if $(archhelp),$(archhelp),\ 1499 01dee188SAndres Salomon echo ' No architecture specific help defined for $(SRCARCH)') 1500 1da177e4SLinus Torvalds @echo '' 1501 1da177e4SLinus Torvalds @$(if $(boards), \ 1502 1da177e4SLinus Torvalds $(foreach b, $(boards), \ 1503 4234448bSGeert Uytterhoeven printf " %-27s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \ 1504 1da177e4SLinus Torvalds echo '') 1505 5dffbe81SSegher Boessenkool @$(if $(board-dirs), \ 1506 5dffbe81SSegher Boessenkool $(foreach b, $(board-dirs), \ 1507 5dffbe81SSegher Boessenkool printf " %-16s - Show %s-specific targets\\n" help-$(b) $(b);) \ 1508 5dffbe81SSegher Boessenkool printf " %-16s - Show all of the above\\n" help-boards; \ 1509 5dffbe81SSegher Boessenkool echo '') 1510 1da177e4SLinus Torvalds 1511 1da177e4SLinus Torvalds @echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build' 1512 45d506bdSSam Ravnborg @echo ' make V=2 [targets] 2 => give reason for rebuild of target' 1513 1da177e4SLinus Torvalds @echo ' make O=dir [targets] Locate all output files in "dir", including .config' 1514 a64c0440SGeert Uytterhoeven @echo ' make C=1 [targets] Check re-compiled c source with $$CHECK' 1515 a64c0440SGeert Uytterhoeven @echo ' (sparse by default)' 1516 701842e3SDustin Kirkland @echo ' make C=2 [targets] Force check of all c source with $$CHECK' 1517 af07ce3eSIngo Molnar @echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections' 1518 e27128dbSMasahiro Yamada @echo ' make W=n [targets] Enable extra build checks, n=1,2,3 where' 1519 28bc20dcSSam Ravnborg @echo ' 1: warnings which may be relevant and do not occur too often' 1520 28bc20dcSSam Ravnborg @echo ' 2: warnings which occur quite often but may still be relevant' 1521 28bc20dcSSam Ravnborg @echo ' 3: more obscure warnings, can most likely be ignored' 1522 a6de553dSMichal Marek @echo ' Multiple levels can be combined with W=12 or W=123' 1523 1da177e4SLinus Torvalds @echo '' 1524 1da177e4SLinus Torvalds @echo 'Execute "make" or "make all" to build all targets marked with [*] ' 1525 1da177e4SLinus Torvalds @echo 'For further info see the ./README file' 1526 1da177e4SLinus Torvalds 1527 1da177e4SLinus Torvalds 1528 5dffbe81SSegher Boessenkoolhelp-board-dirs := $(addprefix help-,$(board-dirs)) 1529 5dffbe81SSegher Boessenkool 1530 5dffbe81SSegher Boessenkoolhelp-boards: $(help-board-dirs) 1531 5dffbe81SSegher Boessenkool 1532 fbae4d58SMichal Marekboards-per-dir = $(sort $(notdir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/$*/*_defconfig))) 1533 5dffbe81SSegher Boessenkool 1534 5dffbe81SSegher Boessenkool$(help-board-dirs): help-%: 1535 5dffbe81SSegher Boessenkool @echo 'Architecture specific targets ($(SRCARCH) $*):' 1536 5dffbe81SSegher Boessenkool @$(if $(boards-per-dir), \ 1537 5dffbe81SSegher Boessenkool $(foreach b, $(boards-per-dir), \ 1538 5dffbe81SSegher Boessenkool printf " %-24s - Build for %s\\n" $*/$(b) $(subst _defconfig,,$(b));) \ 1539 5dffbe81SSegher Boessenkool echo '') 1540 5dffbe81SSegher Boessenkool 1541 5dffbe81SSegher Boessenkool 1542 1da177e4SLinus Torvalds# Documentation targets 1543 1da177e4SLinus Torvalds# --------------------------------------------------------------------------- 1544 e8939222SJani NikulaDOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \ 1545 e8939222SJani Nikula linkcheckdocs dochelp refcheckdocs 1546 22cba31bSJani NikulaPHONY += $(DOC_TARGETS) 1547 bc7b752aSMasahiro Yamada$(DOC_TARGETS): 1548 cb43fb57SMauro Carvalho Chehab $(Q)$(MAKE) $(build)=Documentation $@ 1549 1da177e4SLinus Torvalds 1550 67274c08SMasahiro Yamada# Misc 1551 67274c08SMasahiro Yamada# --------------------------------------------------------------------------- 1552 67274c08SMasahiro Yamada 1553 67274c08SMasahiro YamadaPHONY += scripts_gdb 1554 7a739ce5SMasahiro Yamadascripts_gdb: prepare0 1555 1e5ff84fSMasahiro Yamada $(Q)$(MAKE) $(build)=scripts/gdb 1556 8d2e5200SMasahiro Yamada $(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py) 1557 67274c08SMasahiro Yamada 1558 67274c08SMasahiro Yamadaifdef CONFIG_GDB_SCRIPTS 1559 67274c08SMasahiro Yamadaall: scripts_gdb 1560 67274c08SMasahiro Yamadaendif 1561 67274c08SMasahiro Yamada 1562 1da177e4SLinus Torvaldselse # KBUILD_EXTMOD 1563 1da177e4SLinus Torvalds 1564 1da177e4SLinus Torvalds### 1565 1da177e4SLinus Torvalds# External module support. 1566 1da177e4SLinus Torvalds# When building external modules the kernel used as basis is considered 1567 1da177e4SLinus Torvalds# read-only, and no consistency checks are made and the make 1568 1da177e4SLinus Torvalds# system is not used on the basis kernel. If updates are required 1569 1da177e4SLinus Torvalds# in the basis kernel ordinary make commands (without M=...) must 1570 1da177e4SLinus Torvalds# be used. 1571 1da177e4SLinus Torvalds# 1572 1da177e4SLinus Torvalds# The following are the only valid targets when building external 1573 1da177e4SLinus Torvalds# modules. 1574 1da177e4SLinus Torvalds# make M=dir clean Delete all automatically generated files 1575 1da177e4SLinus Torvalds# make M=dir modules Make all modules in specified dir 1576 1da177e4SLinus Torvalds# make M=dir Same as 'make M=dir modules' 1577 1da177e4SLinus Torvalds# make M=dir modules_install 1578 070b98bfSSam Ravnborg# Install the modules built in the module directory 1579 1da177e4SLinus Torvalds# Assumes install directory is already created 1580 1da177e4SLinus Torvalds 1581 1da177e4SLinus Torvalds# We are always building modules 1582 1da177e4SLinus TorvaldsKBUILD_MODULES := 1 1583 1da177e4SLinus Torvalds 1584 4f193362SPaul SmithPHONY += $(objtree)/Module.symvers 1585 1da177e4SLinus Torvalds$(objtree)/Module.symvers: 1586 1da177e4SLinus Torvalds @test -e $(objtree)/Module.symvers || ( \ 1587 1da177e4SLinus Torvalds echo; \ 1588 1da177e4SLinus Torvalds echo " WARNING: Symbol version dump $(objtree)/Module.symvers"; \ 1589 1da177e4SLinus Torvalds echo " is missing; modules will have no dependencies and modversions."; \ 1590 1da177e4SLinus Torvalds echo ) 1591 1da177e4SLinus Torvalds 1592 c99f3918SMasahiro Yamadabuild-dirs := $(KBUILD_EXTMOD) 1593 c99f3918SMasahiro YamadaPHONY += modules 1594 c99f3918SMasahiro Yamadamodules: descend $(objtree)/Module.symvers 1595 b805aa0eSSam Ravnborg $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost 1596 1da177e4SLinus Torvalds 1597 4f193362SPaul SmithPHONY += modules_install 1598 a67dc21aSSam Ravnborgmodules_install: _emodinst_ _emodinst_post 1599 a67dc21aSSam Ravnborg 1600 a67dc21aSSam Ravnborginstall-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra) 1601 4f193362SPaul SmithPHONY += _emodinst_ 1602 a67dc21aSSam Ravnborg_emodinst_: 1603 a67dc21aSSam Ravnborg $(Q)mkdir -p $(MODLIB)/$(install-dir) 1604 b805aa0eSSam Ravnborg $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst 1605 1da177e4SLinus Torvalds 1606 4f193362SPaul SmithPHONY += _emodinst_post 1607 a67dc21aSSam Ravnborg_emodinst_post: _emodinst_ 1608 a67dc21aSSam Ravnborg $(call cmd,depmod) 1609 a67dc21aSSam Ravnborg 1610 76cd306dSMasahiro Yamadaclean-dirs := $(KBUILD_EXTMOD) 1611 bc35d4bdSMasahiro Yamadaclean: rm-files := $(KBUILD_EXTMOD)/Module.symvers $(KBUILD_EXTMOD)/modules.nsdeps 1612 1da177e4SLinus Torvalds 1613 d4945049SMasahiro YamadaPHONY += / 1614 d4945049SMasahiro Yamada/: 1615 d4945049SMasahiro Yamada @echo >&2 '"$(MAKE) /" is no longer supported. Please use "$(MAKE) ./" instead.' 1616 d4945049SMasahiro Yamada 1617 fe69b420SMasahiro YamadaPHONY += help 1618 1da177e4SLinus Torvaldshelp: 1619 1da177e4SLinus Torvalds @echo ' Building external modules.' 1620 1da177e4SLinus Torvalds @echo ' Syntax: make -C path/to/kernel/src M=$$PWD target' 1621 1da177e4SLinus Torvalds @echo '' 1622 1da177e4SLinus Torvalds @echo ' modules - default target, build the module(s)' 1623 1da177e4SLinus Torvalds @echo ' modules_install - install the module' 1624 1da177e4SLinus Torvalds @echo ' clean - remove generated files in module directory only' 1625 1da177e4SLinus Torvalds @echo '' 1626 06300b21SSam Ravnborg 1627 059bc9fcSMasahiro YamadaPHONY += prepare 1628 1da177e4SLinus Torvaldsendif # KBUILD_EXTMOD 1629 1da177e4SLinus Torvalds 1630 b1fbfcb4SMasahiro Yamada# Single targets 1631 b1fbfcb4SMasahiro Yamada# --------------------------------------------------------------------------- 1632 b1fbfcb4SMasahiro Yamada# To build individual files in subdirectories, you can do like this: 1633 b1fbfcb4SMasahiro Yamada# 1634 b1fbfcb4SMasahiro Yamada# make foo/bar/baz.s 1635 b1fbfcb4SMasahiro Yamada# 1636 b1fbfcb4SMasahiro Yamada# The supported suffixes for single-target are listed in 'single-targets' 1637 b1fbfcb4SMasahiro Yamada# 1638 b1fbfcb4SMasahiro Yamada# To build only under specific subdirectories, you can do like this: 1639 b1fbfcb4SMasahiro Yamada# 1640 b1fbfcb4SMasahiro Yamada# make foo/bar/baz/ 1641 b1fbfcb4SMasahiro Yamada 1642 b1fbfcb4SMasahiro Yamadaifdef single-build 1643 b1fbfcb4SMasahiro Yamada 1644 b1fbfcb4SMasahiro Yamada# .ko is special because modpost is needed 1645 b1fbfcb4SMasahiro Yamadasingle-ko := $(sort $(filter %.ko, $(MAKECMDGOALS))) 1646 b1fbfcb4SMasahiro Yamadasingle-no-ko := $(sort $(patsubst %.ko,%.mod, $(MAKECMDGOALS))) 1647 b1fbfcb4SMasahiro Yamada 1648 b1fbfcb4SMasahiro Yamada$(single-ko): single_modpost 1649 b1fbfcb4SMasahiro Yamada @: 1650 b1fbfcb4SMasahiro Yamada$(single-no-ko): descend 1651 b1fbfcb4SMasahiro Yamada @: 1652 b1fbfcb4SMasahiro Yamada 1653 b1fbfcb4SMasahiro Yamadaifeq ($(KBUILD_EXTMOD),) 1654 b1fbfcb4SMasahiro Yamada# For the single build of in-tree modules, use a temporary file to avoid 1655 b1fbfcb4SMasahiro Yamada# the situation of modules_install installing an invalid modules.order. 1656 b1fbfcb4SMasahiro YamadaMODORDER := .modules.tmp 1657 b1fbfcb4SMasahiro Yamadaendif 1658 b1fbfcb4SMasahiro Yamada 1659 b1fbfcb4SMasahiro YamadaPHONY += single_modpost 1660 b1fbfcb4SMasahiro Yamadasingle_modpost: $(single-no-ko) 1661 b1fbfcb4SMasahiro Yamada $(Q){ $(foreach m, $(single-ko), echo $(extmod-prefix)$m;) } > $(MODORDER) 1662 b1fbfcb4SMasahiro Yamada $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost 1663 b1fbfcb4SMasahiro Yamada 1664 b1fbfcb4SMasahiro YamadaKBUILD_MODULES := 1 1665 b1fbfcb4SMasahiro Yamada 1666 b1fbfcb4SMasahiro Yamadaexport KBUILD_SINGLE_TARGETS := $(addprefix $(extmod-prefix), $(single-no-ko)) 1667 b1fbfcb4SMasahiro Yamada 1668 b1fbfcb4SMasahiro Yamada# trim unrelated directories 1669 b1fbfcb4SMasahiro Yamadabuild-dirs := $(foreach d, $(build-dirs), \ 1670 b1fbfcb4SMasahiro Yamada $(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d))) 1671 b1fbfcb4SMasahiro Yamada 1672 b1fbfcb4SMasahiro Yamadaendif 1673 b1fbfcb4SMasahiro Yamada 1674 c99f3918SMasahiro Yamada# Handle descending into subdirectories listed in $(build-dirs) 1675 c99f3918SMasahiro Yamada# Preset locale variables to speed up the build process. Limit locale 1676 c99f3918SMasahiro Yamada# tweaks to this spot to avoid wrong language settings when running 1677 c99f3918SMasahiro Yamada# make menuconfig etc. 1678 c99f3918SMasahiro Yamada# Error messages still appears in the original language 1679 c99f3918SMasahiro YamadaPHONY += descend $(build-dirs) 1680 c99f3918SMasahiro Yamadadescend: $(build-dirs) 1681 c99f3918SMasahiro Yamada$(build-dirs): prepare 1682 b1fbfcb4SMasahiro Yamada $(Q)$(MAKE) $(build)=$@ \ 1683 b1fbfcb4SMasahiro Yamada single-build=$(if $(filter-out $@/, $(single-no-ko)),1) \ 1684 b1fbfcb4SMasahiro Yamada need-builtin=1 need-modorder=1 1685 c99f3918SMasahiro Yamada 1686 76cd306dSMasahiro Yamadaclean-dirs := $(addprefix _clean_, $(clean-dirs)) 1687 76cd306dSMasahiro YamadaPHONY += $(clean-dirs) clean 1688 76cd306dSMasahiro Yamada$(clean-dirs): 1689 76cd306dSMasahiro Yamada $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@) 1690 76cd306dSMasahiro Yamada 1691 88d7be03SMichal Marekclean: $(clean-dirs) 1692 88d7be03SMichal Marek $(call cmd,rmdirs) 1693 88d7be03SMichal Marek $(call cmd,rmfiles) 1694 43f67c98SKevin Cernekee @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ 1695 ef46d9b3SMasahiro Yamada \( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \ 1696 4f0e3a57SRob Herring -o -name '*.ko.*' \ 1697 4f0e3a57SRob Herring -o -name '*.dtb' -o -name '*.dtb.S' -o -name '*.dt.yaml' \ 1698 ef46d9b3SMasahiro Yamada -o -name '*.dwo' -o -name '*.lst' \ 1699 bbc55bdeSMasahiro Yamada -o -name '*.su' -o -name '*.mod' \ 1700 88d7be03SMichal Marek -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ 1701 9a8dfb39SMasahiro Yamada -o -name '*.lex.c' -o -name '*.tab.[ch]' \ 1702 4fa8bc94SMasahiro Yamada -o -name '*.asn1.[ch]' \ 1703 88d7be03SMichal Marek -o -name '*.symtypes' -o -name 'modules.order' \ 1704 *8b41fc44SMasahiro Yamada -o -name '.tmp_*.o.*' \ 1705 6b90bd4bSEmese Revfy -o -name '*.c.[012]*.*' \ 1706 433db3e2SVinÃcius Tinti -o -name '*.ll' \ 1707 88d7be03SMichal Marek -o -name '*.gcno' \) -type f -print | xargs rm -f 1708 88d7be03SMichal Marek 1709 1da177e4SLinus Torvalds# Generate tags for editors 1710 1da177e4SLinus Torvalds# --------------------------------------------------------------------------- 1711 a680eedcSSam Ravnborgquiet_cmd_tags = GEN $@ 1712 858805b3SMasahiro Yamada cmd_tags = $(BASH) $(srctree)/scripts/tags.sh $@ 1713 1da177e4SLinus Torvalds 1714 f4ed1009SJianbin Kangtags TAGS cscope gtags: FORCE 1715 1da177e4SLinus Torvalds $(call cmd,tags) 1716 1da177e4SLinus Torvalds 1717 eb8305aeSMatthias Maennich# Script to generate missing namespace dependencies 1718 eb8305aeSMatthias Maennich# --------------------------------------------------------------------------- 1719 eb8305aeSMatthias Maennich 1720 eb8305aeSMatthias MaennichPHONY += nsdeps 1721 bff9c62bSMasahiro Yamadansdeps: export KBUILD_NSDEPS=1 1722 eb8305aeSMatthias Maennichnsdeps: modules 1723 bff9c62bSMasahiro Yamada $(Q)$(CONFIG_SHELL) $(srctree)/scripts/nsdeps 1724 eb8305aeSMatthias Maennich 1725 1da177e4SLinus Torvalds# Scripts to check various things for consistency 1726 1da177e4SLinus Torvalds# --------------------------------------------------------------------------- 1727 1da177e4SLinus Torvalds 1728 279f3dd3SPeter FoleyPHONY += includecheck versioncheck coccicheck namespacecheck export_report 1729 279f3dd3SPeter Foley 1730 1da177e4SLinus Torvaldsincludecheck: 1731 436f876cSPeter Foley find $(srctree)/* $(RCS_FIND_IGNORE) \ 1732 1da177e4SLinus Torvalds -name '*.[hcS]' -type f -print | sort \ 1733 80007434SGeert Uytterhoeven | xargs $(PERL) -w $(srctree)/scripts/checkincludes.pl 1734 1da177e4SLinus Torvalds 1735 1da177e4SLinus Torvaldsversioncheck: 1736 2ee2d292SPeter Foley find $(srctree)/* $(RCS_FIND_IGNORE) \ 1737 1da177e4SLinus Torvalds -name '*.[hcS]' -type f -print | sort \ 1738 80007434SGeert Uytterhoeven | xargs $(PERL) -w $(srctree)/scripts/checkversion.pl 1739 1da177e4SLinus Torvalds 1740 74425eeeSNicolas Palixcoccicheck: 1741 858805b3SMasahiro Yamada $(Q)$(BASH) $(srctree)/scripts/$@ 1742 74425eeeSNicolas Palix 1743 1da177e4SLinus Torvaldsnamespacecheck: 1744 1da177e4SLinus Torvalds $(PERL) $(srctree)/scripts/namespace.pl 1745 1da177e4SLinus Torvalds 1746 295ac051SAdrian Bunkexport_report: 1747 295ac051SAdrian Bunk $(PERL) $(srctree)/scripts/export_report.pl 1748 295ac051SAdrian Bunk 1749 c398ff00SMike MarciniszynPHONY += checkstack kernelrelease kernelversion image_name 1750 e3ccf6e3SJeff Dike 1751 011e3a9aSJeff Dike# UML needs a little special treatment here. It wants to use the host 1752 011e3a9aSJeff Dike# toolchain, so needs $(SUBARCH) passed to checkstack.pl. Everyone 1753 011e3a9aSJeff Dike# else wants $(ARCH), including people doing cross-builds, which means 1754 011e3a9aSJeff Dike# that $(SUBARCH) doesn't work here. 1755 011e3a9aSJeff Dikeifeq ($(ARCH), um) 1756 011e3a9aSJeff DikeCHECKSTACK_ARCH := $(SUBARCH) 1757 011e3a9aSJeff Dikeelse 1758 011e3a9aSJeff DikeCHECKSTACK_ARCH := $(ARCH) 1759 011e3a9aSJeff Dikeendif 1760 1da177e4SLinus Torvaldscheckstack: 1761 1da177e4SLinus Torvalds $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \ 1762 75dd4747SMasahiro Yamada $(PERL) $(srctree)/scripts/checkstack.pl $(CHECKSTACK_ARCH) 1763 1da177e4SLinus Torvalds 1764 7b8ea53dSAmerigo Wangkernelrelease: 1765 7b8ea53dSAmerigo Wang @echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))" 1766 01ab1788SAmerigo Wang 1767 cb58455cSSam Ravnborgkernelversion: 1768 2244cbd8SSam Ravnborg @echo $(KERNELVERSION) 1769 1da177e4SLinus Torvalds 1770 c398ff00SMike Marciniszynimage_name: 1771 c398ff00SMike Marciniszyn @echo $(KBUILD_IMAGE) 1772 c398ff00SMike Marciniszyn 1773 ea01fa9fSBorislav Petkov# Clear a bunch of variables before executing the submake 1774 f47a23ceSMasahiro Yamada 1775 f47a23ceSMasahiro Yamadaifeq ($(quiet),silent_) 1776 f47a23ceSMasahiro Yamadatools_silent=s 1777 f47a23ceSMasahiro Yamadaendif 1778 f47a23ceSMasahiro Yamada 1779 ea01fa9fSBorislav Petkovtools/: FORCE 1780 bf35182fSDavid Howells $(Q)mkdir -p $(objtree)/tools 1781 75dd4747SMasahiro Yamada $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ 1782 ea01fa9fSBorislav Petkov 1783 ea01fa9fSBorislav Petkovtools/%: FORCE 1784 bf35182fSDavid Howells $(Q)mkdir -p $(objtree)/tools 1785 75dd4747SMasahiro Yamada $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $* 1786 ea01fa9fSBorislav Petkov 1787 1da177e4SLinus Torvalds# FIXME Should go into a make.lib or something 1788 1da177e4SLinus Torvalds# =========================================================================== 1789 1da177e4SLinus Torvalds 1790 1da177e4SLinus Torvaldsquiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN $(wildcard $(rm-dirs))) 1791 1da177e4SLinus Torvalds cmd_rmdirs = rm -rf $(rm-dirs) 1792 1da177e4SLinus Torvalds 1793 1da177e4SLinus Torvaldsquiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files))) 1794 1da177e4SLinus Torvalds cmd_rmfiles = rm -f $(rm-files) 1795 1da177e4SLinus Torvalds 1796 bc3c26feSUwe Kleine-König# Run depmod only if we have System.map and depmod is executable 1797 50a8ec31SSam Ravnborgquiet_cmd_depmod = DEPMOD $(KERNELRELEASE) 1798 569658ddSMichal Marek cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \ 1799 5a144a1aSMasahiro Yamada $(KERNELRELEASE) 1800 50a8ec31SSam Ravnborg 1801 392885eeSMasahiro Yamada# read saved command lines for existing targets 1802 392885eeSMasahiro Yamadaexisting-targets := $(wildcard $(sort $(targets))) 1803 1da177e4SLinus Torvalds 1804 b999923cSMasahiro Yamada-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd) 1805 1da177e4SLinus Torvalds 1806 2042b548SMasahiro Yamadaendif # config-targets 1807 2042b548SMasahiro Yamadaendif # mixed-build 1808 688931a5SMasahiro Yamadaendif # need-sub-make 1809 1da177e4SLinus Torvalds 1810 4f193362SPaul SmithPHONY += FORCE 1811 1da177e4SLinus TorvaldsFORCE: 1812 4f193362SPaul Smith 1813 bd412d81SUlf Magnusson# Declare the contents of the PHONY variable as phony. We keep that 1814 fe8d0a41SKirill Smelkov# information in a variable so we can use it in if_changed and friends. 1815 4f193362SPaul Smith.PHONY: $(PHONY) 1816