All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masahiro Yamada <masahiroy@kernel.org>
To: Vinay Varma <varmavinaym@gmail.com>
Cc: alicef@alicef.me, "Michal Marek" <michal.lkml@markovi.net>,
	"Nick Desaulniers" <ndesaulniers@google.com>,
	"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>,
	linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	rust-for-linux@vger.kernel.org
Subject: Re: [PATCH v2] scripts: `make rust-analyzer` for out-of-tree modules
Date: Sat, 21 Jan 2023 18:18:01 +0900	[thread overview]
Message-ID: <CAK7LNAT1p=ykc1yruvzRiYthCAuXNcLq9461Mdgz95Z39_MYxQ@mail.gmail.com> (raw)
In-Reply-To: <20230121052507.885734-1-varmavinaym@gmail.com>

On Sat, Jan 21, 2023 at 2:25 PM Vinay Varma <varmavinaym@gmail.com> wrote:
>
> Adds support for out-of-tree rust modules to use the `rust-analyzer`
> make target to generate the rust-project.json file.
>
> The change involves adding an optional parameter `external_src` to the
> `generate_rust_analyzer.py` which expects the path to the out-of-tree
> module's source directory. When this parameter is passed, I have chosen
> not to add the non-core modules (samples and drivers) into the result
> since these are not expected to be used in third party modules. Related
> changes are also made to the Makefile and rust/Makefile allowing the
> `rust-analyzer` target to be used for out-of-tree modules as well.
>
> Link: https://github.com/Rust-for-Linux/linux/pull/914
> Link: https://github.com/Rust-for-Linux/rust-out-of-tree-module/pull/2
>
> Signed-off-by: Vinay Varma <varmavinaym@gmail.com>
> ---
>  Makefile                          | 12 +++++++-----
>  rust/Makefile                     |  6 ++++--
>  scripts/generate_rust_analyzer.py | 31 ++++++++++++++++++-------------
>  3 files changed, 29 insertions(+), 20 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index f41ec8c8426b..a055a316d2a4 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1831,11 +1831,6 @@ rustfmt:
>  rustfmtcheck: rustfmt_flags = --check
>  rustfmtcheck: rustfmt
>
> -# IDE support targets
> -PHONY += rust-analyzer
> -rust-analyzer:
> -       $(Q)$(MAKE) $(build)=rust $@
> -
>  # Misc
>  # ---------------------------------------------------------------------------
>
> @@ -1888,6 +1883,7 @@ help:
>         @echo  '  modules         - default target, build the module(s)'
>         @echo  '  modules_install - install the module'
>         @echo  '  clean           - remove generated files in module directory only'
> +       @echo  '  rust-analyzer   - generate rust-project.json rust-analyzer support file'
>         @echo  ''
>
>  endif # KBUILD_EXTMOD
> @@ -2022,6 +2018,12 @@ quiet_cmd_tags = GEN     $@
>  tags TAGS cscope gtags: FORCE
>         $(call cmd,tags)
>
> +# IDE support targets
> +PHONY += rust-analyzer
> +rust-analyzer:
> +       $(Q)$(MAKE) $(build)=rust $@
> +
> +


Extra empty line.


>  # Script to generate missing namespace dependencies
>  # ---------------------------------------------------------------------------
>
> diff --git a/rust/Makefile b/rust/Makefile
> index 8f598a904f38..41c1435cd8d4 100644
> --- a/rust/Makefile
> +++ b/rust/Makefile
> @@ -389,8 +389,10 @@ 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) \
> -               $(RUST_LIB_SRC) > $(objtree)/rust-project.json
> +       $(Q)$(srctree)/scripts/generate_rust_analyzer.py \
> +               $(abs_srctree) $(abs_objtree) \
> +               $(RUST_LIB_SRC) $(KBUILD_EXTMOD) > \
> +               $(if $(KBUILD_EXTMOD),$(extmod_prefix),$(objtree))/rust-project.json



This is equivalent to:

  >  $(extmod_prefix)/rust-project.json



See the rule of 'compile_commands.json'.







>  $(obj)/core.o: private skip_clippy = 1
>  $(obj)/core.o: private skip_flags = -Dunreachable_pub
> diff --git a/scripts/generate_rust_analyzer.py b/scripts/generate_rust_analyzer.py
> index ecc7ea9a4dcf..1792f379ee4e 100755
> --- a/scripts/generate_rust_analyzer.py
> +++ b/scripts/generate_rust_analyzer.py
> @@ -6,10 +6,11 @@
>  import argparse
>  import json
>  import logging
> +import os
>  import pathlib
>  import sys
>
> -def generate_crates(srctree, objtree, sysroot_src):
> +def generate_crates(srctree, objtree, sysroot_src, external_src):
>      # Generate the configuration list.
>      cfg = []
>      with open(objtree / "include" / "generated" / "rustc_cfg") as fd:
> @@ -65,7 +66,7 @@ def generate_crates(srctree, objtree, sysroot_src):
>          [],
>          is_proc_macro=True,
>      )
> -    crates[-1]["proc_macro_dylib_path"] = "rust/libmacros.so"
> +    crates[-1]["proc_macro_dylib_path"] = f"{objtree}/rust/libmacros.so"
>
>      append_crate(
>          "build_error",
> @@ -95,25 +96,28 @@ def generate_crates(srctree, objtree, sysroot_src):
>          "exclude_dirs": [],
>      }
>
> +    def is_root_crate(build_file, target):
> +        return os.path.exists(build_file) and target in open(build_file).read()
> +
>      # Then, the rest outside of `rust/`.
>      #
>      # We explicitly mention the top-level folders we want to cover.


Huh, not maintainable, unfortunately.





> -    for folder in ("samples", "drivers"):
> +    for folder in ("samples", "drivers") if external_src is None else [external_src]:
>          for path in (srctree / folder).rglob("*.rs"):



It is odd to add 'srctree' prefix to external module sources.



I think rust-project.json is a similar concept to
compile_commands.json, but it was implemented
in a different way.







-- 
Best Regards
Masahiro Yamada

  reply	other threads:[~2023-01-21  9:18 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-18 16:02 [PATCH] scripts: `make rust-analyzer` for out-of-tree modules Vinay Varma
2023-01-19 19:12 ` Miguel Ojeda
2023-01-20 13:17 ` Björn Roy Baron
2023-01-20 13:35   ` Miguel Ojeda
2023-01-21  5:25     ` [PATCH v2] " Vinay Varma
2023-01-21  9:18       ` Masahiro Yamada [this message]
2023-03-07 15:28         ` Vinay Varma
2023-03-07 19:55           ` Miguel Ojeda
2023-04-07 23:59             ` Miguel Ojeda
2023-04-11  9:17               ` [PATCH v5] " Vinay Varma
2023-08-02 17:37                 ` Miguel Ojeda
2023-01-21 16:40       ` [PATCH v2] " Björn Roy Baron
2023-03-07 12:24       ` Miguel Ojeda
2023-03-07 14:42         ` [PATCH v3] " Vinay Varma
2023-03-07 15:55           ` [PATCH v4] " Vinay Varma
2023-01-20 15:21 ` [PATCH] " Alice Ferrazzi

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='CAK7LNAT1p=ykc1yruvzRiYthCAuXNcLq9461Mdgz95Z39_MYxQ@mail.gmail.com' \
    --to=masahiroy@kernel.org \
    --cc=alex.gaynor@gmail.com \
    --cc=alicef@alicef.me \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=gary@garyguo.net \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michal.lkml@markovi.net \
    --cc=ndesaulniers@google.com \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=varmavinaym@gmail.com \
    --cc=wedsonaf@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.