On Sun, May 4, 2025 at 2:37 AM Kees Cook <k...@kernel.org> wrote: > > On Sat, May 03, 2025 at 06:39:28PM +0900, Masahiro Yamada wrote: > > On Sat, May 3, 2025 at 7:54 AM Kees Cook <k...@kernel.org> wrote: > > > > > > v2: > > > - switch from -include to -I with a -D gated include compiler-version.h > > > v1: https://lore.kernel.org/lkml/20250501193839.work.525-k...@kernel.org/ > > > > > > What do you think of my patch as a prerequisite? > > https://lore.kernel.org/linux-kbuild/20250503084145.1994176-1-masahi...@kernel.org/T/#u > > Perhaps, can you implement this series more simply? > > > > My idea is to touch a single include/generated/global-rebuild.h > > rather than multiple files such as gcc-plugins-deps.h, integer-wrap.h, etc. > > > > When the file is touched, the entire kernel source tree will be rebuilt. > > This may rebuild more than needed (e.g. vdso) but I do not think > > it is a big deal. > > This is roughly where I started when trying to implement this, but I > didn't like the ergonomics of needing to scatter "touch" calls all over, > which was especially difficult for targets that shared a build rule but > may not all need to trigger a global rebuild. But what ultimately pushed > me away from it was when I needed to notice if a non-built source file > changed (the Clang .scl file), and I saw that I need to be dependency > driven rather than target driven. (Though perhaps there is a way to > address this with your global-rebuild.h?) > > As far as doing a full rebuild, if it had been available last week, I > probably would have used it, but now given the work that Nicolas, you, > and I have put into this, we have a viable way (I think) to make this > more specific. It does end up being a waste of time/resources to rebuild > stuff that doesn't need to be (efi-stub, vdso, boot code, etc), and that > does add up when I'm iterating on something that keeps triggering a full > rebuild. We already have to do the argument filtering for targets that > don't want randstruct, etc, so why not capitalize on that and make the > rebuild avoid those files too?
efi-stub, vdso are very small. Unless this turns out to be painful, I prefer a simpler implementation. You will see how .scl file is handled. See the below code: diff --git a/Kbuild b/Kbuild index f327ca86990c..85747239314c 100644 --- a/Kbuild +++ b/Kbuild @@ -67,10 +67,20 @@ targets += $(atomic-checks) $(atomic-checks): $(obj)/.checked-%: include/linux/atomic/% FORCE $(call if_changed,check_sha1) +rebuild-$(CONFIG_GCC_PLUGINS) += $(addprefix scripts/gcc-plugins/, $(GCC_PLUGIN)) +rebuild-$(CONFIG_RANDSTRUCT) += include/generated/randstruct_hash.h +rebuild-$(CONFIG_UBSAN_INTEGER_WRAP) += scripts/integer-wrap-ignore.scl + +quiet_cmd_touch = TOUCH $@ + cmd_touch = touch $@ + +include/generated/global-rebuild.h: $(rebuild-y) + $(call cmd,touch) + # A phony target that depends on all the preparation targets PHONY += prepare -prepare: $(offsets-file) missing-syscalls $(atomic-checks) +prepare: $(offsets-file) missing-syscalls $(atomic-checks) include/generated/global-rebuild.h @: # Ordinary directory descending diff --git a/Makefile b/Makefile index b29cc321ffd9..f963a72b0761 100644 --- a/Makefile +++ b/Makefile @@ -558,7 +558,8 @@ USERINCLUDE := \ -I$(srctree)/include/uapi \ -I$(objtree)/include/generated/uapi \ -include $(srctree)/include/linux/compiler-version.h \ - -include $(srctree)/include/linux/kconfig.h + -include $(srctree)/include/linux/kconfig.h \ + -include $(objtree)/include/generated/global-rebuild.h # Use LINUXINCLUDE when you must reference the include/ directory. # Needed to be compatible with the O= option @@ -1250,6 +1251,12 @@ endif include/config/kernel.release: FORCE $(call filechk,kernel.release) +quiet_cmd_touch = TOUCH $@ + cmd_touch = touch $@ + +include/generated/global-rebuild.h: + $(call cmd,touch) + # Additional helpers built in scripts/ # Carefully list dependencies so we do not try to build scripts twice # in parallel @@ -1266,6 +1273,7 @@ scripts: scripts_basic scripts_dtc PHONY += prepare archprepare archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \ + include/generated/global-rebuild.h \ asm-generic $(version_h) include/generated/utsrelease.h \ include/generated/compile.h include/generated/autoconf.h \ include/generated/rustc_cfg remove-stale-files diff --git a/arch/um/Makefile b/arch/um/Makefile index 1d36a613aad8..f564a26c1364 100644 --- a/arch/um/Makefile +++ b/arch/um/Makefile @@ -73,7 +73,8 @@ USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -I%,,$(KBUILD_CFLAGS))) \ -D_FILE_OFFSET_BITS=64 -idirafter $(srctree)/include \ -idirafter $(objtree)/include -D__KERNEL__ -D__UM_HOST__ \ -include $(srctree)/include/linux/compiler-version.h \ - -include $(srctree)/include/linux/kconfig.h + -include $(srctree)/include/linux/kconfig.h \ + -include $(objtree)/include/generated/global-rebuild.h #This will adjust *FLAGS accordingly to the platform. include $(srctree)/$(ARCH_DIR)/Makefile-os-Linux -- Best Regards Masahiro Yamada