0001
0002 VERSION = 6
0003 PATCHLEVEL = 0
0004 SUBLEVEL = 1
0005 EXTRAVERSION =
0006 NAME = Hurr durr I'ma ninja sloth
0007
0008 # *DOCUMENTATION*
0009 # To see a list of typical targets execute "make help"
0010 # More info can be located in ./README
0011 # Comments in this file are targeted only to the developer, do not
0012 # expect to learn how to build the kernel reading this file.
0013
0014 $(if $(filter __%, $(MAKECMDGOALS)), \
0015 $(error targets prefixed with '__' are only for internal use))
0016
0017 # That's our default target when none is given on the command line
0018 PHONY := __all
0019 __all:
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 ifneq ($(sub_make_done),1)
0038
0039
0040
0041 MAKEFLAGS += -rR
0042
0043
0044 unexport LC_ALL
0045 LC_COLLATE=C
0046 LC_NUMERIC=C
0047 export LC_COLLATE LC_NUMERIC
0048
0049
0050 unexport GREP_OPTIONS
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079 ifeq ("$(origin V)", "command line")
0080 KBUILD_VERBOSE = $(V)
0081 endif
0082 ifndef KBUILD_VERBOSE
0083 KBUILD_VERBOSE = 0
0084 endif
0085
0086 ifeq ($(KBUILD_VERBOSE),1)
0087 quiet =
0088 Q =
0089 else
0090 quiet=quiet_
0091 Q = @
0092 endif
0093
0094
0095
0096
0097 ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
0098 quiet=silent_
0099 KBUILD_VERBOSE = 0
0100 endif
0101
0102 export quiet Q KBUILD_VERBOSE
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114 ifeq ("$(origin C)", "command line")
0115 KBUILD_CHECKSRC = $(C)
0116 endif
0117 ifndef KBUILD_CHECKSRC
0118 KBUILD_CHECKSRC = 0
0119 endif
0120
0121 export KBUILD_CHECKSRC
0122
0123
0124
0125 ifeq ("$(origin M)", "command line")
0126 KBUILD_EXTMOD := $(M)
0127 endif
0128
0129 $(if $(word 2, $(KBUILD_EXTMOD)), \
0130 $(error building multiple external modules is not supported))
0131
0132 $(foreach x, % :, $(if $(findstring $x, $(KBUILD_EXTMOD)), \
0133 $(error module directory path cannot contain '$x')))
0134
0135
0136 ifneq ($(filter %/, $(KBUILD_EXTMOD)),)
0137 KBUILD_EXTMOD := $(shell dirname $(KBUILD_EXTMOD).)
0138 endif
0139
0140 export KBUILD_EXTMOD
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163 ifeq ("$(origin O)", "command line")
0164 KBUILD_OUTPUT := $(O)
0165 endif
0166
0167 ifneq ($(KBUILD_OUTPUT),)
0168
0169
0170 abs_objtree := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd)
0171 $(if $(abs_objtree),, \
0172 $(error failed to create output directory "$(KBUILD_OUTPUT)"))
0173
0174
0175 abs_objtree := $(realpath $(abs_objtree))
0176 else
0177 abs_objtree := $(CURDIR)
0178 endif
0179
0180 ifeq ($(abs_objtree),$(CURDIR))
0181
0182 MAKEFLAGS += --no-print-directory
0183 else
0184 need-sub-make := 1
0185 endif
0186
0187 this-makefile := $(lastword $(MAKEFILE_LIST))
0188 abs_srctree := $(realpath $(dir $(this-makefile)))
0189
0190 ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
0191 $(error source directory cannot contain spaces or colons)
0192 endif
0193
0194 ifneq ($(abs_srctree),$(abs_objtree))
0195
0196
0197
0198
0199 MAKEFLAGS += --include-dir=$(abs_srctree)
0200 endif
0201
0202 ifneq ($(filter 3.%,$(MAKE_VERSION)),)
0203
0204
0205 need-sub-make := 1
0206
0207 $(this-makefile): ;
0208 endif
0209
0210 export abs_srctree abs_objtree
0211 export sub_make_done := 1
0212
0213 ifeq ($(need-sub-make),1)
0214
0215 PHONY += $(MAKECMDGOALS) __sub-make
0216
0217 $(filter-out $(this-makefile), $(MAKECMDGOALS)) __all: __sub-make
0218 @:
0219
0220
0221 __sub-make:
0222 $(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
0223
0224 endif
0225 endif
0226
0227
0228 ifeq ($(need-sub-make),)
0229
0230
0231
0232
0233 MAKEFLAGS += --no-print-directory
0234
0235 ifeq ($(abs_srctree),$(abs_objtree))
0236
0237 srctree := .
0238 building_out_of_srctree :=
0239 else
0240 ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
0241
0242 srctree := ..
0243 else
0244 srctree := $(abs_srctree)
0245 endif
0246 building_out_of_srctree := 1
0247 endif
0248
0249 ifneq ($(KBUILD_ABS_SRCTREE),)
0250 srctree := $(abs_srctree)
0251 endif
0252
0253 objtree := .
0254 VPATH := $(srctree)
0255
0256 export building_out_of_srctree srctree objtree VPATH
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266 version_h := include/generated/uapi/linux/version.h
0267
0268 clean-targets := %clean mrproper cleandocs
0269 no-dot-config-targets := $(clean-targets) \
0270 cscope gtags TAGS tags help% %docs check% coccicheck \
0271 $(version_h) headers headers_% archheaders archscripts \
0272 %asm-generic kernelversion %src-pkg dt_binding_check \
0273 outputmakefile
0274
0275
0276 no-compiler-targets := $(no-dot-config-targets) install dtbs_install \
0277 headers_install modules_install kernelrelease image_name
0278 no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \
0279 image_name
0280 single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
0281
0282 config-build :=
0283 mixed-build :=
0284 need-config := 1
0285 need-compiler := 1
0286 may-sync-config := 1
0287 single-build :=
0288
0289 ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
0290 ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
0291 need-config :=
0292 endif
0293 endif
0294
0295 ifneq ($(filter $(no-compiler-targets), $(MAKECMDGOALS)),)
0296 ifeq ($(filter-out $(no-compiler-targets), $(MAKECMDGOALS)),)
0297 need-compiler :=
0298 endif
0299 endif
0300
0301 ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
0302 ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
0303 may-sync-config :=
0304 endif
0305 endif
0306
0307 ifneq ($(KBUILD_EXTMOD),)
0308 may-sync-config :=
0309 endif
0310
0311 ifeq ($(KBUILD_EXTMOD),)
0312 ifneq ($(filter %config,$(MAKECMDGOALS)),)
0313 config-build := 1
0314 ifneq ($(words $(MAKECMDGOALS)),1)
0315 mixed-build := 1
0316 endif
0317 endif
0318 endif
0319
0320
0321 ifneq ($(filter $(single-targets), $(MAKECMDGOALS)),)
0322 single-build := 1
0323 ifneq ($(filter-out $(single-targets), $(MAKECMDGOALS)),)
0324 mixed-build := 1
0325 endif
0326 endif
0327
0328
0329 ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),)
0330 ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),)
0331 mixed-build := 1
0332 endif
0333 endif
0334
0335
0336 ifneq ($(filter install,$(MAKECMDGOALS)),)
0337 ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
0338 mixed-build := 1
0339 endif
0340 endif
0341
0342 ifdef mixed-build
0343
0344
0345
0346
0347 PHONY += $(MAKECMDGOALS) __build_one_by_one
0348
0349 $(MAKECMDGOALS): __build_one_by_one
0350 @:
0351
0352 __build_one_by_one:
0353 $(Q)set -e; \
0354 for i in $(MAKECMDGOALS); do \
0355 $(MAKE) -f $(srctree)/Makefile $$i; \
0356 done
0357
0358 else
0359
0360 include $(srctree)/scripts/Kbuild.include
0361
0362
0363 KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
0364 KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
0365 export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
0366
0367 include $(srctree)/scripts/subarch.include
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387 ARCH ?= $(SUBARCH)
0388
0389
0390 UTS_MACHINE := $(ARCH)
0391 SRCARCH := $(ARCH)
0392
0393
0394 ifeq ($(ARCH),i386)
0395 SRCARCH := x86
0396 endif
0397 ifeq ($(ARCH),x86_64)
0398 SRCARCH := x86
0399 endif
0400
0401
0402 ifeq ($(ARCH),sparc32)
0403 SRCARCH := sparc
0404 endif
0405 ifeq ($(ARCH),sparc64)
0406 SRCARCH := sparc
0407 endif
0408
0409
0410 ifeq ($(ARCH),parisc64)
0411 SRCARCH := parisc
0412 endif
0413
0414 export cross_compiling :=
0415 ifneq ($(SRCARCH),$(SUBARCH))
0416 cross_compiling := 1
0417 endif
0418
0419 KCONFIG_CONFIG ?= .config
0420 export KCONFIG_CONFIG
0421
0422
0423 CONFIG_SHELL := sh
0424
0425 HOST_LFS_CFLAGS := $(shell getconf LFS_CFLAGS 2>/dev/null)
0426 HOST_LFS_LDFLAGS := $(shell getconf LFS_LDFLAGS 2>/dev/null)
0427 HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
0428
0429 ifneq ($(LLVM),)
0430 ifneq ($(filter %/,$(LLVM)),)
0431 LLVM_PREFIX := $(LLVM)
0432 else ifneq ($(filter -%,$(LLVM)),)
0433 LLVM_SUFFIX := $(LLVM)
0434 endif
0435
0436 HOSTCC = $(LLVM_PREFIX)clang$(LLVM_SUFFIX)
0437 HOSTCXX = $(LLVM_PREFIX)clang++$(LLVM_SUFFIX)
0438 else
0439 HOSTCC = gcc
0440 HOSTCXX = g++
0441 endif
0442 HOSTPKG_CONFIG = pkg-config
0443
0444 KBUILD_USERHOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \
0445 -O2 -fomit-frame-pointer -std=gnu11 \
0446 -Wdeclaration-after-statement
0447 KBUILD_USERCFLAGS := $(KBUILD_USERHOSTCFLAGS) $(USERCFLAGS)
0448 KBUILD_USERLDFLAGS := $(USERLDFLAGS)
0449
0450 KBUILD_HOSTCFLAGS := $(KBUILD_USERHOSTCFLAGS) $(HOST_LFS_CFLAGS) $(HOSTCFLAGS)
0451 KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
0452 KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
0453 KBUILD_HOSTLDLIBS := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
0454
0455
0456 CPP = $(CC) -E
0457 ifneq ($(LLVM),)
0458 CC = $(LLVM_PREFIX)clang$(LLVM_SUFFIX)
0459 LD = $(LLVM_PREFIX)ld.lld$(LLVM_SUFFIX)
0460 AR = $(LLVM_PREFIX)llvm-ar$(LLVM_SUFFIX)
0461 NM = $(LLVM_PREFIX)llvm-nm$(LLVM_SUFFIX)
0462 OBJCOPY = $(LLVM_PREFIX)llvm-objcopy$(LLVM_SUFFIX)
0463 OBJDUMP = $(LLVM_PREFIX)llvm-objdump$(LLVM_SUFFIX)
0464 READELF = $(LLVM_PREFIX)llvm-readelf$(LLVM_SUFFIX)
0465 STRIP = $(LLVM_PREFIX)llvm-strip$(LLVM_SUFFIX)
0466 else
0467 CC = $(CROSS_COMPILE)gcc
0468 LD = $(CROSS_COMPILE)ld
0469 AR = $(CROSS_COMPILE)ar
0470 NM = $(CROSS_COMPILE)nm
0471 OBJCOPY = $(CROSS_COMPILE)objcopy
0472 OBJDUMP = $(CROSS_COMPILE)objdump
0473 READELF = $(CROSS_COMPILE)readelf
0474 STRIP = $(CROSS_COMPILE)strip
0475 endif
0476 PAHOLE = pahole
0477 RESOLVE_BTFIDS = $(objtree)/tools/bpf/resolve_btfids/resolve_btfids
0478 LEX = flex
0479 YACC = bison
0480 AWK = awk
0481 INSTALLKERNEL := installkernel
0482 DEPMOD = depmod
0483 PERL = perl
0484 PYTHON3 = python3
0485 CHECK = sparse
0486 BASH = bash
0487 KGZIP = gzip
0488 KBZIP2 = bzip2
0489 KLZOP = lzop
0490 LZMA = lzma
0491 LZ4 = lz4c
0492 XZ = xz
0493 ZSTD = zstd
0494
0495 PAHOLE_FLAGS = $(shell PAHOLE=$(PAHOLE) $(srctree)/scripts/pahole-flags.sh)
0496
0497 CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
0498 -Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
0499 NOSTDINC_FLAGS :=
0500 CFLAGS_MODULE =
0501 AFLAGS_MODULE =
0502 LDFLAGS_MODULE =
0503 CFLAGS_KERNEL =
0504 AFLAGS_KERNEL =
0505 LDFLAGS_vmlinux =
0506
0507
0508 USERINCLUDE := \
0509 -I$(srctree)/arch/$(SRCARCH)/include/uapi \
0510 -I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \
0511 -I$(srctree)/include/uapi \
0512 -I$(objtree)/include/generated/uapi \
0513 -include $(srctree)/include/linux/compiler-version.h \
0514 -include $(srctree)/include/linux/kconfig.h
0515
0516
0517
0518 LINUXINCLUDE := \
0519 -I$(srctree)/arch/$(SRCARCH)/include \
0520 -I$(objtree)/arch/$(SRCARCH)/include/generated \
0521 $(if $(building_out_of_srctree),-I$(srctree)/include) \
0522 -I$(objtree)/include \
0523 $(USERINCLUDE)
0524
0525 KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE
0526 KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
0527 -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
0528 -Werror=implicit-function-declaration -Werror=implicit-int \
0529 -Werror=return-type -Wno-format-security \
0530 -std=gnu11
0531 KBUILD_CPPFLAGS := -D__KERNEL__
0532 KBUILD_AFLAGS_KERNEL :=
0533 KBUILD_CFLAGS_KERNEL :=
0534 KBUILD_AFLAGS_MODULE := -DMODULE
0535 KBUILD_CFLAGS_MODULE := -DMODULE
0536 KBUILD_LDFLAGS_MODULE :=
0537 KBUILD_LDFLAGS :=
0538 CLANG_FLAGS :=
0539
0540 export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC HOSTPKG_CONFIG
0541 export CPP AR NM STRIP OBJCOPY OBJDUMP READELF PAHOLE RESOLVE_BTFIDS LEX YACC AWK INSTALLKERNEL
0542 export PERL PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
0543 export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD
0544 export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
0545 export KBUILD_USERCFLAGS KBUILD_USERLDFLAGS
0546
0547 export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
0548 export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
0549 export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
0550 export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
0551 export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
0552 export PAHOLE_FLAGS
0553
0554
0555
0556 export RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o \
0557 -name CVS -o -name .pc -o -name .hg -o -name .git \) \
0558 -prune -o
0559 export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
0560 --exclude CVS --exclude .pc --exclude .hg --exclude .git
0561
0562
0563
0564
0565
0566 PHONY += scripts_basic
0567 scripts_basic:
0568 $(Q)$(MAKE) $(build)=scripts/basic
0569
0570 PHONY += outputmakefile
0571 ifdef building_out_of_srctree
0572
0573
0574
0575
0576
0577
0578
0579 quiet_cmd_makefile = GEN Makefile
0580 cmd_makefile = { \
0581 echo "\# Automatically generated by $(srctree)/Makefile: don't edit"; \
0582 echo "include $(srctree)/Makefile"; \
0583 } > Makefile
0584
0585 outputmakefile:
0586 $(Q)if [ -f $(srctree)/.config -o \
0587 -d $(srctree)/include/config -o \
0588 -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
0589 echo >&2 "***"; \
0590 echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
0591 echo >&2 "*** in $(abs_srctree)";\
0592 echo >&2 "***"; \
0593 false; \
0594 fi
0595 $(Q)ln -fsn $(srctree) source
0596 $(call cmd,makefile)
0597 $(Q)test -e .gitignore || \
0598 { echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
0599 endif
0600
0601
0602
0603
0604
0605 CC_VERSION_TEXT = $(subst $(pound),,$(shell LC_ALL=C $(CC) --version 2>/dev/null | head -n 1))
0606
0607 ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
0608 include $(srctree)/scripts/Makefile.clang
0609 endif
0610
0611
0612
0613 ifdef need-compiler
0614 include $(srctree)/scripts/Makefile.compiler
0615 endif
0616
0617 ifdef config-build
0618
0619
0620
0621
0622
0623
0624
0625 include $(srctree)/arch/$(SRCARCH)/Makefile
0626 export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
0627
0628 config: outputmakefile scripts_basic FORCE
0629 $(Q)$(MAKE) $(build)=scripts/kconfig $@
0630
0631 %config: outputmakefile scripts_basic FORCE
0632 $(Q)$(MAKE) $(build)=scripts/kconfig $@
0633
0634 else
0635
0636
0637
0638
0639
0640
0641 PHONY += all
0642 ifeq ($(KBUILD_EXTMOD),)
0643 __all: all
0644 else
0645 __all: modules
0646 endif
0647
0648
0649
0650
0651 KBUILD_MODULES :=
0652 KBUILD_BUILTIN := 1
0653
0654
0655 ifeq ($(MAKECMDGOALS),modules)
0656 KBUILD_BUILTIN :=
0657 endif
0658
0659
0660
0661
0662
0663 ifneq ($(filter all modules nsdeps %compile_commands.json clang-%,$(MAKECMDGOALS)),)
0664 KBUILD_MODULES := 1
0665 endif
0666
0667 ifeq ($(MAKECMDGOALS),)
0668 KBUILD_MODULES := 1
0669 endif
0670
0671 export KBUILD_MODULES KBUILD_BUILTIN
0672
0673 ifdef need-config
0674 include include/config/auto.conf
0675 endif
0676
0677 ifeq ($(KBUILD_EXTMOD),)
0678
0679 core-y := init/ usr/ arch/$(SRCARCH)/
0680 drivers-y := drivers/ sound/
0681 drivers-$(CONFIG_SAMPLES) += samples/
0682 drivers-$(CONFIG_NET) += net/
0683 drivers-y += virt/
0684 libs-y := lib/
0685 endif
0686
0687
0688
0689
0690
0691 all: vmlinux
0692
0693 CFLAGS_GCOV := -fprofile-arcs -ftest-coverage
0694 ifdef CONFIG_CC_IS_GCC
0695 CFLAGS_GCOV += -fno-tree-loop-im
0696 endif
0697 export CFLAGS_GCOV
0698
0699
0700 ifdef CONFIG_FUNCTION_TRACER
0701 CC_FLAGS_FTRACE := -pg
0702 endif
0703
0704 include $(srctree)/arch/$(SRCARCH)/Makefile
0705
0706 ifdef need-config
0707 ifdef may-sync-config
0708
0709
0710
0711 include include/config/auto.conf.cmd
0712
0713 $(KCONFIG_CONFIG):
0714 @echo >&2 '***'
0715 @echo >&2 '*** Configuration file "$@" not found!'
0716 @echo >&2 '***'
0717 @echo >&2 '*** Please run some configurator (e.g. "make oldconfig" or'
0718 @echo >&2 '*** "make menuconfig" or "make xconfig").'
0719 @echo >&2 '***'
0720 @/bin/false
0721
0722
0723
0724
0725
0726
0727
0728
0729
0730
0731
0732 %/config/auto.conf %/config/auto.conf.cmd %/generated/autoconf.h: $(KCONFIG_CONFIG)
0733 $(Q)$(kecho) " SYNC $@"
0734 $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
0735 else
0736
0737
0738
0739 PHONY += include/config/auto.conf
0740
0741 include/config/auto.conf:
0742 $(Q)test -e include/generated/autoconf.h -a -e $@ || ( \
0743 echo >&2; \
0744 echo >&2 " ERROR: Kernel configuration is invalid."; \
0745 echo >&2 " include/generated/autoconf.h or $@ are missing.";\
0746 echo >&2 " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
0747 echo >&2 ; \
0748 /bin/false)
0749
0750 endif
0751 endif
0752
0753 KBUILD_CFLAGS += -fno-delete-null-pointer-checks
0754 KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,)
0755 KBUILD_CFLAGS += $(call cc-disable-warning, format-truncation)
0756 KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow)
0757 KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
0758
0759 ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
0760 KBUILD_CFLAGS += -O2
0761 else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
0762 KBUILD_CFLAGS += -Os
0763 endif
0764
0765
0766 ifdef CONFIG_CC_IS_GCC
0767
0768
0769 KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
0770 KBUILD_CFLAGS += $(call cc-option,-fno-allow-store-data-races)
0771 endif
0772
0773 ifdef CONFIG_READABLE_ASM
0774
0775
0776
0777
0778 KBUILD_CFLAGS += -fno-reorder-blocks -fno-ipa-cp-clone -fno-partial-inlining
0779 endif
0780
0781 ifneq ($(CONFIG_FRAME_WARN),0)
0782 KBUILD_CFLAGS += -Wframe-larger-than=$(CONFIG_FRAME_WARN)
0783 endif
0784
0785 stackp-flags-y := -fno-stack-protector
0786 stackp-flags-$(CONFIG_STACKPROTECTOR) := -fstack-protector
0787 stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
0788
0789 KBUILD_CFLAGS += $(stackp-flags-y)
0790
0791 KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
0792 KBUILD_CFLAGS-$(CONFIG_CC_NO_ARRAY_BOUNDS) += -Wno-array-bounds
0793 KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
0794
0795 ifdef CONFIG_CC_IS_CLANG
0796 KBUILD_CPPFLAGS += -Qunused-arguments
0797
0798 KBUILD_CFLAGS += -Wno-gnu
0799 else
0800
0801
0802 KBUILD_CFLAGS += -Wno-main
0803 endif
0804
0805
0806
0807 KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
0808 KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
0809
0810
0811 KBUILD_CFLAGS += $(call cc-disable-warning, dangling-pointer)
0812
0813 ifdef CONFIG_FRAME_POINTER
0814 KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
0815 else
0816
0817
0818
0819
0820
0821 ifndef CONFIG_FUNCTION_TRACER
0822 KBUILD_CFLAGS += -fomit-frame-pointer
0823 endif
0824 endif
0825
0826
0827 ifdef CONFIG_INIT_STACK_ALL_PATTERN
0828 KBUILD_CFLAGS += -ftrivial-auto-var-init=pattern
0829 endif
0830
0831
0832 ifdef CONFIG_INIT_STACK_ALL_ZERO
0833 KBUILD_CFLAGS += -ftrivial-auto-var-init=zero
0834 ifdef CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_ENABLER
0835
0836 KBUILD_CFLAGS += -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
0837 endif
0838 endif
0839
0840
0841
0842 KBUILD_CFLAGS += $(call cc-option, -fno-stack-clash-protection)
0843
0844
0845 ifdef CONFIG_ZERO_CALL_USED_REGS
0846 KBUILD_CFLAGS += -fzero-call-used-regs=used-gpr
0847 endif
0848
0849 ifdef CONFIG_FUNCTION_TRACER
0850 ifdef CONFIG_FTRACE_MCOUNT_USE_CC
0851 CC_FLAGS_FTRACE += -mrecord-mcount
0852 ifdef CONFIG_HAVE_NOP_MCOUNT
0853 ifeq ($(call cc-option-yn, -mnop-mcount),y)
0854 CC_FLAGS_FTRACE += -mnop-mcount
0855 CC_FLAGS_USING += -DCC_USING_NOP_MCOUNT
0856 endif
0857 endif
0858 endif
0859 ifdef CONFIG_FTRACE_MCOUNT_USE_OBJTOOL
0860 CC_FLAGS_USING += -DCC_USING_NOP_MCOUNT
0861 endif
0862 ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
0863 ifdef CONFIG_HAVE_C_RECORDMCOUNT
0864 BUILD_C_RECORDMCOUNT := y
0865 export BUILD_C_RECORDMCOUNT
0866 endif
0867 endif
0868 ifdef CONFIG_HAVE_FENTRY
0869
0870 ifeq ($(call cc-option-yn, -mfentry),y)
0871 CC_FLAGS_FTRACE += -mfentry
0872 CC_FLAGS_USING += -DCC_USING_FENTRY
0873 endif
0874 endif
0875 export CC_FLAGS_FTRACE
0876 KBUILD_CFLAGS += $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING)
0877 KBUILD_AFLAGS += $(CC_FLAGS_USING)
0878 endif
0879
0880
0881 ifdef CONFIG_DEBUG_SECTION_MISMATCH
0882 KBUILD_CFLAGS += -fno-inline-functions-called-once
0883 endif
0884
0885 ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
0886 KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
0887 LDFLAGS_vmlinux += --gc-sections
0888 endif
0889
0890 ifdef CONFIG_SHADOW_CALL_STACK
0891 CC_FLAGS_SCS := -fsanitize=shadow-call-stack
0892 KBUILD_CFLAGS += $(CC_FLAGS_SCS)
0893 export CC_FLAGS_SCS
0894 endif
0895
0896 ifdef CONFIG_LTO_CLANG
0897 ifdef CONFIG_LTO_CLANG_THIN
0898 CC_FLAGS_LTO := -flto=thin -fsplit-lto-unit
0899 KBUILD_LDFLAGS += --thinlto-cache-dir=$(extmod_prefix).thinlto-cache
0900 else
0901 CC_FLAGS_LTO := -flto
0902 endif
0903 CC_FLAGS_LTO += -fvisibility=hidden
0904
0905
0906 KBUILD_LDFLAGS += -mllvm -import-instr-limit=5
0907
0908
0909
0910 ifneq ($(CONFIG_FRAME_WARN),0)
0911 ifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 130000; echo $$?),0)
0912 KBUILD_LDFLAGS += -plugin-opt=-warn-stack-size=$(CONFIG_FRAME_WARN)
0913 endif
0914 endif
0915 endif
0916
0917 ifdef CONFIG_LTO
0918 KBUILD_CFLAGS += -fno-lto $(CC_FLAGS_LTO)
0919 KBUILD_AFLAGS += -fno-lto
0920 export CC_FLAGS_LTO
0921 endif
0922
0923 ifdef CONFIG_CFI_CLANG
0924 CC_FLAGS_CFI := -fsanitize=cfi \
0925 -fsanitize-cfi-cross-dso \
0926 -fno-sanitize-cfi-canonical-jump-tables \
0927 -fno-sanitize-trap=cfi \
0928 -fno-sanitize-blacklist
0929
0930 ifdef CONFIG_CFI_PERMISSIVE
0931 CC_FLAGS_CFI += -fsanitize-recover=cfi
0932 endif
0933
0934
0935 CC_FLAGS_LTO += $(CC_FLAGS_CFI)
0936 KBUILD_CFLAGS += $(CC_FLAGS_CFI)
0937 export CC_FLAGS_CFI
0938 endif
0939
0940 ifdef CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B
0941 KBUILD_CFLAGS += -falign-functions=64
0942 endif
0943
0944
0945 NOSTDINC_FLAGS += -nostdinc
0946
0947
0948 KBUILD_CFLAGS += -Wdeclaration-after-statement
0949
0950
0951 KBUILD_CFLAGS += -Wvla
0952
0953
0954 KBUILD_CFLAGS += -Wno-pointer-sign
0955
0956
0957
0958
0959 KBUILD_CFLAGS += $(call cc-option, -Wcast-function-type)
0960
0961
0962 KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
0963
0964
0965 KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow)
0966
0967
0968 KBUILD_CFLAGS += $(call cc-disable-warning, restrict)
0969
0970
0971 ifdef CONFIG_CC_IS_GCC
0972 KBUILD_CFLAGS += -Wno-maybe-uninitialized
0973 endif
0974
0975 ifdef CONFIG_CC_IS_GCC
0976
0977
0978
0979
0980
0981
0982
0983
0984
0985
0986
0987 KBUILD_CFLAGS += $(call cc-ifversion, -ge, 0901, -Wno-alloc-size-larger-than)
0988 endif
0989
0990
0991 KBUILD_CFLAGS += -fno-strict-overflow
0992
0993
0994 KBUILD_CFLAGS += -fno-stack-check
0995
0996
0997 ifdef CONFIG_CC_IS_GCC
0998 KBUILD_CFLAGS += -fconserve-stack
0999 endif
1000
1001
1002 KBUILD_CFLAGS += -Werror=date-time
1003
1004
1005 KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types)
1006
1007
1008 KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
1009
1010
1011 KBUILD_CPPFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
1012
1013
1014 include-y := scripts/Makefile.extrawarn
1015 include-$(CONFIG_DEBUG_INFO) += scripts/Makefile.debug
1016 include-$(CONFIG_KASAN) += scripts/Makefile.kasan
1017 include-$(CONFIG_KCSAN) += scripts/Makefile.kcsan
1018 include-$(CONFIG_UBSAN) += scripts/Makefile.ubsan
1019 include-$(CONFIG_KCOV) += scripts/Makefile.kcov
1020 include-$(CONFIG_RANDSTRUCT) += scripts/Makefile.randstruct
1021 include-$(CONFIG_GCC_PLUGINS) += scripts/Makefile.gcc-plugins
1022
1023 include $(addprefix $(srctree)/, $(include-y))
1024
1025
1026
1027
1028
1029
1030 KBUILD_CPPFLAGS += $(KCPPFLAGS)
1031 KBUILD_AFLAGS += $(KAFLAGS)
1032 KBUILD_CFLAGS += $(KCFLAGS)
1033
1034 KBUILD_LDFLAGS_MODULE += --build-id=sha1
1035 LDFLAGS_vmlinux += --build-id=sha1
1036
1037 KBUILD_LDFLAGS += -z noexecstack
1038 ifeq ($(CONFIG_LD_IS_BFD),y)
1039 KBUILD_LDFLAGS += $(call ld-option,--no-warn-rwx-segments)
1040 endif
1041
1042 ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
1043 LDFLAGS_vmlinux += $(call ld-option, -X,)
1044 endif
1045
1046 ifeq ($(CONFIG_RELR),y)
1047 LDFLAGS_vmlinux += --pack-dyn-relocs=relr --use-android-relr-tags
1048 endif
1049
1050
1051
1052 ifdef CONFIG_LD_ORPHAN_WARN
1053 LDFLAGS_vmlinux += --orphan-handling=warn
1054 endif
1055
1056
1057 KBUILD_USERCFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
1058 KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
1059
1060
1061 CHECKFLAGS += --arch=$(ARCH)
1062
1063
1064 CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)
1065
1066
1067 CHECKFLAGS += $(if $(CONFIG_64BIT),-m64,-m32)
1068
1069
1070
1071
1072
1073
1074 export KBUILD_IMAGE ?= vmlinux
1075
1076
1077
1078
1079 export INSTALL_PATH ?= /boot
1080
1081
1082
1083
1084
1085
1086 export INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE)
1087
1088
1089
1090
1091
1092
1093
1094 MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
1095 export MODLIB
1096
1097 PHONY += prepare0
1098
1099 export extmod_prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)
1100 export MODORDER := $(extmod_prefix)modules.order
1101 export MODULES_NSDEPS := $(extmod_prefix)modules.nsdeps
1102
1103 ifeq ($(KBUILD_EXTMOD),)
1104 core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/
1105 core-$(CONFIG_BLOCK) += block/
1106 core-$(CONFIG_IO_URING) += io_uring/
1107
1108 vmlinux-dirs := $(patsubst %/,%,$(filter %/, \
1109 $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
1110 $(libs-y) $(libs-m)))
1111
1112 vmlinux-alldirs := $(sort $(vmlinux-dirs) Documentation \
1113 $(patsubst %/,%,$(filter %/, $(core-) \
1114 $(drivers-) $(libs-))))
1115
1116 build-dirs := $(vmlinux-dirs)
1117 clean-dirs := $(vmlinux-alldirs)
1118
1119 subdir-modorder := $(addsuffix /modules.order, $(build-dirs))
1120
1121
1122 KBUILD_VMLINUX_OBJS := $(head-y) $(patsubst %/,%/built-in.a, $(core-y))
1123 KBUILD_VMLINUX_OBJS += $(addsuffix built-in.a, $(filter %/, $(libs-y)))
1124 ifdef CONFIG_MODULES
1125 KBUILD_VMLINUX_OBJS += $(patsubst %/, %/lib.a, $(filter %/, $(libs-y)))
1126 KBUILD_VMLINUX_LIBS := $(filter-out %/, $(libs-y))
1127 else
1128 KBUILD_VMLINUX_LIBS := $(patsubst %/,%/lib.a, $(libs-y))
1129 endif
1130 KBUILD_VMLINUX_OBJS += $(patsubst %/,%/built-in.a, $(drivers-y))
1131
1132 export KBUILD_VMLINUX_OBJS KBUILD_VMLINUX_LIBS
1133 export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
1134
1135 export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
1136
1137 vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
1138
1139
1140 PHONY += autoksyms_recursive
1141 ifdef CONFIG_TRIM_UNUSED_KSYMS
1142
1143
1144
1145 KBUILD_MODULES := 1
1146
1147 autoksyms_recursive: descend modules.order
1148 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
1149 "$(MAKE) -f $(srctree)/Makefile autoksyms_recursive"
1150 endif
1151
1152 autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)
1153
1154 quiet_cmd_autoksyms_h = GEN $@
1155 cmd_autoksyms_h = mkdir -p $(dir $@); \
1156 $(CONFIG_SHELL) $(srctree)/scripts/gen_autoksyms.sh $@
1157
1158 $(autoksyms_h):
1159 $(call cmd,autoksyms_h)
1160
1161 ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
1162
1163
1164 cmd_link-vmlinux = \
1165 $(CONFIG_SHELL) $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)"; \
1166 $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
1167
1168 vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
1169 +$(call if_changed_dep,link-vmlinux)
1170
1171 targets := vmlinux
1172
1173
1174
1175 $(sort $(vmlinux-deps) $(subdir-modorder)): descend ;
1176
1177 filechk_kernel.release = \
1178 echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1179
1180
1181 include/config/kernel.release: FORCE
1182 $(call filechk,kernel.release)
1183
1184
1185
1186
1187 PHONY += scripts
1188 scripts: scripts_basic scripts_dtc
1189 $(Q)$(MAKE) $(build)=$(@)
1190
1191
1192
1193
1194
1195
1196
1197 PHONY += prepare archprepare
1198
1199 archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
1200 asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h \
1201 include/generated/autoconf.h remove-stale-files
1202
1203 prepare0: archprepare
1204 $(Q)$(MAKE) $(build)=scripts/mod
1205 $(Q)$(MAKE) $(build)=.
1206
1207
1208 prepare: prepare0
1209
1210 PHONY += remove-stale-files
1211 remove-stale-files:
1212 $(Q)$(srctree)/scripts/remove-stale-files
1213
1214
1215 asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj
1216
1217 PHONY += asm-generic uapi-asm-generic
1218 asm-generic: uapi-asm-generic
1219 $(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm \
1220 generic=include/asm-generic
1221 uapi-asm-generic:
1222 $(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \
1223 generic=include/uapi/asm-generic
1224
1225
1226
1227
1228
1229
1230
1231 uts_len := 64
1232 define filechk_utsrelease.h
1233 if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
1234 echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \
1235 exit 1; \
1236 fi; \
1237 echo \
1238 endef
1239
1240 define filechk_version.h
1241 if [ $(SUBLEVEL) -gt 255 ]; then \
1242 echo \
1243 expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + 255); \
1244 else \
1245 echo \
1246 expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
1247 fi; \
1248 echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + \
1249 ((c) > 255 ? 255 : (c)))'; \
1250 echo \
1251 echo \
1252 echo \
1253 endef
1254
1255 $(version_h): PATCHLEVEL := $(or $(PATCHLEVEL), 0)
1256 $(version_h): SUBLEVEL := $(or $(SUBLEVEL), 0)
1257 $(version_h): FORCE
1258 $(call filechk,version.h)
1259
1260 include/generated/utsrelease.h: include/config/kernel.release FORCE
1261 $(call filechk,utsrelease.h)
1262
1263 PHONY += headerdep
1264 headerdep:
1265 $(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \
1266 $(srctree)/scripts/headerdep.pl -I$(srctree)/include
1267
1268
1269
1270
1271
1272 export INSTALL_HDR_PATH = $(objtree)/usr
1273
1274 quiet_cmd_headers_install = INSTALL $(INSTALL_HDR_PATH)/include
1275 cmd_headers_install = \
1276 mkdir -p $(INSTALL_HDR_PATH); \
1277 rsync -mrl --include='*/' --include='*\.h' --exclude='*' \
1278 usr/include $(INSTALL_HDR_PATH)
1279
1280 PHONY += headers_install
1281 headers_install: headers
1282 $(call cmd,headers_install)
1283
1284 PHONY += archheaders archscripts
1285
1286 hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
1287
1288 PHONY += headers
1289 headers: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
1290 $(if $(filter um, $(SRCARCH)), $(error Headers not exportable for UML))
1291 $(Q)$(MAKE) $(hdr-inst)=include/uapi
1292 $(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi
1293
1294 ifdef CONFIG_HEADERS_INSTALL
1295 prepare: headers
1296 endif
1297
1298 PHONY += scripts_unifdef
1299 scripts_unifdef: scripts_basic
1300 $(Q)$(MAKE) $(build)=scripts scripts/unifdef
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310 quiet_cmd_install = INSTALL $(INSTALL_PATH)
1311 cmd_install = unset sub_make_done; $(srctree)/scripts/install.sh
1312
1313
1314
1315
1316 ifdef CONFIG_OBJTOOL
1317 prepare: tools/objtool
1318 endif
1319
1320 ifdef CONFIG_BPF
1321 ifdef CONFIG_DEBUG_INFO_BTF
1322 prepare: tools/bpf/resolve_btfids
1323 endif
1324 endif
1325
1326 PHONY += resolve_btfids_clean
1327
1328 resolve_btfids_O = $(abspath $(objtree))/tools/bpf/resolve_btfids
1329
1330
1331
1332 resolve_btfids_clean:
1333 ifneq ($(wildcard $(resolve_btfids_O)),)
1334 $(Q)$(MAKE) -sC $(srctree)/tools/bpf/resolve_btfids O=$(resolve_btfids_O) clean
1335 endif
1336
1337
1338 ifeq ($(quiet),silent_)
1339 tools_silent=s
1340 endif
1341
1342 tools/: FORCE
1343 $(Q)mkdir -p $(objtree)/tools
1344 $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/
1345
1346 tools/%: FORCE
1347 $(Q)mkdir -p $(objtree)/tools
1348 $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $*
1349
1350
1351
1352
1353 PHONY += kselftest
1354 kselftest: headers
1355 $(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
1356
1357 kselftest-%: headers FORCE
1358 $(Q)$(MAKE) -C $(srctree)/tools/testing/selftests $*
1359
1360 PHONY += kselftest-merge
1361 kselftest-merge:
1362 $(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!))
1363 $(Q)find $(srctree)/tools/testing/selftests -name config | \
1364 xargs $(srctree)/scripts/kconfig/merge_config.sh -m $(objtree)/.config
1365 $(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
1366
1367
1368
1369
1370 ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),)
1371 dtstree := arch/$(SRCARCH)/boot/dts
1372 endif
1373
1374 ifneq ($(dtstree),)
1375
1376 %.dtb: dtbs_prepare
1377 $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
1378
1379 %.dtbo: dtbs_prepare
1380 $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
1381
1382 PHONY += dtbs dtbs_prepare dtbs_install dtbs_check
1383 dtbs: dtbs_prepare
1384 $(Q)$(MAKE) $(build)=$(dtstree)
1385
1386
1387
1388
1389 dtbs_prepare: include/config/kernel.release scripts_dtc
1390
1391 ifneq ($(filter dtbs_check, $(MAKECMDGOALS)),)
1392 export CHECK_DTBS=y
1393 dtbs: dt_binding_check
1394 endif
1395
1396 dtbs_check: dtbs
1397
1398 dtbs_install:
1399 $(Q)$(MAKE) $(dtbinst)=$(dtstree) dst=$(INSTALL_DTBS_PATH)
1400
1401 ifdef CONFIG_OF_EARLY_FLATTREE
1402 all: dtbs
1403 endif
1404
1405 endif
1406
1407 PHONY += scripts_dtc
1408 scripts_dtc: scripts_basic
1409 $(Q)$(MAKE) $(build)=scripts/dtc
1410
1411 ifneq ($(filter dt_binding_check, $(MAKECMDGOALS)),)
1412 export CHECK_DT_BINDING=y
1413 endif
1414
1415 PHONY += dt_binding_check
1416 dt_binding_check: scripts_dtc
1417 $(Q)$(MAKE) $(build)=Documentation/devicetree/bindings
1418
1419
1420
1421
1422 ifdef CONFIG_MODULES
1423
1424
1425
1426 all: modules
1427
1428
1429
1430
1431 ifdef CONFIG_MODVERSIONS
1432 KBUILD_BUILTIN := 1
1433 endif
1434
1435
1436
1437
1438
1439
1440
1441 PHONY += modules
1442 modules: $(if $(KBUILD_BUILTIN),vmlinux) modules_check modules_prepare
1443
1444 cmd_modules_order = $(AWK) '!x[$$0]++' $(real-prereqs) > $@
1445
1446 modules.order: $(subdir-modorder) FORCE
1447 $(call if_changed,modules_order)
1448
1449 targets += modules.order
1450
1451
1452 PHONY += modules_prepare
1453 modules_prepare: prepare
1454 $(Q)$(MAKE) $(build)=scripts scripts/module.lds
1455
1456 export modules_sign_only :=
1457
1458 ifeq ($(CONFIG_MODULE_SIG),y)
1459 PHONY += modules_sign
1460 modules_sign: modules_install
1461 @:
1462
1463
1464
1465 ifeq ($(filter modules_install,$(MAKECMDGOALS)),)
1466 modules_sign_only := y
1467 endif
1468 endif
1469
1470 modinst_pre :=
1471 ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
1472 modinst_pre := __modinst_pre
1473 endif
1474
1475 modules_install: $(modinst_pre)
1476 PHONY += __modinst_pre
1477 __modinst_pre:
1478 @rm -rf $(MODLIB)/kernel
1479 @rm -f $(MODLIB)/source
1480 @mkdir -p $(MODLIB)/kernel
1481 @ln -s $(abspath $(srctree)) $(MODLIB)/source
1482 @if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
1483 rm -f $(MODLIB)/build ; \
1484 ln -s $(CURDIR) $(MODLIB)/build ; \
1485 fi
1486 @sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order
1487 @cp -f modules.builtin $(MODLIB)/
1488 @cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
1489
1490 endif
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500 CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \
1501 modules.builtin modules.builtin.modinfo modules.nsdeps \
1502 compile_commands.json .thinlto-cache
1503
1504
1505 MRPROPER_FILES += include/config include/generated \
1506 arch/$(SRCARCH)/include/generated .objdiff \
1507 debian snap tar-install \
1508 .config .config.old .version \
1509 Module.symvers \
1510 certs/signing_key.pem \
1511 certs/x509.genkey \
1512 vmlinux-gdb.py \
1513 *.spec
1514
1515
1516
1517 clean: rm-files := $(CLEAN_FILES)
1518
1519 PHONY += archclean vmlinuxclean
1520
1521 vmlinuxclean:
1522 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean
1523 $(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean)
1524
1525 clean: archclean vmlinuxclean resolve_btfids_clean
1526
1527
1528
1529 mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1530 mrproper-dirs := $(addprefix _mrproper_,scripts)
1531
1532 PHONY += $(mrproper-dirs) mrproper
1533 $(mrproper-dirs):
1534 $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
1535
1536 mrproper: clean $(mrproper-dirs)
1537 $(call cmd,rmfiles)
1538
1539
1540
1541 PHONY += distclean
1542
1543 distclean: mrproper
1544 @find . $(RCS_FIND_IGNORE) \
1545 \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
1546 -o -name '*.bak' -o -name '#*#' -o -name '*%' \
1547 -o -name 'core' -o -name tags -o -name TAGS -o -name 'cscope*' \
1548 -o -name GPATH -o -name GRTAGS -o -name GSYMS -o -name GTAGS \) \
1549 -type f -print | xargs rm -f
1550
1551
1552
1553
1554
1555 %src-pkg: FORCE
1556 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
1557 %pkg: include/config/kernel.release FORCE
1558 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
1559
1560
1561
1562
1563 boards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig)
1564 boards := $(sort $(notdir $(boards)))
1565 board-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig))
1566 board-dirs := $(sort $(notdir $(board-dirs:/=)))
1567
1568 PHONY += help
1569 help:
1570 @echo 'Cleaning targets:'
1571 @echo ' clean - Remove most generated files but keep the config and'
1572 @echo ' enough build support to build external modules'
1573 @echo ' mrproper - Remove all generated files + config + various backup files'
1574 @echo ' distclean - mrproper + remove editor backup and patch files'
1575 @echo ''
1576 @echo 'Configuration targets:'
1577 @$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
1578 @echo ''
1579 @echo 'Other generic targets:'
1580 @echo ' all - Build all targets marked with [*]'
1581 @echo '* vmlinux - Build the bare kernel'
1582 @echo '* modules - Build all modules'
1583 @echo ' modules_install - Install all modules to INSTALL_MOD_PATH (default: /)'
1584 @echo ' dir/ - Build all files in dir and below'
1585 @echo ' dir/file.[ois] - Build specified target only'
1586 @echo ' dir/file.ll - Build the LLVM assembly file'
1587 @echo ' (requires compiler support for LLVM assembly generation)'
1588 @echo ' dir/file.lst - Build specified mixed source/assembly target only'
1589 @echo ' (requires a recent binutils and recent build (System.map))'
1590 @echo ' dir/file.ko - Build module including final link'
1591 @echo ' modules_prepare - Set up for building external modules'
1592 @echo ' tags/TAGS - Generate tags file for editors'
1593 @echo ' cscope - Generate cscope index'
1594 @echo ' gtags - Generate GNU GLOBAL index'
1595 @echo ' kernelrelease - Output the release version string (use with make -s)'
1596 @echo ' kernelversion - Output the version stored in Makefile (use with make -s)'
1597 @echo ' image_name - Output the image name (use with make -s)'
1598 @echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
1599 echo ' (default: $(INSTALL_HDR_PATH))'; \
1600 echo ''
1601 @echo 'Static analysers:'
1602 @echo ' checkstack - Generate a list of stack hogs'
1603 @echo ' versioncheck - Sanity check on version.h usage'
1604 @echo ' includecheck - Check for duplicate included header files'
1605 @echo ' export_report - List the usages of all exported symbols'
1606 @echo ' headerdep - Detect inclusion cycles in headers'
1607 @echo ' coccicheck - Check with Coccinelle'
1608 @echo ' clang-analyzer - Check with clang static analyzer'
1609 @echo ' clang-tidy - Check with clang-tidy'
1610 @echo ''
1611 @echo 'Tools:'
1612 @echo ' nsdeps - Generate missing symbol namespace dependencies'
1613 @echo ''
1614 @echo 'Kernel selftest:'
1615 @echo ' kselftest - Build and run kernel selftest'
1616 @echo ' Build, install, and boot kernel before'
1617 @echo ' running kselftest on it'
1618 @echo ' Run as root for full coverage'
1619 @echo ' kselftest-all - Build kernel selftest'
1620 @echo ' kselftest-install - Build and install kernel selftest'
1621 @echo ' kselftest-clean - Remove all generated kselftest files'
1622 @echo ' kselftest-merge - Merge all the config dependencies of'
1623 @echo ' kselftest to existing .config.'
1624 @echo ''
1625 @$(if $(dtstree), \
1626 echo 'Devicetree:'; \
1627 echo '* dtbs - Build device tree blobs for enabled boards'; \
1628 echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)'; \
1629 echo ' dt_binding_check - Validate device tree binding documents'; \
1630 echo ' dtbs_check - Validate device tree source files';\
1631 echo '')
1632
1633 @echo 'Userspace tools targets:'
1634 @echo ' use "make tools/help"'
1635 @echo ' or "cd tools; make help"'
1636 @echo ''
1637 @echo 'Kernel packaging:'
1638 @$(MAKE) -f $(srctree)/scripts/Makefile.package help
1639 @echo ''
1640 @echo 'Documentation targets:'
1641 @$(MAKE) -f $(srctree)/Documentation/Makefile dochelp
1642 @echo ''
1643 @echo 'Architecture specific targets ($(SRCARCH)):'
1644 @$(or $(archhelp),\
1645 echo ' No architecture specific help defined for $(SRCARCH)')
1646 @echo ''
1647 @$(if $(boards), \
1648 $(foreach b, $(boards), \
1649 printf " %-27s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
1650 echo '')
1651 @$(if $(board-dirs), \
1652 $(foreach b, $(board-dirs), \
1653 printf " %-16s - Show %s-specific targets\\n" help-$(b) $(b);) \
1654 printf " %-16s - Show all of the above\\n" help-boards; \
1655 echo '')
1656
1657 @echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
1658 @echo ' make V=2 [targets] 2 => give reason for rebuild of target'
1659 @echo ' make O=dir [targets] Locate all output files in "dir", including .config'
1660 @echo ' make C=1 [targets] Check re-compiled c source with $$CHECK'
1661 @echo ' (sparse by default)'
1662 @echo ' make C=2 [targets] Force check of all c source with $$CHECK'
1663 @echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
1664 @echo ' make W=n [targets] Enable extra build checks, n=1,2,3 where'
1665 @echo ' 1: warnings which may be relevant and do not occur too often'
1666 @echo ' 2: warnings which occur quite often but may still be relevant'
1667 @echo ' 3: more obscure warnings, can most likely be ignored'
1668 @echo ' e: warnings are being treated as errors'
1669 @echo ' Multiple levels can be combined with W=12 or W=123'
1670 @echo ''
1671 @echo 'Execute "make" or "make all" to build all targets marked with [*] '
1672 @echo 'For further info see the ./README file'
1673
1674
1675 help-board-dirs := $(addprefix help-,$(board-dirs))
1676
1677 help-boards: $(help-board-dirs)
1678
1679 boards-per-dir = $(sort $(notdir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/$*/*_defconfig)))
1680
1681 $(help-board-dirs): help-%:
1682 @echo 'Architecture specific targets ($(SRCARCH) $*):'
1683 @$(if $(boards-per-dir), \
1684 $(foreach b, $(boards-per-dir), \
1685 printf " %-24s - Build for %s\\n" $*/$(b) $(subst _defconfig,,$(b));) \
1686 echo '')
1687
1688
1689
1690
1691 DOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
1692 linkcheckdocs dochelp refcheckdocs
1693 PHONY += $(DOC_TARGETS)
1694 $(DOC_TARGETS):
1695 $(Q)$(MAKE) $(build)=Documentation $@
1696
1697
1698
1699
1700 PHONY += scripts_gdb
1701 scripts_gdb: prepare0
1702 $(Q)$(MAKE) $(build)=scripts/gdb
1703 $(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py)
1704
1705 ifdef CONFIG_GDB_SCRIPTS
1706 all: scripts_gdb
1707 endif
1708
1709 else
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719 KBUILD_BUILTIN :=
1720 KBUILD_MODULES := 1
1721
1722 build-dirs := $(KBUILD_EXTMOD)
1723 $(MODORDER): descend
1724 @:
1725
1726 compile_commands.json: $(extmod_prefix)compile_commands.json
1727 PHONY += compile_commands.json
1728
1729 clean-dirs := $(KBUILD_EXTMOD)
1730 clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers $(KBUILD_EXTMOD)/modules.nsdeps \
1731 $(KBUILD_EXTMOD)/compile_commands.json $(KBUILD_EXTMOD)/.thinlto-cache
1732
1733 PHONY += prepare
1734
1735 prepare: CC_VERSION_TEXT := $(CC_VERSION_TEXT)
1736 prepare:
1737 @if [ "$(CC_VERSION_TEXT)" != "$(CONFIG_CC_VERSION_TEXT)" ]; then \
1738 echo >&2 "warning: the compiler differs from the one used to build the kernel"; \
1739 echo >&2 " The kernel was built by: $(CONFIG_CC_VERSION_TEXT)"; \
1740 echo >&2 " You are using: $(CC_VERSION_TEXT)"; \
1741 fi
1742
1743 PHONY += help
1744 help:
1745 @echo ' Building external modules.'
1746 @echo ' Syntax: make -C path/to/kernel/src M=$$PWD target'
1747 @echo ''
1748 @echo ' modules - default target, build the module(s)'
1749 @echo ' modules_install - install the module'
1750 @echo ' clean - remove generated files in module directory only'
1751 @echo ''
1752
1753
1754 PHONY += modules_prepare
1755
1756 endif
1757
1758
1759
1760
1761 PHONY += modules modules_install
1762
1763 ifdef CONFIG_MODULES
1764
1765 modules: modules_check
1766 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
1767
1768 PHONY += modules_check
1769 modules_check: $(MODORDER)
1770 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh $<
1771
1772 quiet_cmd_depmod = DEPMOD $(MODLIB)
1773 cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \
1774 $(KERNELRELEASE)
1775
1776 modules_install:
1777 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
1778 $(call cmd,depmod)
1779
1780 else
1781
1782
1783
1784
1785 modules modules_install:
1786 @echo >&2 '***'
1787 @echo >&2 '*** The present kernel configuration has modules disabled.'
1788 @echo >&2 '*** To use the module feature, please run "make menuconfig" etc.'
1789 @echo >&2 '*** to enable CONFIG_MODULES.'
1790 @echo >&2 '***'
1791 @exit 1
1792
1793 endif
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807 ifdef single-build
1808
1809
1810 single-ko := $(sort $(filter %.ko, $(MAKECMDGOALS)))
1811 single-no-ko := $(filter-out $(single-ko), $(MAKECMDGOALS)) \
1812 $(foreach x, o mod, $(patsubst %.ko, %.$x, $(single-ko)))
1813
1814 $(single-ko): single_modpost
1815 @:
1816 $(single-no-ko): descend
1817 @:
1818
1819 ifeq ($(KBUILD_EXTMOD),)
1820
1821
1822 MODORDER := .modules.tmp
1823 endif
1824
1825 PHONY += single_modpost
1826 single_modpost: $(single-no-ko) modules_prepare
1827 $(Q){ $(foreach m, $(single-ko), echo $(extmod_prefix)$m;) } > $(MODORDER)
1828 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
1829
1830 KBUILD_MODULES := 1
1831
1832 export KBUILD_SINGLE_TARGETS := $(addprefix $(extmod_prefix), $(single-no-ko))
1833
1834
1835 build-dirs := $(foreach d, $(build-dirs), \
1836 $(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d)))
1837
1838 endif
1839
1840 ifndef CONFIG_MODULES
1841 KBUILD_MODULES :=
1842 endif
1843
1844
1845
1846
1847
1848
1849 PHONY += descend $(build-dirs)
1850 descend: $(build-dirs)
1851 $(build-dirs): prepare
1852 $(Q)$(MAKE) $(build)=$@ \
1853 single-build=$(if $(filter-out $@/, $(filter $@/%, $(KBUILD_SINGLE_TARGETS))),1) \
1854 need-builtin=1 need-modorder=1
1855
1856 clean-dirs := $(addprefix _clean_, $(clean-dirs))
1857 PHONY += $(clean-dirs) clean
1858 $(clean-dirs):
1859 $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1860
1861 clean: $(clean-dirs)
1862 $(call cmd,rmfiles)
1863 @find $(or $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1864 \( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \
1865 -o -name '*.ko.*' \
1866 -o -name '*.dtb' -o -name '*.dtbo' -o -name '*.dtb.S' -o -name '*.dt.yaml' \
1867 -o -name '*.dwo' -o -name '*.lst' \
1868 -o -name '*.su' -o -name '*.mod' -o -name '*.usyms' \
1869 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
1870 -o -name '*.lex.c' -o -name '*.tab.[ch]' \
1871 -o -name '*.asn1.[ch]' \
1872 -o -name '*.symtypes' -o -name 'modules.order' \
1873 -o -name '.tmp_*' \
1874 -o -name '*.c.[012]*.*' \
1875 -o -name '*.ll' \
1876 -o -name '*.gcno' \
1877 -o -name '*.*.symversions' \) -type f -print | xargs rm -f
1878
1879
1880
1881 quiet_cmd_tags = GEN $@
1882 cmd_tags = $(BASH) $(srctree)/scripts/tags.sh $@
1883
1884 tags TAGS cscope gtags: FORCE
1885 $(call cmd,tags)
1886
1887
1888
1889
1890 PHONY += nsdeps
1891 nsdeps: export KBUILD_NSDEPS=1
1892 nsdeps: modules
1893 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/nsdeps
1894
1895
1896
1897
1898 quiet_cmd_gen_compile_commands = GEN $@
1899 cmd_gen_compile_commands = $(PYTHON3) $< -a $(AR) -o $@ $(filter-out $<, $(real-prereqs))
1900
1901 $(extmod_prefix)compile_commands.json: scripts/clang-tools/gen_compile_commands.py \
1902 $(if $(KBUILD_EXTMOD),,$(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)) \
1903 $(if $(CONFIG_MODULES), $(MODORDER)) FORCE
1904 $(call if_changed,gen_compile_commands)
1905
1906 targets += $(extmod_prefix)compile_commands.json
1907
1908 PHONY += clang-tidy clang-analyzer
1909
1910 ifdef CONFIG_CC_IS_CLANG
1911 quiet_cmd_clang_tools = CHECK $<
1912 cmd_clang_tools = $(PYTHON3) $(srctree)/scripts/clang-tools/run-clang-tools.py $@ $<
1913
1914 clang-tidy clang-analyzer: $(extmod_prefix)compile_commands.json
1915 $(call cmd,clang_tools)
1916 else
1917 clang-tidy clang-analyzer:
1918 @echo "$@ requires CC=clang" >&2
1919 @false
1920 endif
1921
1922
1923
1924
1925 PHONY += includecheck versioncheck coccicheck export_report
1926
1927 includecheck:
1928 find $(srctree)/* $(RCS_FIND_IGNORE) \
1929 -name '*.[hcS]' -type f -print | sort \
1930 | xargs $(PERL) -w $(srctree)/scripts/checkincludes.pl
1931
1932 versioncheck:
1933 find $(srctree)/* $(RCS_FIND_IGNORE) \
1934 -name '*.[hcS]' -type f -print | sort \
1935 | xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
1936
1937 coccicheck:
1938 $(Q)$(BASH) $(srctree)/scripts/$@
1939
1940 export_report:
1941 $(PERL) $(srctree)/scripts/export_report.pl
1942
1943 PHONY += checkstack kernelrelease kernelversion image_name
1944
1945
1946
1947
1948
1949 ifeq ($(ARCH), um)
1950 CHECKSTACK_ARCH := $(SUBARCH)
1951 else
1952 CHECKSTACK_ARCH := $(ARCH)
1953 endif
1954 checkstack:
1955 $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
1956 $(PERL) $(srctree)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
1957
1958 kernelrelease:
1959 @echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
1960
1961 kernelversion:
1962 @echo $(KERNELVERSION)
1963
1964 image_name:
1965 @echo $(KBUILD_IMAGE)
1966
1967 quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files)))
1968 cmd_rmfiles = rm -rf $(rm-files)
1969
1970
1971 existing-targets := $(wildcard $(sort $(targets)))
1972
1973 -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
1974
1975 endif
1976 endif
1977 endif
1978
1979 PHONY += FORCE
1980 FORCE:
1981
1982
1983
1984 .PHONY: $(PHONY)