kbuild: redo fake deps at include/config/*.h
authorAlexey Dobriyan <adobriyan@gmail.com>
Thu, 15 Apr 2021 17:36:07 +0000 (20:36 +0300)
committerMasahiro Yamada <masahiroy@kernel.org>
Sat, 24 Apr 2021 20:26:10 +0000 (05:26 +0900)
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@gmail.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
include/linux/compiler-version.h
init/Kconfig
kernel/gen_kheaders.sh
scripts/Makefile.build
scripts/basic/fixdep.c
scripts/kconfig/confdata.c

index 2b2972c77c622a397d7bed5c6b21d3a0bbc18a2e..573fa85b6c0cd314dfeec66e8c77342798aa7e62 100644 (file)
@@ -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.
  */
index b5744d32c4df30f032a860ba86d02be8c251335c..c2339da03468f799933b4fe88955a23e65cd922b 100644 (file)
@@ -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.
 
index c1510f0ab3ea5cd1377b210aa79f771629025cfd..34a1dc2abc7dde28987cccc035ced5c492c9e6d1 100755 (executable)
@@ -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.
 #
index e47c054d3db2ddc21ed0f357eb402fbe56522f55..5e39b0517186cc75b4159f38011d387674210672 100644 (file)
@@ -239,8 +239,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 = \
index d98540552941c1b895b94361a924e975091ab747..44e887cff49b67f0facbd7148fd8b8932cc322eb 100644 (file)
@@ -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
@@ -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, ...)
 {
@@ -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);
-       }
-}
-
-/*
- * Print out a dependency path from a symbol name
- */
-static void print_dep(const char *m, int slen, const char *dir)
-{
-       int c, prev_c = '/', i;
-
-       xprintf("    $(wildcard %s/", dir);
-       for (i = 0; i < slen; i++) {
-               c = m[i];
-               if (c == '_')
-                       c = '/';
-               else
-                       c = tolower(c);
-               if (c != '/' || prev_c != '/')
-                       xputchar(c);
-               prev_c = c;
-       }
-       xprintf(".h) \\\n");
-}
-
 struct item {
        struct item     *next;
        unsigned int    len;
@@ -220,7 +188,8 @@ static void use_config(const char *m, int slen)
            return;
 
        define_config(m, slen, hash);
-       print_dep(m, slen, "include/config");
+       /* Print out a dependency path from a symbol name. */
+       xprintf("    $(wildcard include/config/%.*s) \\\n", slen, m);
 }
 
 /* test if s ends in sub */
index 2568dbe16ed64a328ea219c16b2af407992adaa3..c7b7e1c62a9ce862cbbdf81fbd807543acb891f9 100644 (file)
@@ -130,19 +130,14 @@ static size_t depfile_prefix_len;
 static int conf_touch_dep(const char *name)
 {
        int fd, ret;
-       const char *s;
-       char *d, c;
+       char *d;
 
-       /* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */
-       if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path))
+       /* check overflow: prefix + name + '\0' must fit in buffer. */
+       if (depfile_prefix_len + strlen(name) + 1 > sizeof(depfile_path))
                return -1;
 
        d = depfile_path + depfile_prefix_len;
-       s = name;
-
-       while ((c = *s++))
-               *d++ = (c == '_') ? '/' : tolower(c);
-       strcpy(d, ".h");
+       strcpy(d, name);
 
        /* Assume directory path already exists. */
        fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
@@ -465,7 +460,7 @@ load:
                                         * Reading from include/config/auto.conf
                                         * If CONFIG_FOO previously existed in
                                         * auto.conf but it is missing now,
-                                        * include/config/foo.h must be touched.
+                                        * include/config/FOO must be touched.
                                         */
                                        conf_touch_dep(line + strlen(CONFIG_));
                                else