diff options
Diffstat (limited to 'scripts/generate_rust_analyzer.py')
| -rwxr-xr-x | scripts/generate_rust_analyzer.py | 25 | 
1 files changed, 17 insertions, 8 deletions
| diff --git a/scripts/generate_rust_analyzer.py b/scripts/generate_rust_analyzer.py index cd41bc906fbd..7c3ea2b55041 100755 --- a/scripts/generate_rust_analyzer.py +++ b/scripts/generate_rust_analyzer.py @@ -19,7 +19,7 @@ def args_crates_cfgs(cfgs):      return crates_cfgs -def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs): +def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs, core_edition):      # Generate the configuration list.      cfg = []      with open(objtree / "include" / "generated" / "rustc_cfg") as fd: @@ -35,7 +35,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs):      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): +    def append_crate(display_name, root_module, deps, cfg=[], is_workspace_member=True, is_proc_macro=False, edition="2021"):          crate = {              "display_name": display_name,              "root_module": str(root_module), @@ -43,7 +43,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs):              "is_proc_macro": is_proc_macro,              "deps": [{"crate": crates_indexes[dep], "name": dep} for dep in deps],              "cfg": cfg, -            "edition": "2021", +            "edition": edition,              "env": {                  "RUST_MODFILE": "This is only for rust-analyzer"              } @@ -61,6 +61,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs):          display_name,          deps,          cfg=[], +        edition="2021",      ):          append_crate(              display_name, @@ -68,12 +69,13 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs):              deps,              cfg,              is_workspace_member=False, +            edition=edition,          )      # NB: sysroot crates reexport items from one another so setting up our transitive dependencies      # here is important for ensuring that rust-analyzer can resolve symbols. The sources of truth      # for this dependency graph are `(sysroot_src / crate / "Cargo.toml" for crate in crates)`. -    append_sysroot_crate("core", [], cfg=crates_cfgs.get("core", [])) +    append_sysroot_crate("core", [], cfg=crates_cfgs.get("core", []), edition=core_edition)      append_sysroot_crate("alloc", ["core"])      append_sysroot_crate("std", ["alloc", "core"])      append_sysroot_crate("proc_macro", ["core", "std"]) @@ -112,6 +114,12 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs):          cfg=["kernel"],      ) +    append_crate( +        "ffi", +        srctree / "rust" / "ffi.rs", +        ["core", "compiler_builtins"], +    ) +      def append_crate_with_generated(          display_name,          deps, @@ -131,9 +139,9 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs):              "exclude_dirs": [],          } -    append_crate_with_generated("bindings", ["core"]) -    append_crate_with_generated("uapi", ["core"]) -    append_crate_with_generated("kernel", ["core", "macros", "build_error", "pin_init", "bindings", "uapi"]) +    append_crate_with_generated("bindings", ["core", "ffi"]) +    append_crate_with_generated("uapi", ["core", "ffi"]) +    append_crate_with_generated("kernel", ["core", "macros", "build_error", "pin_init", "ffi", "bindings", "uapi"])      def is_root_crate(build_file, target):          try: @@ -171,6 +179,7 @@ def main():      parser = argparse.ArgumentParser()      parser.add_argument('--verbose', '-v', action='store_true')      parser.add_argument('--cfgs', action='append', default=[]) +    parser.add_argument("core_edition")      parser.add_argument("srctree", type=pathlib.Path)      parser.add_argument("objtree", type=pathlib.Path)      parser.add_argument("sysroot", type=pathlib.Path) @@ -187,7 +196,7 @@ def main():      assert args.sysroot in args.sysroot_src.parents      rust_project = { -        "crates": generate_crates(args.srctree, args.objtree, args.sysroot_src, args.exttree, args.cfgs), +        "crates": generate_crates(args.srctree, args.objtree, args.sysroot_src, args.exttree, args.cfgs, args.core_edition),          "sysroot": str(args.sysroot),      } | 
