Several people reported that the commit 3298b690b21c ("kbuild: Add a cache for generated variables") caused them problems when they updated gcc versions. Specifically the reports all looked something similar to this: > In file included from ./include/uapi/linux/uuid.h:21:0, > from ./include/linux/uuid.h:19, > from ./include/linux/mod_devicetable.h:12, > from scripts/mod/devicetable-offsets.c:2: > ./include/linux/string.h:8:20: fatal error: stdarg.h: No such file or > directory > #include <stdarg.h> Masahiro Yamada determined that the problem was with: NOSTDINC_FLAGS += -nostdinc -isystem $(call shell-cached,$(CC) -print-file-name=include) Specifically that the stale result of -print-file-name is stored in the cache file. It was determined that a "make clean" fixed the problems in all cases. In this particular case we could certainly try to clean just the cache when we detect a gcc update, but it seems like overall it's a bad idea to do an incremental build when gcc changes. We should warn the user and tell them that they need a 'make clean'. Fixes: 3298b690b21c ("kbuild: Add a cache for generated variables") Reported-by: Yang Shi <yang.s@xxxxxxxxxxxxxxx> Reported-by: Dave Hansen <dave.hansen@xxxxxxxxx> Reported-by: Mathieu Malaterre <malat@xxxxxxxxxx> Signed-off-by: Douglas Anderson <dianders@xxxxxxxxxxxx> --- Changes in v3: - Fix as per Masahiro Yamada (move change to main Makefile) Changes in v2: - Don't error if MAKECMDGOALS is blank. Makefile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Makefile b/Makefile index c4322dea3ca2..f1e61470640b 100644 --- a/Makefile +++ b/Makefile @@ -573,6 +573,15 @@ virt-y := virt/ endif # KBUILD_EXTMOD ifeq ($(dot-config),1) +# Require a 'make clean' if the compiler changed; not only does the .cache.mk +# need to be thrown out but we should also start with fresh object files. +cc-fullversion-uncached := \ + $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh -p $(CC)) + +ifneq ($(cc-fullversion-uncached),$(cc-fullversion)) + $(error Detected new CC version ($(cc-fullversion-uncached) vs $(cc-fullversion)). Please 'make clean') +endif + # Read in config -include include/config/auto.conf -- 2.16.2.660.g709887971b-goog -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html