mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									e3456056f1
								
							
						
					
					
						commit
						0e0345b77a
					
				
					 6 changed files with 16 additions and 52 deletions
				
			
		|  | @ -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. | ||||
|  */ | ||||
|  |  | |||
|  | @ -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. | ||||
| 
 | ||||
|  |  | |||
|  | @ -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. | ||||
| # | ||||
|  |  | |||
|  | @ -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 = \ | ||||
|  |  | |||
|  | @ -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 */ | ||||
|  |  | |||
|  | @ -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 @@ int conf_read_simple(const char *name, int def) | |||
| 					 * 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 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Alexey Dobriyan
						Alexey Dobriyan