From patchwork Tue Apr 21 12:48:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 11501251 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 00500913 for ; Tue, 21 Apr 2020 12:48:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DD48A2064A for ; Tue, 21 Apr 2020 12:48:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587473329; bh=LNZcHtjoWqylzeMnuv6UArID5puekmZyNjD3Fj7p+VQ=; h=From:To:Cc:Subject:Date:List-ID:From; b=oCoNei2QcjLYKoA+JrlJ8IiOix39B+AGTnvbIIi7bUOsY3ilqJIxsuHM1diPAQ5NX FBbazg5pRoNbGzYGCMmVxK/0BQycQ1uaY20cgvYszpP7Ah6xQhowVHYBxADfCWyIhT OKGRrbbXpC1wlkO4puJbmR0A2/YX9/ZybIFtVGsU= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728818AbgDUMso (ORCPT ); Tue, 21 Apr 2020 08:48:44 -0400 Received: from conuserg-07.nifty.com ([210.131.2.74]:38132 "EHLO conuserg-07.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728337AbgDUMsn (ORCPT ); Tue, 21 Apr 2020 08:48:43 -0400 Received: from oscar.flets-west.jp (softbank126090202047.bbtec.net [126.90.202.47]) (authenticated) by conuserg-07.nifty.com with ESMTP id 03LCm57O000731; Tue, 21 Apr 2020 21:48:05 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-07.nifty.com 03LCm57O000731 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1587473286; bh=0/WpwSdCDKFUy0QKnGd6kunc4ELKUfh3X/2O2KfXcik=; h=From:To:Cc:Subject:Date:From; b=RL9nsiO4FrpIlW/nZa2iozlGbn/MGfbQQvdA/in0erxhDE1sHMq9u29kCaj2yzj7G CFVwYILcLjEIcX1d3sKeZRZwQ7QXtPG13q7lRmMt0T4K7jvzfnDpufkd4YshbBT3iU izoMI7ruK78C+6NBDTEDSwLDybg+B8fT5VxYiVPU1Cu4qq+bZMmj8ImNDuY+z7QDCb KmdjjAnKSStJM7exoa2ED1enuMAgRVJJiSuKewXJjxj2u8ii4djh/oXJEXdh73Ofuw Ow18/FvHXtYNhtfawrcKc87Rfz7s61SA6uWHcHLUEW4t21fEfLyuF9Kri9RQCANfwI vQqSH7fWX0Giw== X-Nifty-SrcIP: [126.90.202.47] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Masahiro Yamada , linux-kernel@vger.kernel.org Subject: [PATCH 1/2] kbuild: ensure full rebuild when the compiler is updated Date: Tue, 21 Apr 2020 21:48:03 +0900 Message-Id: <20200421124804.1272909-1-masahiroy@kernel.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org Commit 21c54b774744 ("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 as 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 since the environment variable is referenced. 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 rebuilds every files since the timestamp of include/config/cc/version/text.h is newer than that of target. Signed-off-by: Masahiro Yamada --- Kconfig | 2 -- include/linux/kconfig.h | 9 +++++++++ init/Kconfig | 12 ++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Kconfig b/Kconfig index e10b3ee084d4..745bc773f567 100644 --- a/Kconfig +++ b/Kconfig @@ -5,8 +5,6 @@ # mainmenu "Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration" -comment "Compiler: $(CC_VERSION_TEXT)" - source "scripts/Kconfig.include" source "init/Kconfig" diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h index cc8fa109cfa3..406b8a2521b5 100644 --- a/include/linux/kconfig.h +++ b/include/linux/kconfig.h @@ -2,6 +2,15 @@ #ifndef __LINUX_KCONFIG_H #define __LINUX_KCONFIG_H +/* + * Do not remove this comment block. This contains "CONFIG_CC_VERSION_TEXT" + * to ensure the full rebuild when the compiler is updated. + * + * fixdep parses this header, which is included by every kernel source file, + * and adds include/config/cc/version/text.h to the dependency in .*.cmd files. + * When the compiler is updated, syncconfig touches it so every file is rebuilt. + */ + #include #ifdef CONFIG_CPU_BIG_ENDIAN diff --git a/init/Kconfig b/init/Kconfig index 9e22ee8fbd75..d3d153815d88 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -8,6 +8,18 @@ config DEFCONFIG_LIST default "/boot/config-$(shell,uname -r)" default "arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)" +config CC_VERSION_TEXT + string + default "$(CC_VERSION_TEXT)" + help + There two purposes for this entry: + + 1. Reference the environment variable, CC_VERSION_TEXT, so Kconfig + is invoked if the compiler is updated. + + 2. Touch include/config/cc/version/text.h to force the full rebuild + if the compiler is updated. See comment in include/linux/kconfig.h + config CC_IS_GCC def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc) From patchwork Tue Apr 21 12:48:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 11501249 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5C5EC14B4 for ; Tue, 21 Apr 2020 12:48:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 44BD92064A for ; Tue, 21 Apr 2020 12:48:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587473324; bh=8JfTYWE4/a0SwRnyuZEFA/IzxqWRnnKvYgRqp1os71g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=ERZ1deF6ijLxFG6lQuazXOIfxKiYtMVPKWdF5m0lvfVGmfPHmCUX+mTCic6Ozoy25 glvkH1VCwS9GvWjX/c9EgI19axsyQ1RUqXBzyDfi+Tw118JA8Ql5bwYhSEp0ENlejJ yJ2FTknY1HSxb+AB9qyWF6JMQ5yzIhc1uocUwMR4= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728811AbgDUMsn (ORCPT ); Tue, 21 Apr 2020 08:48:43 -0400 Received: from conuserg-07.nifty.com ([210.131.2.74]:38131 "EHLO conuserg-07.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726691AbgDUMsn (ORCPT ); Tue, 21 Apr 2020 08:48:43 -0400 Received: from oscar.flets-west.jp (softbank126090202047.bbtec.net [126.90.202.47]) (authenticated) by conuserg-07.nifty.com with ESMTP id 03LCm57P000731; Tue, 21 Apr 2020 21:48:06 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-07.nifty.com 03LCm57P000731 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1587473286; bh=1IcXOpB7EL64zMUDfKuq89Vedl6UcsiB89tozBdp8Wo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=m2zkbZNWVlP6oZJsZlUhUZlUJtMKgCSCy8EOu46sKHiI7cPpEai8RRlWvqYGEQoSP kO2R2WhyiwZTFo7es0hGWqsNrRurB6XreuO5sRlCHFzMF8qd/3RSCxfqYGE1m2l1RX iHaPyO/9iSz4okm5ZDY/qBKWTzboo8gWJnW993FgZPWY9pJIVDwsvKWrU9v9kSwXCG iMSAFgCS4g0g8xlk3jimEpZ+hFCFRCsb1BoGCzsJ3X3yYFJOEyRlSinNDbYX5iYtyX MEDk6JmIwdrQcAH2QWytlNuXAKGeY4ld9zoVIaXlji2QtZ0I0sUmwlXfDgd41sLUQ4 dfIc6+e23Epzg== X-Nifty-SrcIP: [126.90.202.47] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Masahiro Yamada , Michal Marek , linux-kernel@vger.kernel.org Subject: [PATCH 2/2] kbuild: use -MMD instead of -MD to exclude system headers from dependency Date: Tue, 21 Apr 2020 21:48:04 +0900 Message-Id: <20200421124804.1272909-2-masahiroy@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200421124804.1272909-1-masahiroy@kernel.org> References: <20200421124804.1272909-1-masahiroy@kernel.org> MIME-Version: 1.0 Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org This omits system header files from the generated header dependency. System headers are not updated unless you upgrade the compiler. Nor do they contain CONFIG options, so fixdep does not need to parse them. Having said that, the effect of this optimization will be small because the kernel code generally does not include system headers except . Host programs include a lot of system headers, but there are not so many host programs. Theoretically, fixdep does not need to parse *.d files for host programs because host programs should not contain CONFIG options in the first place. Kbuild re-uses if_changed_dep for host programs, though I do not think it is a big deal. At first, keeping system headers in .*.cmd files might be useful to detect the compiler update, but there is no guarantee that is included from every file. So, I implemented a more reliable way in the previous commit. Signed-off-by: Masahiro Yamada --- scripts/Kbuild.include | 2 +- scripts/Makefile.host | 4 ++-- scripts/Makefile.lib | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 6cabf20ce66a..0c3dc983439b 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -16,7 +16,7 @@ pound := \# dot-target = $(dir $@).$(notdir $@) ### -# The temporary file to save gcc -MD generated dependencies must not +# The temporary file to save gcc -MMD generated dependencies must not # contain a comma depfile = $(subst $(comma),_,$(dot-target).d) diff --git a/scripts/Makefile.host b/scripts/Makefile.host index 2045855d0b75..c8a4a033dc3e 100644 --- a/scripts/Makefile.host +++ b/scripts/Makefile.host @@ -88,8 +88,8 @@ _hostcxx_flags += -I $(objtree)/$(obj) endif endif -hostc_flags = -Wp,-MD,$(depfile) $(_hostc_flags) -hostcxx_flags = -Wp,-MD,$(depfile) $(_hostcxx_flags) +hostc_flags = -Wp,-MMD,$(depfile) $(_hostc_flags) +hostcxx_flags = -Wp,-MMD,$(depfile) $(_hostcxx_flags) ##### # Compile programs on the host diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 97547108ee7f..a94c1e741df9 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -171,22 +171,22 @@ modkern_aflags = $(if $(part-of-module), \ $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE), \ $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL)) -c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ +c_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ -include $(srctree)/include/linux/compiler_types.h \ $(_c_flags) $(modkern_cflags) \ $(basename_flags) $(modname_flags) -a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ +a_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ $(_a_flags) $(modkern_aflags) -cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ +cpp_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ $(_cpp_flags) ld_flags = $(KBUILD_LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F)) DTC_INCLUDE := $(srctree)/scripts/dtc/include-prefixes -dtc_cpp_flags = -Wp,-MD,$(depfile).pre.tmp -nostdinc \ +dtc_cpp_flags = -Wp,-MMD,$(depfile).pre.tmp -nostdinc \ $(addprefix -I,$(DTC_INCLUDE)) \ -undef -D__DTS__