Merge c83b16cefd ("kbuild: rust: move rust/target.json to scripts/") into android-mainline
Steps on the way to 6.3-rc1 Change-Id: I5d8914fb3aa3f50c5c23698bafb89f9bc173a265 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -587,7 +587,7 @@ KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
|
||||
-std=gnu11
|
||||
KBUILD_CPPFLAGS := -D__KERNEL__
|
||||
KBUILD_RUSTFLAGS := $(rust_common_flags) \
|
||||
--target=$(objtree)/rust/target.json \
|
||||
--target=$(objtree)/scripts/target.json \
|
||||
-Cpanic=abort -Cembed-bitcode=n -Clto=n \
|
||||
-Cforce-unwind-tables=n -Ccodegen-units=1 \
|
||||
-Csymbol-mangling-version=v0 \
|
||||
@@ -1648,7 +1648,7 @@ MRPROPER_FILES += include/config include/generated \
|
||||
certs/x509.genkey \
|
||||
vmlinux-gdb.py \
|
||||
*.spec \
|
||||
rust/target.json rust/libmacros.so
|
||||
rust/libmacros.so
|
||||
|
||||
# clean - Delete most, but leave enough to build external modules
|
||||
#
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
target.json
|
||||
bindings_generated.rs
|
||||
bindings_helpers_generated.rs
|
||||
exports_*_generated.h
|
||||
|
||||
+3
-13
@@ -1,8 +1,5 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
always-$(CONFIG_RUST) += target.json
|
||||
no-clean-files += target.json
|
||||
|
||||
obj-$(CONFIG_RUST) += core.o compiler_builtins.o
|
||||
always-$(CONFIG_RUST) += exports_core_generated.h
|
||||
|
||||
@@ -232,11 +229,6 @@ rusttest-kernel: $(src)/kernel/lib.rs rusttest-prepare \
|
||||
$(call if_changed,rustc_test)
|
||||
$(call if_changed,rustc_test_library)
|
||||
|
||||
filechk_rust_target = $(objtree)/scripts/generate_rust_target < $<
|
||||
|
||||
$(obj)/target.json: $(objtree)/include/config/auto.conf FORCE
|
||||
$(call filechk,rust_target)
|
||||
|
||||
ifdef CONFIG_CC_IS_CLANG
|
||||
bindgen_c_flags = $(c_flags)
|
||||
else
|
||||
@@ -334,8 +326,7 @@ quiet_cmd_rustc_procmacro = $(RUSTC_OR_CLIPPY_QUIET) P $@
|
||||
$(RUSTC_OR_CLIPPY) $(rust_common_flags) \
|
||||
--emit=dep-info=$(depfile) --emit=link=$@ --extern proc_macro \
|
||||
--crate-type proc-macro \
|
||||
--crate-name $(patsubst lib%.so,%,$(notdir $@)) $<; \
|
||||
sed -i '/^\#/d' $(depfile)
|
||||
--crate-name $(patsubst lib%.so,%,$(notdir $@)) $<
|
||||
|
||||
# Procedural macros can only be used with the `rustc` that compiled it.
|
||||
# Therefore, to get `libmacros.so` automatically recompiled when the compiler
|
||||
@@ -351,8 +342,7 @@ quiet_cmd_rustc_library = $(if $(skip_clippy),RUSTC,$(RUSTC_OR_CLIPPY_QUIET)) L
|
||||
--emit=dep-info=$(depfile) --emit=obj=$@ \
|
||||
--emit=metadata=$(dir $@)$(patsubst %.o,lib%.rmeta,$(notdir $@)) \
|
||||
--crate-type rlib -L$(objtree)/$(obj) \
|
||||
--crate-name $(patsubst %.o,%,$(notdir $@)) $<; \
|
||||
sed -i '/^\#/d' $(depfile) \
|
||||
--crate-name $(patsubst %.o,%,$(notdir $@)) $< \
|
||||
$(if $(rustc_objcopy),;$(OBJCOPY) $(rustc_objcopy) $@)
|
||||
|
||||
rust-analyzer:
|
||||
@@ -376,7 +366,7 @@ $(obj)/core.o: private skip_clippy = 1
|
||||
$(obj)/core.o: private skip_flags = -Dunreachable_pub
|
||||
$(obj)/core.o: private rustc_objcopy = $(foreach sym,$(redirect-intrinsics),--redefine-sym $(sym)=__rust$(sym))
|
||||
$(obj)/core.o: private rustc_target_flags = $(core-cfgs)
|
||||
$(obj)/core.o: $(RUST_LIB_SRC)/core/src/lib.rs $(obj)/target.json FORCE
|
||||
$(obj)/core.o: $(RUST_LIB_SRC)/core/src/lib.rs scripts/target.json FORCE
|
||||
$(call if_changed_dep,rustc_library)
|
||||
|
||||
$(obj)/compiler_builtins.o: private rustc_objcopy = -w -W '__*'
|
||||
|
||||
@@ -8,4 +8,5 @@
|
||||
/recordmcount
|
||||
/sign-file
|
||||
/sorttable
|
||||
/target.json
|
||||
/unifdef
|
||||
|
||||
+7
-1
@@ -10,8 +10,14 @@ hostprogs-always-$(CONFIG_BUILDTIME_TABLE_SORT) += sorttable
|
||||
hostprogs-always-$(CONFIG_ASN1) += asn1_compiler
|
||||
hostprogs-always-$(CONFIG_MODULE_SIG_FORMAT) += sign-file
|
||||
hostprogs-always-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE) += insert-sys-cert
|
||||
hostprogs-always-$(CONFIG_RUST) += generate_rust_target
|
||||
always-$(CONFIG_RUST) += target.json
|
||||
|
||||
filechk_rust_target = $< < include/config/auto.conf
|
||||
|
||||
$(obj)/target.json: scripts/generate_rust_target include/config/auto.conf FORCE
|
||||
$(call filechk,rust_target)
|
||||
|
||||
hostprogs += generate_rust_target
|
||||
generate_rust_target-rust := y
|
||||
|
||||
HOSTCFLAGS_sorttable.o = -I$(srctree)/tools/include
|
||||
|
||||
+4
-14
@@ -289,9 +289,6 @@ rust_common_cmd = \
|
||||
--crate-name $(basename $(notdir $@)) \
|
||||
--emit=dep-info=$(depfile)
|
||||
|
||||
rust_handle_depfile = \
|
||||
sed -i '/^\#/d' $(depfile)
|
||||
|
||||
# `--emit=obj`, `--emit=asm` and `--emit=llvm-ir` imply a single codegen unit
|
||||
# will be used. We explicitly request `-Ccodegen-units=1` in any case, and
|
||||
# the compiler shows a warning if it is not 1. However, if we ever stop
|
||||
@@ -301,9 +298,7 @@ rust_handle_depfile = \
|
||||
# would not match each other.
|
||||
|
||||
quiet_cmd_rustc_o_rs = $(RUSTC_OR_CLIPPY_QUIET) $(quiet_modtag) $@
|
||||
cmd_rustc_o_rs = \
|
||||
$(rust_common_cmd) --emit=obj=$@ $<; \
|
||||
$(rust_handle_depfile)
|
||||
cmd_rustc_o_rs = $(rust_common_cmd) --emit=obj=$@ $<
|
||||
|
||||
$(obj)/%.o: $(src)/%.rs FORCE
|
||||
$(call if_changed_dep,rustc_o_rs)
|
||||
@@ -311,24 +306,19 @@ $(obj)/%.o: $(src)/%.rs FORCE
|
||||
quiet_cmd_rustc_rsi_rs = $(RUSTC_OR_CLIPPY_QUIET) $(quiet_modtag) $@
|
||||
cmd_rustc_rsi_rs = \
|
||||
$(rust_common_cmd) -Zunpretty=expanded $< >$@; \
|
||||
command -v $(RUSTFMT) >/dev/null && $(RUSTFMT) $@; \
|
||||
$(rust_handle_depfile)
|
||||
command -v $(RUSTFMT) >/dev/null && $(RUSTFMT) $@
|
||||
|
||||
$(obj)/%.rsi: $(src)/%.rs FORCE
|
||||
$(call if_changed_dep,rustc_rsi_rs)
|
||||
|
||||
quiet_cmd_rustc_s_rs = $(RUSTC_OR_CLIPPY_QUIET) $(quiet_modtag) $@
|
||||
cmd_rustc_s_rs = \
|
||||
$(rust_common_cmd) --emit=asm=$@ $<; \
|
||||
$(rust_handle_depfile)
|
||||
cmd_rustc_s_rs = $(rust_common_cmd) --emit=asm=$@ $<
|
||||
|
||||
$(obj)/%.s: $(src)/%.rs FORCE
|
||||
$(call if_changed_dep,rustc_s_rs)
|
||||
|
||||
quiet_cmd_rustc_ll_rs = $(RUSTC_OR_CLIPPY_QUIET) $(quiet_modtag) $@
|
||||
cmd_rustc_ll_rs = \
|
||||
$(rust_common_cmd) --emit=llvm-ir=$@ $<; \
|
||||
$(rust_handle_depfile)
|
||||
cmd_rustc_ll_rs = $(rust_common_cmd) --emit=llvm-ir=$@ $<
|
||||
|
||||
$(obj)/%.ll: $(src)/%.rs FORCE
|
||||
$(call if_changed_dep,rustc_ll_rs)
|
||||
|
||||
@@ -148,8 +148,7 @@ $(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE
|
||||
# host-rust -> Executable
|
||||
quiet_cmd_host-rust = HOSTRUSTC $@
|
||||
cmd_host-rust = \
|
||||
$(HOSTRUSTC) $(hostrust_flags) --emit=link=$@ $<; \
|
||||
sed -i '/^\#/d' $(depfile)
|
||||
$(HOSTRUSTC) $(hostrust_flags) --emit=link=$@ $<
|
||||
$(host-rust): $(obj)/%: $(src)/%.rs FORCE
|
||||
$(call if_changed_dep,host-rust)
|
||||
|
||||
|
||||
+41
-24
@@ -113,7 +113,7 @@ struct item {
|
||||
};
|
||||
|
||||
#define HASHSZ 256
|
||||
static struct item *hashtab[HASHSZ];
|
||||
static struct item *config_hashtab[HASHSZ], *file_hashtab[HASHSZ];
|
||||
|
||||
static unsigned int strhash(const char *str, unsigned int sz)
|
||||
{
|
||||
@@ -125,25 +125,11 @@ static unsigned int strhash(const char *str, unsigned int sz)
|
||||
return hash;
|
||||
}
|
||||
|
||||
/*
|
||||
* Lookup a value in the configuration string.
|
||||
*/
|
||||
static int is_defined_config(const char *name, int len, unsigned int hash)
|
||||
{
|
||||
struct item *aux;
|
||||
|
||||
for (aux = hashtab[hash % HASHSZ]; aux; aux = aux->next) {
|
||||
if (aux->hash == hash && aux->len == len &&
|
||||
memcmp(aux->name, name, len) == 0)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add a new value to the configuration string.
|
||||
*/
|
||||
static void define_config(const char *name, int len, unsigned int hash)
|
||||
static void add_to_hashtable(const char *name, int len, unsigned int hash,
|
||||
struct item *hashtab[])
|
||||
{
|
||||
struct item *aux = malloc(sizeof(*aux) + len);
|
||||
|
||||
@@ -158,17 +144,34 @@ static void define_config(const char *name, int len, unsigned int hash)
|
||||
hashtab[hash % HASHSZ] = aux;
|
||||
}
|
||||
|
||||
/*
|
||||
* Lookup a string in the hash table. If found, just return true.
|
||||
* If not, add it to the hashtable and return false.
|
||||
*/
|
||||
static bool in_hashtable(const char *name, int len, struct item *hashtab[])
|
||||
{
|
||||
struct item *aux;
|
||||
unsigned int hash = strhash(name, len);
|
||||
|
||||
for (aux = hashtab[hash % HASHSZ]; aux; aux = aux->next) {
|
||||
if (aux->hash == hash && aux->len == len &&
|
||||
memcmp(aux->name, name, len) == 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
add_to_hashtable(name, len, hash, hashtab);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Record the use of a CONFIG_* word.
|
||||
*/
|
||||
static void use_config(const char *m, int slen)
|
||||
{
|
||||
unsigned int hash = strhash(m, slen);
|
||||
if (in_hashtable(m, slen, config_hashtab))
|
||||
return;
|
||||
|
||||
if (is_defined_config(m, slen, hash))
|
||||
return;
|
||||
|
||||
define_config(m, slen, hash);
|
||||
/* Print out a dependency path from a symbol name. */
|
||||
printf(" $(wildcard include/config/%.*s) \\\n", slen, m);
|
||||
}
|
||||
@@ -247,6 +250,15 @@ static int is_ignored_file(const char *s, int len)
|
||||
str_ends_with(s, len, "include/generated/autoksyms.h");
|
||||
}
|
||||
|
||||
/* Do not parse these files */
|
||||
static int is_no_parse_file(const char *s, int len)
|
||||
{
|
||||
/* rustc may list binary files in dep-info */
|
||||
return str_ends_with(s, len, ".rlib") ||
|
||||
str_ends_with(s, len, ".rmeta") ||
|
||||
str_ends_with(s, len, ".so");
|
||||
}
|
||||
|
||||
/*
|
||||
* Important: The below generated source_foo.o and deps_foo.o variable
|
||||
* assignments are parsed not only by make, but also by the rather simple
|
||||
@@ -362,6 +374,10 @@ static void parse_dep_file(char *p, const char *target)
|
||||
* name, which will be the original one, and ignore any
|
||||
* other source names, which will be intermediate
|
||||
* temporary files.
|
||||
*
|
||||
* rustc emits the same dependency list for each
|
||||
* emission type. It is enough to list the source name
|
||||
* just once.
|
||||
*/
|
||||
if (!saw_any_target) {
|
||||
saw_any_target = true;
|
||||
@@ -369,12 +385,13 @@ static void parse_dep_file(char *p, const char *target)
|
||||
printf("deps_%s := \\\n", target);
|
||||
need_parse = true;
|
||||
}
|
||||
} else if (!is_ignored_file(p, q - p)) {
|
||||
} else if (!is_ignored_file(p, q - p) &&
|
||||
!in_hashtable(p, q - p, file_hashtab)) {
|
||||
printf(" %s \\\n", p);
|
||||
need_parse = true;
|
||||
}
|
||||
|
||||
if (need_parse) {
|
||||
if (need_parse && !is_no_parse_file(p, q - p)) {
|
||||
void *buf;
|
||||
|
||||
buf = read_file(p);
|
||||
|
||||
@@ -27,3 +27,5 @@ rm -f arch/x86/purgatory/kexec-purgatory.c
|
||||
rm -f scripts/extract-cert
|
||||
|
||||
rm -f scripts/kconfig/[gmnq]conf-cfg
|
||||
|
||||
rm -f rust/target.json
|
||||
|
||||
Reference in New Issue
Block a user