Merge tag 'kbuild-v5.18-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
Pull Kbuild updates from Masahiro Yamada: - Add new environment variables, USERCFLAGS and USERLDFLAGS to allow additional flags to be passed to user-space programs. - Fix missing fflush() bugs in Kconfig and fixdep - Fix a minor bug in the comment format of the .config file - Make kallsyms ignore llvm's local labels, .L* - Fix UAPI compile-test for cross-compiling with Clang - Extend the LLVM= syntax to support LLVM=<suffix> form for using a particular version of LLVm, and LLVM=<prefix> form for using custom LLVM in a particular directory path. - Clean up Makefiles * tag 'kbuild-v5.18-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: kbuild: Make $(LLVM) more flexible kbuild: add --target to correctly cross-compile UAPI headers with Clang fixdep: use fflush() and ferror() to ensure successful write to files arch: syscalls: simplify uapi/kapi directory creation usr/include: replace extra-y with always-y certs: simplify empty certs creation in certs/Makefile certs: include certs/signing_key.x509 unconditionally kallsyms: ignore all local labels prefixed by '.L' kconfig: fix missing '# end of' for empty menu kconfig: add fflush() before ferror() check kbuild: replace $(if A,A,B) with $(or A,B) kbuild: Add environment variables for userprogs flags kbuild: unify cmd_copy and cmd_shipped
This commit is contained in:
@@ -40,8 +40,7 @@ include $(srctree)/scripts/Makefile.compiler
|
||||
|
||||
# The filename Kbuild has precedence over Makefile
|
||||
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
|
||||
kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
|
||||
include $(kbuild-file)
|
||||
include $(or $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Makefile)
|
||||
|
||||
include $(srctree)/scripts/Makefile.lib
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ include $(srctree)/scripts/Kbuild.include
|
||||
|
||||
# The filename Kbuild has precedence over Makefile
|
||||
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
|
||||
include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
|
||||
include $(or $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Makefile)
|
||||
|
||||
# Figure out what we need to build from the various variables
|
||||
# ==========================================================================
|
||||
|
||||
@@ -106,7 +106,7 @@ subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
|
||||
modname-multi = $(sort $(foreach m,$(multi-obj-ym),\
|
||||
$(if $(filter $*.o, $(call suffix-search, $m, .o, -objs -y -m)),$(m:.o=))))
|
||||
|
||||
__modname = $(if $(modname-multi),$(modname-multi),$(basetarget))
|
||||
__modname = $(or $(modname-multi),$(basetarget))
|
||||
|
||||
modname = $(subst $(space),:,$(__modname))
|
||||
modfile = $(addprefix $(obj)/,$(__modname))
|
||||
@@ -241,20 +241,16 @@ $(foreach m, $(notdir $1), \
|
||||
$(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s)))))))
|
||||
endef
|
||||
|
||||
quiet_cmd_copy = COPY $@
|
||||
cmd_copy = cp $< $@
|
||||
|
||||
# Shipped files
|
||||
# Copy a file
|
||||
# ===========================================================================
|
||||
# 'cp' preserves permissions. If you use it to copy a file in read-only srctree,
|
||||
# the copy would be read-only as well, leading to an error when executing the
|
||||
# rule next time. Use 'cat' instead in order to generate a writable file.
|
||||
|
||||
quiet_cmd_shipped = SHIPPED $@
|
||||
cmd_shipped = cat $< > $@
|
||||
quiet_cmd_copy = COPY $@
|
||||
cmd_copy = cat $< > $@
|
||||
|
||||
$(obj)/%: $(src)/%_shipped
|
||||
$(call cmd,shipped)
|
||||
$(call cmd,copy)
|
||||
|
||||
# Commands useful for building a boot image
|
||||
# ===========================================================================
|
||||
@@ -431,7 +427,7 @@ MKIMAGE := $(srctree)/scripts/mkuboot.sh
|
||||
# SRCARCH just happens to match slightly more than ARCH (on sparc), so reduces
|
||||
# the number of overrides in arch makefiles
|
||||
UIMAGE_ARCH ?= $(SRCARCH)
|
||||
UIMAGE_COMPRESSION ?= $(if $(2),$(2),none)
|
||||
UIMAGE_COMPRESSION ?= $(or $(2),none)
|
||||
UIMAGE_OPTS-y ?=
|
||||
UIMAGE_TYPE ?= kernel
|
||||
UIMAGE_LOADADDR ?= arch_must_set_this
|
||||
|
||||
@@ -105,25 +105,6 @@ static void usage(void)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* In the intended usage of this program, the stdout is redirected to .*.cmd
|
||||
* 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, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int ret;
|
||||
|
||||
va_start(ap, format);
|
||||
ret = vprintf(format, ap);
|
||||
if (ret < 0) {
|
||||
perror("fixdep");
|
||||
exit(1);
|
||||
}
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
struct item {
|
||||
struct item *next;
|
||||
unsigned int len;
|
||||
@@ -189,7 +170,7 @@ static void use_config(const char *m, int slen)
|
||||
|
||||
define_config(m, slen, hash);
|
||||
/* Print out a dependency path from a symbol name. */
|
||||
xprintf(" $(wildcard include/config/%.*s) \\\n", slen, m);
|
||||
printf(" $(wildcard include/config/%.*s) \\\n", slen, m);
|
||||
}
|
||||
|
||||
/* test if s ends in sub */
|
||||
@@ -318,13 +299,13 @@ static void parse_dep_file(char *m, const char *target)
|
||||
*/
|
||||
if (!saw_any_target) {
|
||||
saw_any_target = 1;
|
||||
xprintf("source_%s := %s\n\n",
|
||||
target, m);
|
||||
xprintf("deps_%s := \\\n", target);
|
||||
printf("source_%s := %s\n\n",
|
||||
target, m);
|
||||
printf("deps_%s := \\\n", target);
|
||||
}
|
||||
is_first_dep = 0;
|
||||
} else {
|
||||
xprintf(" %s \\\n", m);
|
||||
printf(" %s \\\n", m);
|
||||
}
|
||||
|
||||
buf = read_file(m);
|
||||
@@ -347,8 +328,8 @@ static void parse_dep_file(char *m, const char *target)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
xprintf("\n%s: $(deps_%s)\n\n", target, target);
|
||||
xprintf("$(deps_%s):\n", target);
|
||||
printf("\n%s: $(deps_%s)\n\n", target, target);
|
||||
printf("$(deps_%s):\n", target);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
@@ -363,11 +344,22 @@ int main(int argc, char *argv[])
|
||||
target = argv[2];
|
||||
cmdline = argv[3];
|
||||
|
||||
xprintf("cmd_%s := %s\n\n", target, cmdline);
|
||||
printf("cmd_%s := %s\n\n", target, cmdline);
|
||||
|
||||
buf = read_file(depfile);
|
||||
parse_dep_file(buf, target);
|
||||
free(buf);
|
||||
|
||||
fflush(stdout);
|
||||
|
||||
/*
|
||||
* In the intended usage, the stdout is redirected to .*.cmd files.
|
||||
* Call ferror() to catch errors such as "No space left on device".
|
||||
*/
|
||||
if (ferror(stdout)) {
|
||||
fprintf(stderr, "fixdep: not all data was written to the output\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ static bool is_ignored_symbol(const char *name, char type)
|
||||
/* Symbol names that begin with the following are ignored.*/
|
||||
static const char * const ignored_prefixes[] = {
|
||||
"$", /* local symbols for ARM, MIPS, etc. */
|
||||
".LASANPC", /* s390 kasan local symbols */
|
||||
".L", /* local labels, .LBB,.Ltmpxxx,.L__unnamed_xx,.LASANPC, etc. */
|
||||
"__crc_", /* modversions */
|
||||
"__efistub_", /* arm64 EFI stub namespace */
|
||||
"__kvm_nvhe_", /* arm64 non-VHE KVM namespace */
|
||||
|
||||
@@ -903,19 +903,20 @@ next:
|
||||
menu = menu->list;
|
||||
continue;
|
||||
}
|
||||
if (menu->next)
|
||||
|
||||
end_check:
|
||||
if (!menu->sym && menu_is_visible(menu) && menu != &rootmenu &&
|
||||
menu->prompt->type == P_MENU) {
|
||||
fprintf(out, "# end of %s\n", menu_get_prompt(menu));
|
||||
need_newline = true;
|
||||
}
|
||||
|
||||
if (menu->next) {
|
||||
menu = menu->next;
|
||||
else while ((menu = menu->parent)) {
|
||||
if (!menu->sym && menu_is_visible(menu) &&
|
||||
menu != &rootmenu) {
|
||||
str = menu_get_prompt(menu);
|
||||
fprintf(out, "# end of %s\n", str);
|
||||
need_newline = true;
|
||||
}
|
||||
if (menu->next) {
|
||||
menu = menu->next;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
menu = menu->parent;
|
||||
if (menu)
|
||||
goto end_check;
|
||||
}
|
||||
}
|
||||
fclose(out);
|
||||
@@ -979,6 +980,7 @@ static int conf_write_autoconf_cmd(const char *autoconf_name)
|
||||
|
||||
fprintf(out, "\n$(deps_config): ;\n");
|
||||
|
||||
fflush(out);
|
||||
ret = ferror(out); /* error check for all fprintf() calls */
|
||||
fclose(out);
|
||||
if (ret)
|
||||
@@ -1097,6 +1099,7 @@ static int __conf_write_autoconf(const char *filename,
|
||||
if ((sym->flags & SYMBOL_WRITE) && sym->name)
|
||||
print_symbol(file, sym);
|
||||
|
||||
fflush(file);
|
||||
/* check possible errors in conf_write_heading() and print_symbol() */
|
||||
ret = ferror(file);
|
||||
fclose(file);
|
||||
|
||||
Reference in New Issue
Block a user