Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kbuild: redo fake deps at include/config/*.h

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>

authored by

Alexey Dobriyan and committed by
Masahiro Yamada
0e0345b7 e3456056

+16 -52
+1 -1
include/linux/compiler-version.h
··· 9 9 * This header exists to force full rebuild when the compiler is upgraded. 10 10 * 11 11 * When fixdep scans this, it will find this string "CONFIG_CC_VERSION_TEXT" 12 - * and add dependency on include/config/cc/version/text.h, which is touched 12 + * and add dependency on include/config/CC_VERSION_TEXT, which is touched 13 13 * by Kconfig when the version string from the compiler changes. 14 14 */
+1 -1
init/Kconfig
··· 21 21 22 22 - Ensure full rebuild when the compiler is updated 23 23 include/linux/compiler-version.h contains this option in the comment 24 - line so fixdep adds include/config/cc/version/text.h into the 24 + line so fixdep adds include/config/CC_VERSION_TEXT into the 25 25 auto-generated dependency. When the compiler is updated, syncconfig 26 26 will touch it and then every file will be rebuilt. 27 27
+1 -1
kernel/gen_kheaders.sh
··· 36 36 # 37 37 # When Kconfig regenerates include/generated/autoconf.h, its timestamp is 38 38 # updated, but the contents might be still the same. When any CONFIG option is 39 - # changed, Kconfig touches the corresponding timestamp file include/config/*.h. 39 + # changed, Kconfig touches the corresponding timestamp file include/config/*. 40 40 # Hence, the md5sum detects the configuration change anyway. We do not need to 41 41 # check include/generated/autoconf.h explicitly. 42 42 #
+2 -2
scripts/Makefile.build
··· 239 239 240 240 # Rebuild all objects when objtool changes, or is enabled/disabled. 241 241 objtool_dep = $(objtool_obj) \ 242 - $(wildcard include/config/orc/unwinder.h \ 243 - include/config/stack/validation.h) 242 + $(wildcard include/config/ORC_UNWINDER \ 243 + include/config/STACK_VALIDATION) 244 244 245 245 ifdef CONFIG_TRIM_UNUSED_KSYMS 246 246 cmd_gen_ksymdeps = \
+6 -37
scripts/basic/fixdep.c
··· 34 34 * the config symbols are rebuilt. 35 35 * 36 36 * So if the user changes his CONFIG_HIS_DRIVER option, only the objects 37 - * which depend on "include/config/his/driver.h" will be rebuilt, 37 + * which depend on "include/config/HIS_DRIVER" will be rebuilt, 38 38 * so most likely only his driver ;-) 39 39 * 40 40 * The idea above dates, by the way, back to Michael E Chastain, AFAIK. ··· 74 74 * 75 75 * and then basically copies the .<target>.d file to stdout, in the 76 76 * process filtering out the dependency on autoconf.h and adding 77 - * dependencies on include/config/my/option.h for every 77 + * dependencies on include/config/MY_OPTION for every 78 78 * CONFIG_MY_OPTION encountered in any of the prerequisites. 79 79 * 80 80 * We don't even try to really parse the header files, but ··· 107 107 108 108 /* 109 109 * In the intended usage of this program, the stdout is redirected to .*.cmd 110 - * files. The return value of printf() and putchar() must be checked to catch 111 - * any error, e.g. "No space left on device". 110 + * files. The return value of printf() must be checked to catch any error, 111 + * e.g. "No space left on device". 112 112 */ 113 113 static void xprintf(const char *format, ...) 114 114 { ··· 122 122 exit(1); 123 123 } 124 124 va_end(ap); 125 - } 126 - 127 - static void xputchar(int c) 128 - { 129 - int ret; 130 - 131 - ret = putchar(c); 132 - if (ret == EOF) { 133 - perror("fixdep"); 134 - exit(1); 135 - } 136 - } 137 - 138 - /* 139 - * Print out a dependency path from a symbol name 140 - */ 141 - static void print_dep(const char *m, int slen, const char *dir) 142 - { 143 - int c, prev_c = '/', i; 144 - 145 - xprintf(" $(wildcard %s/", dir); 146 - for (i = 0; i < slen; i++) { 147 - c = m[i]; 148 - if (c == '_') 149 - c = '/'; 150 - else 151 - c = tolower(c); 152 - if (c != '/' || prev_c != '/') 153 - xputchar(c); 154 - prev_c = c; 155 - } 156 - xprintf(".h) \\\n"); 157 125 } 158 126 159 127 struct item { ··· 188 220 return; 189 221 190 222 define_config(m, slen, hash); 191 - print_dep(m, slen, "include/config"); 223 + /* Print out a dependency path from a symbol name. */ 224 + xprintf(" $(wildcard include/config/%.*s) \\\n", slen, m); 192 225 } 193 226 194 227 /* test if s ends in sub */
+5 -10
scripts/kconfig/confdata.c
··· 130 130 static int conf_touch_dep(const char *name) 131 131 { 132 132 int fd, ret; 133 - const char *s; 134 - char *d, c; 133 + char *d; 135 134 136 - /* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */ 137 - if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path)) 135 + /* check overflow: prefix + name + '\0' must fit in buffer. */ 136 + if (depfile_prefix_len + strlen(name) + 1 > sizeof(depfile_path)) 138 137 return -1; 139 138 140 139 d = depfile_path + depfile_prefix_len; 141 - s = name; 142 - 143 - while ((c = *s++)) 144 - *d++ = (c == '_') ? '/' : tolower(c); 145 - strcpy(d, ".h"); 140 + strcpy(d, name); 146 141 147 142 /* Assume directory path already exists. */ 148 143 fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644); ··· 460 465 * Reading from include/config/auto.conf 461 466 * If CONFIG_FOO previously existed in 462 467 * auto.conf but it is missing now, 463 - * include/config/foo.h must be touched. 468 + * include/config/FOO must be touched. 464 469 */ 465 470 conf_touch_dep(line + strlen(CONFIG_)); 466 471 else