forked from mirrors/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>
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.
 | 
					 * 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"
 | 
					 * 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.
 | 
					 * 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
 | 
						  - Ensure full rebuild when the compiler is updated
 | 
				
			||||||
	    include/linux/compiler-version.h contains this option in the comment
 | 
						    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
 | 
						    auto-generated dependency. When the compiler is updated, syncconfig
 | 
				
			||||||
	    will touch it and then every file will be rebuilt.
 | 
						    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
 | 
					# When Kconfig regenerates include/generated/autoconf.h, its timestamp is
 | 
				
			||||||
# updated, but the contents might be still the same. When any CONFIG option 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
 | 
					# Hence, the md5sum detects the configuration change anyway. We do not need to
 | 
				
			||||||
# check include/generated/autoconf.h explicitly.
 | 
					# check include/generated/autoconf.h explicitly.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -239,8 +239,8 @@ endif # CONFIG_STACK_VALIDATION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Rebuild all objects when objtool changes, or is enabled/disabled.
 | 
					# Rebuild all objects when objtool changes, or is enabled/disabled.
 | 
				
			||||||
objtool_dep = $(objtool_obj)					\
 | 
					objtool_dep = $(objtool_obj)					\
 | 
				
			||||||
	      $(wildcard include/config/orc/unwinder.h		\
 | 
						      $(wildcard include/config/ORC_UNWINDER		\
 | 
				
			||||||
			 include/config/stack/validation.h)
 | 
								 include/config/STACK_VALIDATION)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifdef CONFIG_TRIM_UNUSED_KSYMS
 | 
					ifdef CONFIG_TRIM_UNUSED_KSYMS
 | 
				
			||||||
cmd_gen_ksymdeps = \
 | 
					cmd_gen_ksymdeps = \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@
 | 
				
			||||||
 * the config symbols are rebuilt.
 | 
					 * the config symbols are rebuilt.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
 | 
					 * 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 ;-)
 | 
					 * so most likely only his driver ;-)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * The idea above dates, by the way, back to Michael E Chastain, AFAIK.
 | 
					 * 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
 | 
					 * and then basically copies the .<target>.d file to stdout, in the
 | 
				
			||||||
 * process filtering out the dependency on autoconf.h and adding
 | 
					 * 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.
 | 
					 * CONFIG_MY_OPTION encountered in any of the prerequisites.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * We don't even try to really parse the header files, but
 | 
					 * 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
 | 
					 * 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
 | 
					 * files. The return value of printf() must be checked to catch any error,
 | 
				
			||||||
 * any error, e.g. "No space left on device".
 | 
					 * e.g. "No space left on device".
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static void xprintf(const char *format, ...)
 | 
					static void xprintf(const char *format, ...)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -124,38 +124,6 @@ static void xprintf(const char *format, ...)
 | 
				
			||||||
	va_end(ap);
 | 
						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 {
 | 
				
			||||||
	struct item	*next;
 | 
						struct item	*next;
 | 
				
			||||||
	unsigned int	len;
 | 
						unsigned int	len;
 | 
				
			||||||
| 
						 | 
					@ -220,7 +188,8 @@ static void use_config(const char *m, int slen)
 | 
				
			||||||
	    return;
 | 
						    return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	define_config(m, slen, hash);
 | 
						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 */
 | 
					/* test if s ends in sub */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -130,19 +130,14 @@ static size_t depfile_prefix_len;
 | 
				
			||||||
static int conf_touch_dep(const char *name)
 | 
					static int conf_touch_dep(const char *name)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int fd, ret;
 | 
						int fd, ret;
 | 
				
			||||||
	const char *s;
 | 
						char *d;
 | 
				
			||||||
	char *d, c;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */
 | 
						/* check overflow: prefix + name + '\0' must fit in buffer. */
 | 
				
			||||||
	if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path))
 | 
						if (depfile_prefix_len + strlen(name) + 1 > sizeof(depfile_path))
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	d = depfile_path + depfile_prefix_len;
 | 
						d = depfile_path + depfile_prefix_len;
 | 
				
			||||||
	s = name;
 | 
						strcpy(d, name);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	while ((c = *s++))
 | 
					 | 
				
			||||||
		*d++ = (c == '_') ? '/' : tolower(c);
 | 
					 | 
				
			||||||
	strcpy(d, ".h");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Assume directory path already exists. */
 | 
						/* Assume directory path already exists. */
 | 
				
			||||||
	fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
 | 
						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
 | 
										 * Reading from include/config/auto.conf
 | 
				
			||||||
					 * If CONFIG_FOO previously existed in
 | 
										 * If CONFIG_FOO previously existed in
 | 
				
			||||||
					 * auto.conf but it is missing now,
 | 
										 * 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_));
 | 
										conf_touch_dep(line + strlen(CONFIG_));
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue