• L
    Merge tag 'kbuild-v4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild · 09bd7c75
    Linus Torvalds 提交于
    Pull Kbuild updates from Masahiro Yamada:
     "One of the most remarkable improvements in this cycle is, Kbuild is
      now able to cache the result of shell commands. Some variables are
      expensive to compute, for example, $(call cc-option,...) invokes the
      compiler. It is not efficient to redo this computation every time,
      even when we are not actually building anything. Kbuild creates a
      hidden file ".cache.mk" that contains invoked shell commands and their
      results. The speed-up should be noticeable.
    
      Summary:
    
       - Fix arch build issues (hexagon, sh)
    
       - Clean up various Makefiles and scripts
    
       - Fix wrong usage of {CFLAGS,LDFLAGS}_MODULE in arch Makefiles
    
       - Cache variables that are expensive to compute
    
       - Improve cc-ldopton and ld-option for Clang
    
       - Optimize output directory creation"
    
    * tag 'kbuild-v4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (30 commits)
      kbuild: move coccicheck help from scripts/Makefile.help to top Makefile
      sh: decompressor: add shipped files to .gitignore
      frv: .gitignore: ignore vmlinux.lds
      selinux: remove unnecessary assignment to subdir-
      kbuild: specify FORCE in Makefile.headersinst as .PHONY target
      kbuild: remove redundant mkdir from ./Kbuild
      kbuild: optimize object directory creation for incremental build
      kbuild: create object directories simpler and faster
      kbuild: filter-out PHONY targets from "targets"
      kbuild: remove redundant $(wildcard ...) for cmd_files calculation
      kbuild: create directory for make cache only when necessary
      sh: select KBUILD_DEFCONFIG depending on ARCH
      kbuild: fix linker feature test macros when cross compiling with Clang
      kbuild: shrink .cache.mk when it exceeds 1000 lines
      kbuild: do not call cc-option before KBUILD_CFLAGS initialization
      kbuild: Cache a few more calls to the compiler
      kbuild: Add a cache for generated variables
      kbuild: add forward declaration of default target to Makefile.asm-generic
      kbuild: remove KBUILD_SUBDIR_ASFLAGS and KBUILD_SUBDIR_CCFLAGS
      hexagon/kbuild: replace CFLAGS_MODULE with KBUILD_CFLAGS_MODULE
      ...
    09bd7c75
Kbuild 2.2 KB
# SPDX-License-Identifier: GPL-2.0
#
# Kbuild for top-level directory of the kernel
# This file takes care of the following:
# 1) Generate bounds.h
# 2) Generate timeconst.h
# 3) Generate asm-offsets.h (may need bounds.h and timeconst.h)
# 4) Check for missing system calls
# 5) Generate constants.py (may need bounds.h)

#####
# 1) Generate bounds.h

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

always  := $(bounds-file)
targets := kernel/bounds.s

# We use internal kbuild rules to avoid the "is up to date" message from make
kernel/bounds.s: kernel/bounds.c FORCE
	$(call if_changed_dep,cc_s_c)

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

#####
# 2) Generate timeconst.h

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

targets += $(timeconst-file)

quiet_cmd_gentimeconst = GEN     $@
define cmd_gentimeconst
	(echo $(CONFIG_HZ) | bc -q $< ) > $@
endef
define filechk_gentimeconst
	(echo $(CONFIG_HZ) | bc -q $< )
endef

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

#####
# 3) Generate asm-offsets.h
#

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

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

# We use internal kbuild rules to avoid the "is up to date" message from make
arch/$(SRCARCH)/kernel/asm-offsets.s: arch/$(SRCARCH)/kernel/asm-offsets.c \
                                      $(obj)/$(timeconst-file) $(obj)/$(bounds-file) FORCE
	$(call if_changed_dep,cc_s_c)

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

#####
# 4) Check for missing system calls
#

always += missing-syscalls
targets += missing-syscalls

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

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

#####
# 5) Generate constants for Python GDB integration
#

extra-$(CONFIG_GDB_SCRIPTS) += build_constants_py

build_constants_py: $(obj)/$(timeconst-file) $(obj)/$(bounds-file)
	@$(MAKE) $(build)=scripts/gdb/linux $@

# Keep these three files during make clean
no-clean-files := $(bounds-file) $(offsets-file) $(timeconst-file)
反馈
建议
客服 返回
顶部