rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Benno Lossin <benno.lossin@proton.me>
To: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
Cc: rust-for-linux@vger.kernel.org, "Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Wedson Almeida Filho" <wedsonaf@gmail.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Nathan Chancellor" <nathan@kernel.org>,
	"Nick Desaulniers" <ndesaulniers@google.com>,
	"Tom Rix" <trix@redhat.com>
Subject: Re: [PATCH v2] scripts: read cfgs from Makefile for rust-analyzer
Date: Fri, 14 Jul 2023 15:55:48 +0000	[thread overview]
Message-ID: <diYQuBM2vYke0twpM2m8npuzVA2tHeJ2y52qN25pwSUmgBG0wxwaEQjBVg8eZnxu2kqcBf8wqNiu0aqgAGR3mlmtT2wPuO_HbVxAyhxR3X0=@proton.me> (raw)
In-Reply-To: <20230520231701.46008-1-yakoyoku@gmail.com>

> Both `core` and `alloc` had their `cfgs` missing in `rust-project.json`,
> to remedy this `generate_rust_analyzer.py` scans the Makefile from
> inside the `rust` directory for them to be added to a dictionary that
> each key corresponds to a crate and each value, to an array of `cfgs`.
> 
> Signed-off-by: Martin Rodriguez Reboredo yakoyoku@gmail.com

When I try this patch *all* configuration options are input into the `cfg`
field of the `core` crate (others are also affected):
```json
            "cfg": [
                "CONFIG_RING_BUFFER",
                "CONFIG_RING_BUFFER=\"y\"",
                "CONFIG_HAVE_ARCH_SECCOMP_FILTER",
                "CONFIG_HAVE_ARCH_SECCOMP_FILTER=\"y\"",
                "CONFIG_KERNEL_GZIP",
                "CONFIG_KERNEL_GZIP=\"y\"",
                "CONFIG_CC_HAS_SANCOV_TRACE_PC",
                "CONFIG_CC_HAS_SANCOV_TRACE_PC=\"y\"",
                "CONFIG_ARCH_WANT_OPTIMIZE_VMEMMAP",
```
The snippet would continue on for about 1000 lines.
I think this is wrong and not intended.

--
Cheers,
Benno

> 
> ---
> v1 -> v2:
> 
> - Read values from command line arguments
> 
> rust/Makefile | 4 +++-
> scripts/generate_rust_analyzer.py | 16 ++++++++++++++--
> 2 files changed, 17 insertions(+), 3 deletions(-)
> 
> diff --git a/rust/Makefile b/rust/Makefile
> index 7c9d9f11aec5..6234f5b70aee 100644
> --- a/rust/Makefile
> +++ b/rust/Makefile
> @@ -373,7 +373,9 @@ quiet_cmd_rustc_library = $(if $(skip_clippy),RUSTC,$(RUSTC_OR_CLIPPY_QUIET)) L
> $(if $(rustc_objcopy),;$(OBJCOPY) $(rustc_objcopy) $@)
> 
> rust-analyzer:
> - $(Q)$(srctree)/scripts/generate_rust_analyzer.py $(srctree) $(objtree) \
> + $(Q)$(srctree)/scripts/generate_rust_analyzer.py \
> + --cfgs='core=$(core-cfgs)' --cfgs='alloc=$(alloc-cfgs)' \
> + $(srctree) $(objtree) \
> $(RUST_LIB_SRC) > $(objtree)/rust-project.json
> 
> 
> redirect-intrinsics = \
> diff --git a/scripts/generate_rust_analyzer.py b/scripts/generate_rust_analyzer.py
> index 946e250c1b2a..5a850f055609 100755
> --- a/scripts/generate_rust_analyzer.py
> +++ b/scripts/generate_rust_analyzer.py
> @@ -9,7 +9,15 @@ import logging
> import pathlib
> import sys
> 
> -def generate_crates(srctree, objtree, sysroot_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, cfgs):
> # Generate the configuration list.
> cfg = []
> with open(objtree / "include" / "generated" / "rustc_cfg") as fd:
> @@ -23,6 +31,7 @@ def generate_crates(srctree, objtree, sysroot_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)
> @@ -44,6 +53,7 @@ def generate_crates(srctree, objtree, sysroot_src):
> "core",
> sysroot_src / "core" / "src" / "lib.rs",
> [],
> + cfg=crates_cfgs.get("core", []),
> is_workspace_member=False,
> )
> 
> @@ -57,6 +67,7 @@ def generate_crates(srctree, objtree, sysroot_src):
> "alloc",
> srctree / "rust" / "alloc" / "lib.rs",
> ["core", "compiler_builtins"],
> + cfg=crates_cfgs.get("alloc", []),
> )
> 
> append_crate(
> @@ -123,6 +134,7 @@ def generate_crates(srctree, objtree, sysroot_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)
> @@ -134,7 +146,7 @@ def main():
> )
> 
> rust_project = {
> - "crates": generate_crates(args.srctree, args.objtree, args.sysroot_src),
> + "crates": generate_crates(args.srctree, args.objtree, args.sysroot_src, args.cfgs),
> "sysroot_src": str(args.sysroot_src),
> }
> 
> --
> 2.40.1

  parent reply	other threads:[~2023-07-14 15:56 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-20 23:17 [PATCH v2] scripts: read cfgs from Makefile for rust-analyzer Martin Rodriguez Reboredo
2023-07-03 14:24 ` Martin Rodriguez Reboredo
2023-07-14 15:55 ` Benno Lossin [this message]
2023-07-15  3:33   ` Martin Rodriguez Reboredo
2023-07-15  8:07     ` Benno Lossin
2023-07-15 14:40       ` Martin Rodriguez Reboredo
2023-07-15 15:10         ` Benno Lossin
2023-07-15 16:13           ` Martin Rodriguez Reboredo
2023-08-02 17:42 ` Miguel Ojeda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='diYQuBM2vYke0twpM2m8npuzVA2tHeJ2y52qN25pwSUmgBG0wxwaEQjBVg8eZnxu2kqcBf8wqNiu0aqgAGR3mlmtT2wPuO_HbVxAyhxR3X0=@proton.me' \
    --to=benno.lossin@proton.me \
    --cc=alex.gaynor@gmail.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=gary@garyguo.net \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=trix@redhat.com \
    --cc=wedsonaf@gmail.com \
    --cc=yakoyoku@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).