scripts: generate_rust_analyzer: provide `cfg`s for `core` and `alloc`
Subsystems (2)
PATCH v3 1/1 scripts: generate_rust_analyzer: provide `cfg`s for `core` and `alloc`
Both core and alloc have their cfgs (such as no_rc) missing in rust-project.json.
To remedy this, pass the flags to generate_rust_analyzer.py for them to be added to a dictionary where each key corresponds to a crate and each value to a list of cfgs. The dictionary is then used to pass the cfgs to each crate in the generated file (for core and alloc only).
--- rust/Makefile | 1 + scripts/generate_rust_analyzer.py | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-)
rust/Makefile +1 -0
@@ -374,6 +374,7 @@ quiet_cmd_rustc_library = $(if $(skip_clippy),RUSTC,$(RUSTC_OR_CLIPPY_QUIET)) L rust-analyzer: $(Q)$(srctree)/scripts/generate_rust_analyzer.py \ + --cfgs='core=$(core-cfgs)' --cfgs='alloc=$(alloc-cfgs)' \ $(abs_srctree) $(abs_objtree) \ $(RUST_LIB_SRC) $(KBUILD_EXTMOD) > \ $(if $(KBUILD_EXTMOD),$(extmod_prefix),$(objtree))/rust-project.json
scripts/generate_rust_analyzer.py +14 -2
@@ -10,7 +10,15 @@ import os import pathlib import sys -def generate_crates(srctree, objtree, sysroot_src, external_src): +def args_crates_cfgs(cfgs): + crates_cfgs = {} + for cfg in cfgs: + crate, vals = cfg.split("=", 1) + crates_cfgs[crate] = vals.replace("--cfg", "").split() + + return crates_cfgs + +def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs): # Generate the configuration list. cfg = [] with open(objtree / "include" / "generated" / "rustc_cfg") as fd:
@@ -24,6 +32,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src): # Avoid O(n^2) iterations by keeping a map of indexes. crates = [] crates_indexes = {} + crates_cfgs = args_crates_cfgs(cfgs) def append_crate(display_name, root_module, deps, cfg=[], is_workspace_member=True, is_proc_macro=False): crates_indexes[display_name] = len(crates)
@@ -45,6 +54,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src): "core", sysroot_src / "core" / "src" / "lib.rs", [], + cfg=crates_cfgs.get("core", []), is_workspace_member=False, )
@@ -58,6 +68,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src): "alloc", srctree / "rust" / "alloc" / "lib.rs", ["core", "compiler_builtins"], + cfg=crates_cfgs.get("alloc", []), ) append_crate(
@@ -131,6 +142,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src): def main(): parser = argparse.ArgumentParser() parser.add_argument('--verbose', '-v', action='store_true') + parser.add_argument('--cfgs', action='append', default=[]) parser.add_argument("srctree", type=pathlib.Path) parser.add_argument("objtree", type=pathlib.Path) parser.add_argument("sysroot_src", type=pathlib.Path)
@@ -143,7 +155,7 @@ def main(): ) rust_project = { - "crates": generate_crates(args.srctree, args.objtree, args.sysroot_src, args.exttree), + "crates": generate_crates(args.srctree, args.objtree, args.sysroot_src, args.exttree, args.cfgs), "sysroot_src": str(args.sysroot_src), }
Signature · 1 line
2.41.0
Quoted 2 lines · Martin Rodriguez Reboredo
Suggested-by Miguel Ojeda <[email protected]>
Thanks Martin!
I am a bit confused about the Suggested-by -- did you add it due to the suggestion from v1 of passing variables via command-line arguments? If so, I appreciate the gesture, but the main idea/report (passing the missing cfgs for core and alloc) is yours! :)
The patch seems fine, I will test & apply it soon. If someone wants to give it a Tested-by with rust-analyzer, that would be great too, thanks! (note: it applies on top of rust-next).
Cheers,
Miguel
Quoted 11 lines · Miguel Ojeda
Quoted 2 lines · Martin Rodriguez Reboredo
Suggested-by Miguel Ojeda <[email protected]>Thanks Martin!
I am a bit confused about the Suggested-by -- did you add it due to the suggestion from v1 of passing variables via command-line arguments? If so, I appreciate the gesture, but the main idea/report (passing the missing
cfgs forcoreandalloc) is yours! :)
Ah, it was because you suggested the commit's text, should have been more clear about it, I thought that the "Suggested-by" was for any suggestions in reviews, and in reality it was for suggestions for the kernel itself. In this case I've got confused. So, because I saw the issue with the rust-project.json I'd like to rescind that "Suggested-by", though, FWIW you still get credit in the end when you do the sign-off at merge. 😇
Quoted 6 lines
The patch seems fine, I will test & apply it soon. If someone wants to give it a Tested-by with rust-analyzer, that would be great too, thanks! (note: it applies on top of
rust-next).Cheers,
Miguel
If someone wants to test it, just try in your IDE to go into the definition of some member of core and alloc, e.g. Pin or Vector.
Quoted 5 lines · Martin Rodriguez Reboredo
Ah, it was because you suggested the commit's text, should have been more clear about it, I thought that the "Suggested-by" was for any suggestions in reviews, and in reality it was for suggestions for the kernel itself. In this case I've got confused. So, because I saw
If it was for the commit message suggestion from v2, then it should not be there. In most cases you would credit those in the changelog (in the cover letter or after the --- line).
I will remove it when I apply it then, thanks!
Cheers,
Miguel
Miguel Ojeda
AppliedQuoted 4 lines · Martin Rodriguez Reboredo
Both
coreandallochave theircfgs(such asno_rc) missing inrust-project.json.
Quoted 8 lines
To remedy this, pass the flags to
generate_rust_analyzer.pyfor them to be added to a dictionary where each key corresponds to a crate and each value to a list ofcfgs. The dictionary is then used to pass thecfgs to each crate in the generated file (forcoreandalloconly).Suggested-by Miguel Ojeda <[email protected]>Signed-off-by Martin Rodriguez Reboredo <[email protected]>
Applied to rust-next -- thanks!
As discussed, I removed the Suggested-by.
Cheers,
Miguel