Skip to content

Commit

Permalink
kbuild: call checksyscalls.sh and check-atomics.sh only if prerequisi…
Browse files Browse the repository at this point in the history
…tes change

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@wanadoo.fr>
  • Loading branch information
vincent-mailhol authored and intel-lab-lkp committed Apr 26, 2022
1 parent 7c39c50 commit 3cc91cf
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
14 changes: 8 additions & 6 deletions Kbuild
Expand Up @@ -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 $@
3 changes: 2 additions & 1 deletion Makefile
Expand Up @@ -1484,7 +1484,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 \
Expand Down

0 comments on commit 3cc91cf

Please sign in to comment.