build: kernel: avoid unnecessary package rebuilds
authorEneas U de Queiroz <cotequeiroz@gmail.com>
Fri, 15 Oct 2021 13:30:05 +0000 (10:30 -0300)
committerFelix Fietkau <nbd@nbd.name>
Mon, 1 Nov 2021 19:18:55 +0000 (20:18 +0100)
The $(LINUX_DIR)/.config timesptamp changes between runs of
make target/compile and make target/install (which builds the image).

Kernel-dependent packages and out of tree modules are built in between
those runs, and they check the .config timestamp to decide if they need
to be rebuilt.

Save the target/compile .config to use its timestamp if the file does
not change between runs.  That way the subsequent kernel packages are
not unnecessarily rebuilt when you run 'make' back to back.

Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
include/kernel-defaults.mk

index f2864d6a10ff102d93225d8b14d74c34479ee856..77a612dbe1b88e6256cdf89386557c6907b9f7db 100644 (file)
@@ -128,6 +128,10 @@ endef
 define Kernel/CompileModules/Default
        rm -f $(LINUX_DIR)/vmlinux $(LINUX_DIR)/System.map
        +$(KERNEL_MAKE) $(if $(KERNELNAME),$(KERNELNAME),all) modules
+       # If .config did not change, use the previous timestamp to avoid package rebuilds
+       cmp -s $(LINUX_DIR)/.config $(LINUX_DIR)/.config.modules.save && \
+               mv $(LINUX_DIR)/.config.modules.save $(LINUX_DIR)/.config; \
+       $(CP) $(LINUX_DIR)/.config $(LINUX_DIR)/.config.modules.save
 endef
 
 OBJCOPY_STRIP = -R .reginfo -R .notes -R .note -R .comment -R .mdebug -R .note.gnu.build-id