Re: [PATCH v2] kconfig: redo fake deps at include/config/*.h

From: Masahiro Yamada
Date: Fri Apr 16 2021 - 01:58:21 EST


On Fri, Apr 16, 2021 at 2:36 AM Alexey Dobriyan <adobriyan@xxxxxxxxx> wrote:
>
> Make include/config/foo/bar.h fake deps files generation simpler.
>
> * delete .h suffix
> those aren't header files, shorten filenames,
>
> * delete tolower()
> Linux filesystems can deal with both upper and lowercase
> filenames very well,
>
> * put everything in 1 directory
> Presumably 'mkdir -p' split is from dark times when filesystems
> handled huge directories badly, disks were round adding to
> seek times.
>
> x86_64 allmodconfig lists 12364 files in include/config.
>
> ../obj/include/config/
> ├── 104_QUAD_8
> ├── 60XX_WDT
> ├── 64BIT
> ...
> ├── ZSWAP_DEFAULT_ON
> ├── ZSWAP_ZPOOL_DEFAULT
> └── ZSWAP_ZPOOL_DEFAULT_ZBUD
>
> 0 directories, 12364 files
>
> Signed-off-by: Alexey Dobriyan <adobriyan@xxxxxxxxx>
> ---
>
> include/linux/compiler-version.h | 2 +-
> init/Kconfig | 2 +-
> kernel/gen_kheaders.sh | 2 +-
> scripts/Makefile.build | 4 ++--
> scripts/basic/fixdep.c | 39 ++++-----------------------------------
> scripts/kconfig/confdata.c | 15 +++++----------
> 6 files changed, 14 insertions(+), 50 deletions(-)
>
> --- a/include/linux/compiler-version.h
> +++ b/include/linux/compiler-version.h
> @@ -9,6 +9,6 @@
> * This header exists to force full rebuild when the compiler is upgraded.
> *
> * When fixdep scans this, it will find this string "CONFIG_CC_VERSION_TEXT"
> - * and add dependency on include/config/cc/version/text.h, which is touched
> + * and add dependency on include/config/CC_VERSION_TEXT, which is touched
> * by Kconfig when the version string from the compiler changes.
> */
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -21,7 +21,7 @@ config CC_VERSION_TEXT
>
> - Ensure full rebuild when the compiler is updated
> include/linux/compiler-version.h contains this option in the comment
> - line so fixdep adds include/config/cc/version/text.h into the
> + line so fixdep adds include/config/CC_VERSION_TEXT into the
> auto-generated dependency. When the compiler is updated, syncconfig
> will touch it and then every file will be rebuilt.
>
> --- a/kernel/gen_kheaders.sh
> +++ b/kernel/gen_kheaders.sh
> @@ -36,7 +36,7 @@ all_dirs="$all_dirs $dir_list"
> #
> # When Kconfig regenerates include/generated/autoconf.h, its timestamp is
> # updated, but the contents might be still the same. When any CONFIG option is
> -# changed, Kconfig touches the corresponding timestamp file include/config/*.h.
> +# changed, Kconfig touches the corresponding timestamp file include/config/*.
> # Hence, the md5sum detects the configuration change anyway. We do not need to
> # check include/generated/autoconf.h explicitly.
> #
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -238,8 +238,8 @@ endif # CONFIG_STACK_VALIDATION
>
> # Rebuild all objects when objtool changes, or is enabled/disabled.
> objtool_dep = $(objtool_obj) \
> - $(wildcard include/config/orc/unwinder.h \
> - include/config/stack/validation.h)
> + $(wildcard include/config/ORC_UNWINDER \
> + include/config/STACK_VALIDATION)
>
> ifdef CONFIG_TRIM_UNUSED_KSYMS
> cmd_gen_ksymdeps = \
> --- a/scripts/basic/fixdep.c
> +++ b/scripts/basic/fixdep.c
> @@ -34,7 +34,7 @@
> * the config symbols are rebuilt.
> *
> * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
> - * which depend on "include/config/his/driver.h" will be rebuilt,
> + * which depend on "include/config/HIS_DRIVER" will be rebuilt,
> * so most likely only his driver ;-)
> *
> * The idea above dates, by the way, back to Michael E Chastain, AFAIK.
> @@ -74,7 +74,7 @@
> *
> * and then basically copies the .<target>.d file to stdout, in the
> * process filtering out the dependency on autoconf.h and adding
> - * dependencies on include/config/my/option.h for every
> + * dependencies on include/config/MY_OPTION for every
> * CONFIG_MY_OPTION encountered in any of the prerequisites.
> *
> * We don't even try to really parse the header files, but
> @@ -124,38 +124,6 @@ static void xprintf(const char *format, ...)
> va_end(ap);
> }
>
> -static void xputchar(int c)
> -{
> - int ret;
> -
> - ret = putchar(c);
> - if (ret == EOF) {
> - perror("fixdep");
> - exit(1);
> - }
> -}
> -



Applied to linux-kbuild.

I just found one more minor thing to fix up.

fixdep no longer calls putchar(), so I squashed the following:




diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
index 5bee6a80992f..44e887cff49b 100644
--- a/scripts/basic/fixdep.c
+++ b/scripts/basic/fixdep.c
@@ -107,8 +107,8 @@ static void usage(void)

/*
* In the intended usage of this program, the stdout is redirected to .*.cmd
- * files. The return value of printf() and putchar() must be checked to catch
- * any error, e.g. "No space left on device".
+ * files. The return value of printf() must be checked to catch any error,
+ * e.g. "No space left on device".
*/
static void xprintf(const char *format, ...)
{




--
Best Regards
Masahiro Yamada