diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2022-10-10 12:00:45 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2022-10-10 12:00:45 -0700 | 
| commit | 8afc66e8d43be8edcf442165b70d50dd33091e68 (patch) | |
| tree | 7e39a0a1f32b0d46acdac06c6ec515402ac9f583 /Makefile | |
| parent | 4de65c5830233e7a4adf2e679510089ec4e210c7 (diff) | |
| parent | 0715fdb03e2c4f5748d245a231e422602ed29f33 (diff) | |
| download | linux-8afc66e8d43be8edcf442165b70d50dd33091e68.tar.bz2 | |
Merge tag 'kbuild-v6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
Pull Kbuild updates from Masahiro Yamada:
 - Remove potentially incomplete targets when Kbuid is interrupted by
   SIGINT etc in case GNU Make may miss to do that when stderr is piped
   to another program.
 - Rewrite the single target build so it works more correctly.
 - Fix rpm-pkg builds with V=1.
 - List top-level subdirectories in ./Kbuild.
 - Ignore auto-generated __kstrtab_* and __kstrtabns_* symbols in
   kallsyms.
 - Avoid two different modules in lib/zstd/ having shared code, which
   potentially causes building the common code as build-in and modular
   back-and-forth.
 - Unify two modpost invocations to optimize the build process.
 - Remove head-y syntax in favor of linker scripts for placing
   particular sections in the head of vmlinux.
 - Bump the minimal GNU Make version to 3.82.
 - Clean up misc Makefiles and scripts.
* tag 'kbuild-v6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (41 commits)
  docs: bump minimal GNU Make version to 3.82
  ia64: simplify esi object addition in Makefile
  Revert "kbuild: Check if linker supports the -X option"
  kbuild: rebuild .vmlinux.export.o when its prerequisite is updated
  kbuild: move modules.builtin(.modinfo) rules to Makefile.vmlinux_o
  zstd: Fixing mixed module-builtin objects
  kallsyms: ignore __kstrtab_* and __kstrtabns_* symbols
  kallsyms: take the input file instead of reading stdin
  kallsyms: drop duplicated ignore patterns from kallsyms.c
  kbuild: reuse mksysmap output for kallsyms
  mksysmap: update comment about __crc_*
  kbuild: remove head-y syntax
  kbuild: use obj-y instead extra-y for objects placed at the head
  kbuild: hide error checker logs for V=1 builds
  kbuild: re-run modpost when it is updated
  kbuild: unify two modpost invocations
  kbuild: move vmlinux.o rule to the top Makefile
  kbuild: move .vmlinux.objs rule to Makefile.modpost
  kbuild: list sub-directories in ./Kbuild
  Makefile.compiler: replace cc-ifversion with compiler-specific macros
  ...
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 184 | 
1 files changed, 86 insertions, 98 deletions
| @@ -538,7 +538,7 @@ LDFLAGS_MODULE  =  CFLAGS_KERNEL	=  RUSTFLAGS_KERNEL =  AFLAGS_KERNEL	= -LDFLAGS_vmlinux = +export LDFLAGS_vmlinux =  # Use USERINCLUDE when you must reference the UAPI directories only.  USERINCLUDE    := \ @@ -648,7 +648,7 @@ quiet_cmd_makefile = GEN     Makefile  	} > Makefile  outputmakefile: -	$(Q)if [ -f $(srctree)/.config -o \ +	@if [ -f $(srctree)/.config -o \  		 -d $(srctree)/include/config -o \  		 -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \  		echo >&2 "***"; \ @@ -710,6 +710,8 @@ else  __all: modules  endif +targets := +  # Decide whether to build built-in, modular, or both.  # Normally, just do built-in. @@ -741,11 +743,8 @@ endif  ifeq ($(KBUILD_EXTMOD),)  # Objects we will link into vmlinux / subdirs we need to visit -core-y		:= init/ usr/ arch/$(SRCARCH)/ -drivers-y	:= drivers/ sound/ -drivers-$(CONFIG_SAMPLES) += samples/ -drivers-$(CONFIG_NET) += net/ -drivers-y	+= virt/ +core-y		:= +drivers-y	:=  libs-y		:= lib/  endif # KBUILD_EXTMOD @@ -804,7 +803,7 @@ else # !may-sync-config  PHONY += include/config/auto.conf  include/config/auto.conf: -	$(Q)test -e include/generated/autoconf.h -a -e $@ || (		\ +	@test -e include/generated/autoconf.h -a -e $@ || (		\  	echo >&2;							\  	echo >&2 "  ERROR: Kernel configuration is invalid.";		\  	echo >&2 "         include/generated/autoconf.h or $@ are missing.";\ @@ -862,7 +861,6 @@ KBUILD_CFLAGS += $(stackp-flags-y)  KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror  KBUILD_CFLAGS-$(CONFIG_CC_NO_ARRAY_BOUNDS) += -Wno-array-bounds -KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)  KBUILD_RUSTFLAGS-$(CONFIG_WERROR) += -Dwarnings  KBUILD_RUSTFLAGS += $(KBUILD_RUSTFLAGS-y) @@ -1041,7 +1039,6 @@ ifdef CONFIG_CC_IS_GCC  KBUILD_CFLAGS += -Wno-maybe-uninitialized  endif -ifdef CONFIG_CC_IS_GCC  # The allocators already balk at large sizes, so silence the compiler  # warnings for bounds checks involving those possible values. While  # -Wno-alloc-size-larger-than would normally be used here, earlier versions @@ -1053,8 +1050,8 @@ ifdef CONFIG_CC_IS_GCC  # ignored, continuing to default to PTRDIFF_MAX. So, left with no other  # choice, we must perform a versioned check to disable this warning.  # https://lore.kernel.org/lkml/20210824115859.187f272f@canb.auug.org.au -KBUILD_CFLAGS += $(call cc-ifversion, -ge, 0901, -Wno-alloc-size-larger-than) -endif +KBUILD_CFLAGS-$(call gcc-min-version, 90100) += -Wno-alloc-size-larger-than +KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)  # disable invalid "can't wrap" optimizations for signed / pointers  KBUILD_CFLAGS	+= -fno-strict-overflow @@ -1110,7 +1107,7 @@ KBUILD_LDFLAGS	+= $(call ld-option,--no-warn-rwx-segments)  endif  ifeq ($(CONFIG_STRIP_ASM_SYMS),y) -LDFLAGS_vmlinux	+= $(call ld-option, -X,) +LDFLAGS_vmlinux	+= -X  endif  ifeq ($(CONFIG_RELR),y) @@ -1171,41 +1168,27 @@ export MODORDER := $(extmod_prefix)modules.order  export MODULES_NSDEPS := $(extmod_prefix)modules.nsdeps  ifeq ($(KBUILD_EXTMOD),) -core-y			+= kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ -core-$(CONFIG_BLOCK)	+= block/ -core-$(CONFIG_IO_URING)	+= io_uring/ -core-$(CONFIG_RUST)	+= rust/ -vmlinux-dirs	:= $(patsubst %/,%,$(filter %/, \ -		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \ -		     $(libs-y) $(libs-m))) - -vmlinux-alldirs	:= $(sort $(vmlinux-dirs) Documentation \ +build-dir	:= . +clean-dirs	:= $(sort . Documentation \  		     $(patsubst %/,%,$(filter %/, $(core-) \  			$(drivers-) $(libs-)))) -build-dirs	:= $(vmlinux-dirs) -clean-dirs	:= $(vmlinux-alldirs) - -subdir-modorder := $(addsuffix /modules.order, $(build-dirs)) - +export ARCH_CORE	:= $(core-y) +export ARCH_LIB		:= $(filter %/, $(libs-y)) +export ARCH_DRIVERS	:= $(drivers-y) $(drivers-m)  # Externally visible symbols (used by link-vmlinux.sh) -KBUILD_VMLINUX_OBJS := $(head-y) $(patsubst %/,%/built-in.a, $(core-y)) -KBUILD_VMLINUX_OBJS += $(addsuffix built-in.a, $(filter %/, $(libs-y))) + +KBUILD_VMLINUX_OBJS := ./built-in.a  ifdef CONFIG_MODULES  KBUILD_VMLINUX_OBJS += $(patsubst %/, %/lib.a, $(filter %/, $(libs-y)))  KBUILD_VMLINUX_LIBS := $(filter-out %/, $(libs-y))  else  KBUILD_VMLINUX_LIBS := $(patsubst %/,%/lib.a, $(libs-y))  endif -KBUILD_VMLINUX_OBJS += $(patsubst %/,%/built-in.a, $(drivers-y)) -export KBUILD_VMLINUX_OBJS KBUILD_VMLINUX_LIBS +export KBUILD_VMLINUX_LIBS  export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds -# used by scripts/Makefile.package -export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools) - -vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)  # Recurse until adjust_autoksyms.sh is satisfied  PHONY += autoksyms_recursive @@ -1215,7 +1198,7 @@ ifdef CONFIG_TRIM_UNUSED_KSYMS  # (this can be evaluated only once include/config/auto.conf has been included)  KBUILD_MODULES := 1 -autoksyms_recursive: descend modules.order +autoksyms_recursive: $(build-dir) modules.order  	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \  	  "$(MAKE) -f $(srctree)/Makefile autoksyms_recursive"  endif @@ -1229,21 +1212,31 @@ quiet_cmd_autoksyms_h = GEN     $@  $(autoksyms_h):  	$(call cmd,autoksyms_h) -ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) +# '$(AR) mPi' needs 'T' to workaround the bug of llvm-ar <= 14 +quiet_cmd_ar_vmlinux.a = AR      $@ +      cmd_ar_vmlinux.a = \ +	rm -f $@; \ +	$(AR) cDPrST $@ $(KBUILD_VMLINUX_OBJS); \ +	$(AR) mPiT $$($(AR) t $@ | head -n1) $@ $$($(AR) t $@ | grep -F --file=$(srctree)/scripts/head-object-list.txt) -# Final link of vmlinux with optional arch pass after final link -cmd_link-vmlinux =                                                 \ -	$(CONFIG_SHELL) $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)";    \ -	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) +targets += vmlinux.a +vmlinux.a: $(KBUILD_VMLINUX_OBJS) scripts/head-object-list.txt autoksyms_recursive FORCE +	$(call if_changed,ar_vmlinux.a) -vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE -	+$(call if_changed_dep,link-vmlinux) +PHONY += vmlinux_o +vmlinux_o: vmlinux.a $(KBUILD_VMLINUX_LIBS) +	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.vmlinux_o -targets := vmlinux +vmlinux.o modules.builtin.modinfo modules.builtin: vmlinux_o +	@: + +PHONY += vmlinux +vmlinux: vmlinux.o $(KBUILD_LDS) modpost +	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.vmlinux  # The actual objects are generated when descending,  # make sure no implicit rule kicks in -$(sort $(vmlinux-deps) $(subdir-modorder)): descend ; +$(sort $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)): . ;  filechk_kernel.release = \  	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))" @@ -1269,11 +1262,11 @@ PHONY += prepare archprepare  archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \  	asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h \ -	include/generated/autoconf.h remove-stale-files +	include/generated/compile.h include/generated/autoconf.h remove-stale-files  prepare0: archprepare  	$(Q)$(MAKE) $(build)=scripts/mod -	$(Q)$(MAKE) $(build)=. +	$(Q)$(MAKE) $(build)=. prepare  # All the preparing..  prepare: prepare0 @@ -1335,6 +1328,12 @@ $(version_h): FORCE  include/generated/utsrelease.h: include/config/kernel.release FORCE  	$(call filechk,utsrelease.h) +filechk_compile.h = $(srctree)/scripts/mkcompile_h \ +	"$(UTS_MACHINE)" "$(CONFIG_CC_VERSION_TEXT)" "$(LD)" + +include/generated/compile.h: FORCE +	$(call filechk,compile.h) +  PHONY += headerdep  headerdep:  	$(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \ @@ -1509,22 +1508,16 @@ endif  # Build modules  # -# A module can be listed more than once in obj-m resulting in -# duplicate lines in modules.order files.  Those are removed -# using awk while concatenating to the final file. - -PHONY += modules -modules: $(if $(KBUILD_BUILTIN),vmlinux) modules_check modules_prepare -cmd_modules_order = $(AWK) '!x[$$0]++' $(real-prereqs) > $@ - -modules.order: $(subdir-modorder) FORCE -	$(call if_changed,modules_order) +# *.ko are usually independent of vmlinux, but CONFIG_DEBUG_INFOBTF_MODULES +# is an exception. +ifdef CONFIG_DEBUG_INFO_BTF_MODULES +modules: vmlinux +endif -targets += modules.order +modules: modules_prepare  # Target to prepare building external modules -PHONY += modules_prepare  modules_prepare: prepare  	$(Q)$(MAKE) $(build)=scripts scripts/module.lds @@ -1574,7 +1567,8 @@ endif # CONFIG_MODULES  # Directories & files removed with 'make clean'  CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \  	       modules.builtin modules.builtin.modinfo modules.nsdeps \ -	       compile_commands.json .thinlto-cache rust/test rust/doc +	       compile_commands.json .thinlto-cache rust/test rust/doc \ +	       .vmlinux.objs .vmlinux.export.c  # Directories & files removed with 'make mrproper'  MRPROPER_FILES += include/config include/generated          \ @@ -1862,9 +1856,7 @@ else # KBUILD_EXTMOD  KBUILD_BUILTIN :=  KBUILD_MODULES := 1 -build-dirs := $(KBUILD_EXTMOD) -$(MODORDER): descend -	@: +build-dir := $(KBUILD_EXTMOD)  compile_commands.json: $(extmod_prefix)compile_commands.json  PHONY += compile_commands.json @@ -1893,20 +1885,24 @@ help:  	@echo  '  clean           - remove generated files in module directory only'  	@echo  '' -# no-op for external module builds -PHONY += modules_prepare -  endif # KBUILD_EXTMOD  # ---------------------------------------------------------------------------  # Modules -PHONY += modules modules_install +PHONY += modules modules_install modules_prepare  ifdef CONFIG_MODULES -modules: modules_check -	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost +$(MODORDER): $(build-dir) +	@: + +# KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules. +# This is solely useful to speed up test compiles. +modules: modpost +ifneq ($(KBUILD_MODPOST_NOFINAL),1) +	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modfinal +endif  PHONY += modules_check  modules_check: $(MODORDER) @@ -1933,8 +1929,15 @@ modules modules_install:  	@echo >&2 '***'  	@exit 1 +KBUILD_MODULES := +  endif # CONFIG_MODULES +PHONY += modpost +modpost: $(if $(single-build),, $(if $(KBUILD_BUILTIN), vmlinux.o)) \ +	 $(if $(KBUILD_MODULES), modules_check) +	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost +  # Single targets  # ---------------------------------------------------------------------------  # To build individual files in subdirectories, you can do like this: @@ -1954,47 +1957,32 @@ single-ko := $(sort $(filter %.ko, $(MAKECMDGOALS)))  single-no-ko := $(filter-out $(single-ko), $(MAKECMDGOALS)) \  		$(foreach x, o mod, $(patsubst %.ko, %.$x, $(single-ko))) -$(single-ko): single_modpost +$(single-ko): single_modules  	@: -$(single-no-ko): descend +$(single-no-ko): $(build-dir)  	@: -ifeq ($(KBUILD_EXTMOD),) -# For the single build of in-tree modules, use a temporary file to avoid -# the situation of modules_install installing an invalid modules.order. -MODORDER := .modules.tmp -endif - -PHONY += single_modpost -single_modpost: $(single-no-ko) modules_prepare +# Remove MODORDER when done because it is not the real one. +PHONY += single_modules +single_modules: $(single-no-ko) modules_prepare  	$(Q){ $(foreach m, $(single-ko), echo $(extmod_prefix)$m;) } > $(MODORDER)  	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost - -KBUILD_MODULES := 1 - -export KBUILD_SINGLE_TARGETS := $(addprefix $(extmod_prefix), $(single-no-ko)) - -# trim unrelated directories -build-dirs := $(foreach d, $(build-dirs), \ -			$(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d))) - +ifneq ($(KBUILD_MODPOST_NOFINAL),1) +	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modfinal  endif +	$(Q)rm -f $(MODORDER) + +single-goals := $(addprefix $(build-dir)/, $(single-no-ko)) -ifndef CONFIG_MODULES -KBUILD_MODULES :=  endif -# Handle descending into subdirectories listed in $(build-dirs)  # Preset locale variables to speed up the build process. Limit locale  # tweaks to this spot to avoid wrong language settings when running  # make menuconfig etc.  # Error messages still appears in the original language -PHONY += descend $(build-dirs) -descend: $(build-dirs) -$(build-dirs): prepare -	$(Q)$(MAKE) $(build)=$@ \ -	single-build=$(if $(filter-out $@/, $(filter $@/%, $(KBUILD_SINGLE_TARGETS))),1) \ -	need-builtin=1 need-modorder=1 +PHONY += $(build-dir) +$(build-dir): prepare +	$(Q)$(MAKE) $(build)=$@ need-builtin=1 need-modorder=1 $(single-goals)  clean-dirs := $(addprefix _clean_, $(clean-dirs))  PHONY += $(clean-dirs) clean @@ -2042,7 +2030,7 @@ quiet_cmd_gen_compile_commands = GEN     $@        cmd_gen_compile_commands = $(PYTHON3) $< -a $(AR) -o $@ $(filter-out $<, $(real-prereqs))  $(extmod_prefix)compile_commands.json: scripts/clang-tools/gen_compile_commands.py \ -	$(if $(KBUILD_EXTMOD),,$(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)) \ +	$(if $(KBUILD_EXTMOD),, vmlinux.a $(KBUILD_VMLINUX_LIBS)) \  	$(if $(CONFIG_MODULES), $(MODORDER)) FORCE  	$(call if_changed,gen_compile_commands) |