UPSTREAM: kbuild: ensure full rebuild when the compiler is updated
Commit21c54b7747("kconfig: show compiler version text in the top comment") added the environment variable, CC_VERSION_TEXT in the comment of the top Kconfig file. It can detect the compiler update, and invoke the syncconfig because all environment variables referenced in Kconfig files are recorded in include/config/auto.conf.cmd This commit makes it a CONFIG option in order to ensure the full rebuild when the compiler is updated. This works like follows: include/config/kconfig.h contains "CONFIG_CC_VERSION_TEXT" in the comment block. The top Makefile specifies "-include $(srctree)/include/linux/kconfig.h" to guarantee it is included from all kernel source files. fixdep parses every source file and all headers included from it, searching for words prefixed with "CONFIG_". Then, fixdep finds CONFIG_CC_VERSION_TEXT in include/config/kconfig.h and adds include/config/cc/version/text.h into every .*.cmd file. When the compiler is updated, syncconfig is invoked because init/Kconfig contains the reference to the environment variable CC_VERTION_TEXT. CONFIG_CC_VERSION_TEXT is updated to the new version string, and include/config/cc/version/text.h is touched. In the next rebuild, Make will rebuild every files since the timestamp of include/config/cc/version/text.h is newer than that of target. Bug: 168274246 Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> (cherry picked from commit8b59cd81dc) Signed-off-by: Mars Lin <marslin@google.com> Change-Id: Ie52bb8e33b95d0e97998024d28c0d8d7caf8aa59
This commit is contained in:
committed by
Mars Lin
parent
3a95b9057a
commit
eed9382d52
2
Kconfig
2
Kconfig
@@ -5,8 +5,6 @@
|
|||||||
#
|
#
|
||||||
mainmenu "Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration"
|
mainmenu "Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration"
|
||||||
|
|
||||||
comment "Compiler: $(CC_VERSION_TEXT)"
|
|
||||||
|
|
||||||
source "scripts/Kconfig.include"
|
source "scripts/Kconfig.include"
|
||||||
|
|
||||||
source "init/Kconfig"
|
source "init/Kconfig"
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
#ifndef __LINUX_KCONFIG_H
|
#ifndef __LINUX_KCONFIG_H
|
||||||
#define __LINUX_KCONFIG_H
|
#define __LINUX_KCONFIG_H
|
||||||
|
|
||||||
|
/* CONFIG_CC_VERSION_TEXT (Do not delete this comment. See help in Kconfig) */
|
||||||
|
|
||||||
#include <generated/autoconf.h>
|
#include <generated/autoconf.h>
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_BIG_ENDIAN
|
#ifdef CONFIG_CPU_BIG_ENDIAN
|
||||||
|
|||||||
17
init/Kconfig
17
init/Kconfig
@@ -9,6 +9,23 @@ config DEFCONFIG_LIST
|
|||||||
default ARCH_DEFCONFIG
|
default ARCH_DEFCONFIG
|
||||||
default "arch/$(ARCH)/defconfig"
|
default "arch/$(ARCH)/defconfig"
|
||||||
|
|
||||||
|
config CC_VERSION_TEXT
|
||||||
|
string
|
||||||
|
default "$(CC_VERSION_TEXT)"
|
||||||
|
help
|
||||||
|
This is used in unclear ways:
|
||||||
|
|
||||||
|
- Re-run Kconfig when the compiler is updated
|
||||||
|
The 'default' property references the environment variable,
|
||||||
|
CC_VERSION_TEXT so it is recorded in include/config/auto.conf.cmd.
|
||||||
|
When the compiler is updated, Kconfig will be invoked.
|
||||||
|
|
||||||
|
- Ensure full rebuild when the compier is updated
|
||||||
|
include/linux/kconfig.h contains this option in the comment line so
|
||||||
|
fixdep adds include/config/cc/version/text.h into the auto-generated
|
||||||
|
dependency. When the compiler is updated, syncconfig will touch it
|
||||||
|
and then every file will be rebuilt.
|
||||||
|
|
||||||
config CC_IS_GCC
|
config CC_IS_GCC
|
||||||
def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc)
|
def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user