Skip to content
Snippets Groups Projects
  • Linus Torvalds's avatar
    Merge tag 'kbuild-v6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild · 8afc66e8
    Linus Torvalds authored
    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
      ...
    8afc66e8
Kbuild 2.51 KiB
# SPDX-License-Identifier: GPL-2.0
#
# Kbuild for top-level directory of the kernel

# Prepare global headers and check sanity before descending into sub-directories
# ---------------------------------------------------------------------------

# Generate bounds.h

bounds-file := include/generated/bounds.h

targets := kernel/bounds.s

$(bounds-file): kernel/bounds.s FORCE
	$(call filechk,offsets,__LINUX_BOUNDS_H__)

# Generate timeconst.h

timeconst-file := include/generated/timeconst.h

filechk_gentimeconst = echo $(CONFIG_HZ) | bc -q $<

$(timeconst-file): kernel/time/timeconst.bc FORCE
	$(call filechk,gentimeconst)

# Generate asm-offsets.h

offsets-file := include/generated/asm-offsets.h

targets += arch/$(SRCARCH)/kernel/asm-offsets.s

arch/$(SRCARCH)/kernel/asm-offsets.s: $(timeconst-file) $(bounds-file)

$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE
	$(call filechk,offsets,__ASM_OFFSETS_H__)

# Check for missing system calls

quiet_cmd_syscalls = CALL    $<
      cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags)

PHONY += missing-syscalls
missing-syscalls: scripts/checksyscalls.sh $(offsets-file)
	$(call cmd,syscalls)

# Check the manual modification of atomic headers

quiet_cmd_check_sha1 = CHKSHA1 $<
      cmd_check_sha1 = \
	if ! command -v sha1sum >/dev/null; then \
		echo "warning: cannot check the header due to sha1sum missing"; \
		exit 0; \
	fi; \
	if [ "$$(sed -n '$$s:// ::p' $<)" != \
	     "$$(sed '$$d' $< | sha1sum | sed 's/ .*//')" ]; then \
		echo "error: $< has been modified." >&2; \
		exit 1; \
	fi; \
	touch $@

atomic-checks += $(addprefix $(obj)/.checked-, \
	  atomic-arch-fallback.h \
	  atomic-instrumented.h \
	  atomic-long.h)

targets += $(atomic-checks)
$(atomic-checks): $(obj)/.checked-%: include/linux/atomic/%  FORCE
	$(call if_changed,check_sha1)

# A phony target that depends on all the preparation targets

PHONY += prepare
prepare: $(offsets-file) missing-syscalls $(atomic-checks)
	@:

# Ordinary directory descending
# ---------------------------------------------------------------------------

obj-y			+= init/
obj-y			+= usr/
obj-y			+= arch/$(SRCARCH)/
obj-y			+= $(ARCH_CORE)
obj-y			+= kernel/
obj-y			+= certs/
obj-y			+= mm/
obj-y			+= fs/
obj-y			+= ipc/
obj-y			+= security/
obj-y			+= crypto/
obj-$(CONFIG_BLOCK)	+= block/
obj-$(CONFIG_IO_URING)	+= io_uring/
obj-$(CONFIG_RUST)	+= rust/
obj-y			+= $(ARCH_LIB)
obj-y			+= drivers/
obj-y			+= sound/
obj-$(CONFIG_SAMPLES)	+= samples/
obj-$(CONFIG_NET)	+= net/
obj-y			+= virt/
obj-y			+= $(ARCH_DRIVERS)