lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAJ-ks9m8o7AM_WYjprGwrJc30KCzzY_msvBVavMOieBvfR_iXg@mail.gmail.com>
Date: Fri, 2 Jan 2026 10:27:17 -0500
From: Tamir Duberstein <tamird@...il.com>
To: y.j3ms.n@...il.com
Cc: Miguel Ojeda <ojeda@...nel.org>, Boqun Feng <boqun.feng@...il.com>, Gary Guo <gary@...yguo.net>, 
	Björn Roy Baron <bjorn3_gh@...tonmail.com>, 
	Benno Lossin <lossin@...nel.org>, Andreas Hindborg <a.hindborg@...nel.org>, 
	Alice Ryhl <aliceryhl@...gle.com>, Trevor Gross <tmgross@...ch.edu>, 
	Danilo Krummrich <dakr@...nel.org>, rust-for-linux@...r.kernel.org, 
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH] scripts: generate_rust_analyzer: reduce the output file size

On Thu, Jan 1, 2026 at 3:22 AM Jesung Yang via B4 Relay
<devnull+y.j3ms.n.gmail.com@...nel.org> wrote:
>
> From: Jesung Yang <y.j3ms.n@...il.com>
>
> Use the `cfg_groups` field to aggregate common configurations into a
> single project-level definition. This avoids repeating identical `cfg`s
> across crates.
>
> As a result, the size of the generated `rust-project.json` is reduced
> from 11MiB to 406KiB (about 96% reduction).
>
> Signed-off-by: Jesung Yang <y.j3ms.n@...il.com>
> ---
> This patch depends on [1] to ensure it merges cleanly without conflicts.
>
> [1] https://lore.kernel.org/rust-for-linux/20260101-ra-fix-primitive-v1-1-def809357b4e@gmail.com/
> ---
>  scripts/generate_rust_analyzer.py | 34 ++++++++++++++++++++--------------
>  1 file changed, 20 insertions(+), 14 deletions(-)
>
> diff --git a/scripts/generate_rust_analyzer.py b/scripts/generate_rust_analyzer.py
> index 6178a53516ec35f308897e65c5001edd81b0d3dd..2a8578fb784d08b2a5e628bfab935080759d2dce 100755
> --- a/scripts/generate_rust_analyzer.py
> +++ b/scripts/generate_rust_analyzer.py
> @@ -19,15 +19,7 @@ def args_crates_cfgs(cfgs):
>
>      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:
> -        for line in fd:
> -            line = line.replace("--cfg=", "")
> -            line = line.replace("\n", "")
> -            cfg.append(line)
> -
> +def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs, kernel_cfg_group):
>      # Now fill the crates list -- dependencies need to come first.
>      #
>      # Avoid O(n^2) iterations by keeping a map of indexes.
> @@ -35,7 +27,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=[], crate_attrs=[], is_workspace_member=True, is_proc_macro=False, edition="2021"):
> +    def append_crate(display_name, root_module, deps, cfg=[], cfg_groups=[], crate_attrs=[], is_workspace_member=True, is_proc_macro=False, edition="2021"):
>          crate = {
>              "display_name": display_name,
>              "root_module": str(root_module),
> @@ -48,6 +40,8 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs):
>                  "RUST_MODFILE": "This is only for rust-analyzer"
>              }
>          }
> +        if len(cfg_groups) > 0:
> +            crate["cfg_groups"] = cfg_groups
>          if len(crate_attrs) > 0:
>              crate["crate_attrs"] = crate_attrs
>          if is_proc_macro:
> @@ -134,7 +128,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs):
>              display_name,
>              srctree / "rust"/ display_name / "lib.rs",
>              deps,
> -            cfg=cfg,
> +            cfg_groups=[kernel_cfg_group],
>              crate_attrs=crate_attrs,
>          )
>          crates[-1]["env"]["OBJTREE"] = str(objtree.resolve(True))
> @@ -189,7 +183,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs):
>                  name,
>                  path,
>                  ["kernel"],
> -                cfg=cfg,
> +                cfg_groups=[kernel_cfg_group],
>                  crate_attrs=["no_std"],
>              )
>
> @@ -214,10 +208,22 @@ def main():
>      # Making sure that the `sysroot` and `sysroot_src` belong to the same toolchain.
>      assert args.sysroot in args.sysroot_src.parents
>
> +    # Generate the configuration list.
> +    cfg = []
> +    with open(args.objtree / "include" / "generated" / "rustc_cfg") as fd:
> +        for line in fd:
> +            line = line.replace("--cfg=", "")
> +            line = line.replace("\n", "")
> +            cfg.append(line)
> +    kernel_cfg_group = "kernel"
> +
>      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, kernel_cfg_group),
>          "sysroot": str(args.sysroot),
> -        "sysroot_src": str(args.sysroot_src)
> +        "sysroot_src": str(args.sysroot_src),
> +        "cfg_groups": {
> +            kernel_cfg_group: cfg,
> +        },
>      }
>
>      json.dump(rust_project, sys.stdout, sort_keys=True, indent=4)
>
> ---
> base-commit: f8f9c1f4d0c7a64600e2ca312dec824a0bc2f1da
> change-id: 20260101-rust-project-reduce-size-d829a7a708ae
> prerequisite-change-id: 20260101-ra-fix-primitive-78154fe8173f:v1
> prerequisite-patch-id: 0544fdf5522949047a81c3580960183375574fd3
>
> Best regards,
> --
> Jesung Yang <y.j3ms.n@...il.com>

FWIW this was previously sent in
https://lore.kernel.org/all/20250424-rust-analyzer-host-v6-13-40e67fe5c38a@gmail.com/
back in April.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ