Currently, checksyscalls.sh and check-atomics.sh are executed unconditionally. Most developers will not modify the files being checked by those scripts and thus do not need to execute these again for each iterative make. Change Kbuild target so that those two scripts get executed only if the prerequisite are modified. In order to implement this we: 1. use the if_change macro instead of cmd. c.f. [1] 2. create two dot files: scripts/.checksyscalls and scripts/atomic/.check-atomics to keep track of whether the script were already executed or not. Otherwise, the prerequisite would always be considered as newer than the target (c.f. output "due to target missing" of make V=2). 3. modify the CLEAN_FILES target of the root Makefile to removed the two temporary dot files created in 2. We also added an additional dependency to include/linux/atomic/* for check-atomics.sh to make sure that the script gets executed again if the header are modified. check-atomics.sh already has a dependency toward include/generated/asm-offsets.h and so no additional dependencies were added. [1] https://www.kernel.org/doc/html/latest/kbuild/makefiles.html#command-change-detection Signed-off-by: Vincent Mailhol <mailhol.vincent@xxxxxxxxxx> --- Sending this as RFC because I am not an expert of Kbuild. The use of the dot files was my best shot at tackling this issue. Maybe there is a smarter way which I just missed? If I receive no comments for the next two weeks, I will resend this patch without the RFC tag. --- Kbuild | 14 ++++++++------ Makefile | 3 ++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Kbuild b/Kbuild index fa441b98c9f6..d579f4971aa3 100644 --- a/Kbuild +++ b/Kbuild @@ -39,21 +39,23 @@ $(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE ##### # Check for missing system calls -always-y += missing-syscalls +always-y += scripts/.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) +scripts/.missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE + $(call if_changed,syscalls) + @touch $@ ##### # Check atomic headers are up-to-date -always-y += old-atomics +always-y += scripts/atomic/.old-atomics quiet_cmd_atomics = CALL $< cmd_atomics = $(CONFIG_SHELL) $< -old-atomics: scripts/atomic/check-atomics.sh FORCE - $(call cmd,atomics) +scripts/atomic/.old-atomics: scripts/atomic/check-atomics.sh $(wildcard include/linux/atomic/*) FORCE + $(call if_changed,atomics) + @touch $@ diff --git a/Makefile b/Makefile index fa5112a0ec1b..b18af9d4248a 100644 --- a/Makefile +++ b/Makefile @@ -1483,7 +1483,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 + compile_commands.json .thinlto-cache \ + scripts/.missing-syscalls scripts/atomic/.old-atomics # Directories & files removed with 'make mrproper' MRPROPER_FILES += include/config include/generated \ -- 2.35.1