[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251110095025.1475896-1-ojeda@kernel.org>
Date: Mon, 10 Nov 2025 10:50:05 +0100
From: Miguel Ojeda <ojeda@...nel.org>
To: Miguel Ojeda <ojeda@...nel.org>,
Alex Gaynor <alex.gaynor@...il.com>,
Nathan Chancellor <nathan@...nel.org>,
Nicolas Schier <nicolas@...sle.eu>
Cc: 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-kbuild@...r.kernel.org,
linux-kernel@...r.kernel.org,
patches@...ts.linux.dev
Subject: [PATCH 00/18] `syn` support
This patch series introduces support for `syn` (and its dependencies).
Having such support allows to greatly simplify writing complex macros
such as `pin-init`.
Benno has already prepared the `pin-init` version based on this, and on
top of that, we will be able to simplify the `macros` crate too.
The series starts with a few preparation commits (two fixes were already
merged in mainline that were discovered by this series), then each crate
is added.
This has been a long time coming -- the first iterations of this, from
2022 and 2023 (with `serde` too), are at:
https://github.com/Rust-for-Linux/linux/pull/910
https://github.com/Rust-for-Linux/linux/pull/1007
After those, we considered picking these from the distributions where
possible. However, after discussing it, it is not really worth the
complexity: vendoring makes things less complex and is less fragile.
In particular, we avoid having to support and test several versions,
we avoid having to introduce Cargo just to properly fetch the right
versions from the registry, we can easily customize the crates if needed
(e.g. dropping the `unicode_idents` dependency like it is done in this
series) and we simplify the configuration of the build for users for
which the "default" paths/registries would not have worked.
Moreover, nowadays, the ~57k lines introduced are not that much compared
to years ago (it dwarfed the actual Rust kernel code). Moreover, back
then it wasn't clear the Rust experiment would be a success, so it would
have been a bit pointless/risky to add many lines for nothing. Our macro
needs were also smaller in the early days.
So, finally, in Kangrejos 2025 we discussed going with the original,
simpler approach. Thus here it is the result.
There should not be many updates needed for these, and even if there
are, they should not be too big, e.g. +7k -3k lines across the 3 crates
in the last year.
Note that `syn` does not have all the features enabled, since we do not
need them so far, but they can easily be enabled just adding them to the
list.
I will be updating the webpage as well with the result of this:
https://rust-for-linux.com/third-party-crates
Please give it a test -- thanks!
Miguel Ojeda (18):
rust: condvar: avoid `pub` in example
rust: kbuild: introduce `core-flags` and `core-skip_flags`
rust: kbuild: simplify `--cfg` handling
rust: kbuild: add host library support
rust: proc-macro2: import crate
rust: proc-macro2: add SPDX License Identifiers
rust: proc-macro2: remove `unicode_ident` dependency
rust: proc-macro2: add `README.md`
rust: proc-macro2: enable support in kbuild
rust: quote: import crate
rust: quote: add SPDX License Identifiers
rust: quote: add `README.md`
rust: quote: enable support in kbuild
rust: syn: import crate
rust: syn: add SPDX License Identifiers
rust: syn: remove `unicode-ident` dependency
rust: syn: add `README.md`
rust: syn: enable support in kbuild
.gitignore | 1 +
Makefile | 5 +
rust/Makefile | 134 +-
rust/kernel/sync/condvar.rs | 2 +-
rust/proc-macro2/README.md | 13 +
rust/proc-macro2/detection.rs | 77 +
rust/proc-macro2/extra.rs | 153 +
rust/proc-macro2/fallback.rs | 1258 +++++
rust/proc-macro2/lib.rs | 1351 ++++++
rust/proc-macro2/location.rs | 31 +
rust/proc-macro2/marker.rs | 19 +
rust/proc-macro2/parse.rs | 997 ++++
rust/proc-macro2/probe.rs | 12 +
rust/proc-macro2/probe/proc_macro_span.rs | 53 +
.../proc-macro2/probe/proc_macro_span_file.rs | 16 +
.../probe/proc_macro_span_location.rs | 23 +
rust/proc-macro2/rcvec.rs | 148 +
rust/proc-macro2/wrapper.rs | 986 ++++
rust/quote/README.md | 12 +
rust/quote/ext.rs | 112 +
rust/quote/format.rs | 170 +
rust/quote/ident_fragment.rs | 90 +
rust/quote/lib.rs | 1456 ++++++
rust/quote/runtime.rs | 494 ++
rust/quote/spanned.rs | 52 +
rust/quote/to_tokens.rs | 273 ++
rust/syn/README.md | 13 +
rust/syn/attr.rs | 838 ++++
rust/syn/bigint.rs | 68 +
rust/syn/buffer.rs | 436 ++
rust/syn/classify.rs | 313 ++
rust/syn/custom_keyword.rs | 262 ++
rust/syn/custom_punctuation.rs | 306 ++
rust/syn/data.rs | 426 ++
rust/syn/derive.rs | 261 ++
rust/syn/discouraged.rs | 227 +
rust/syn/drops.rs | 60 +
rust/syn/error.rs | 469 ++
rust/syn/export.rs | 75 +
rust/syn/expr.rs | 4175 +++++++++++++++++
rust/syn/ext.rs | 138 +
rust/syn/file.rs | 127 +
rust/syn/fixup.rs | 775 +++
rust/syn/gen/clone.rs | 2269 +++++++++
rust/syn/gen/debug.rs | 3240 +++++++++++++
rust/syn/gen/eq.rs | 2308 +++++++++
rust/syn/gen/fold.rs | 3904 +++++++++++++++
rust/syn/gen/hash.rs | 2878 ++++++++++++
rust/syn/gen/visit.rs | 3943 ++++++++++++++++
rust/syn/gen/visit_mut.rs | 3761 +++++++++++++++
rust/syn/generics.rs | 1479 ++++++
rust/syn/group.rs | 293 ++
rust/syn/ident.rs | 110 +
rust/syn/item.rs | 3492 ++++++++++++++
rust/syn/lib.rs | 1013 ++++
rust/syn/lifetime.rs | 158 +
rust/syn/lit.rs | 1862 ++++++++
rust/syn/lookahead.rs | 334 ++
rust/syn/mac.rs | 227 +
rust/syn/macros.rs | 184 +
rust/syn/meta.rs | 429 ++
rust/syn/op.rs | 221 +
rust/syn/parse.rs | 1421 ++++++
rust/syn/parse_macro_input.rs | 130 +
rust/syn/parse_quote.rs | 242 +
rust/syn/pat.rs | 957 ++++
rust/syn/path.rs | 968 ++++
rust/syn/precedence.rs | 212 +
rust/syn/print.rs | 18 +
rust/syn/punctuated.rs | 1157 +++++
rust/syn/restriction.rs | 180 +
rust/syn/scan_expr.rs | 267 ++
rust/syn/sealed.rs | 6 +
rust/syn/span.rs | 65 +
rust/syn/spanned.rs | 120 +
rust/syn/stmt.rs | 486 ++
rust/syn/thread.rs | 62 +
rust/syn/token.rs | 1098 +++++
rust/syn/tt.rs | 109 +
rust/syn/ty.rs | 1273 +++++
rust/syn/verbatim.rs | 35 +
rust/syn/whitespace.rs | 67 +
scripts/generate_rust_analyzer.py | 23 +-
83 files changed, 57895 insertions(+), 13 deletions(-)
create mode 100644 rust/proc-macro2/README.md
create mode 100644 rust/proc-macro2/detection.rs
create mode 100644 rust/proc-macro2/extra.rs
create mode 100644 rust/proc-macro2/fallback.rs
create mode 100644 rust/proc-macro2/lib.rs
create mode 100644 rust/proc-macro2/location.rs
create mode 100644 rust/proc-macro2/marker.rs
create mode 100644 rust/proc-macro2/parse.rs
create mode 100644 rust/proc-macro2/probe.rs
create mode 100644 rust/proc-macro2/probe/proc_macro_span.rs
create mode 100644 rust/proc-macro2/probe/proc_macro_span_file.rs
create mode 100644 rust/proc-macro2/probe/proc_macro_span_location.rs
create mode 100644 rust/proc-macro2/rcvec.rs
create mode 100644 rust/proc-macro2/wrapper.rs
create mode 100644 rust/quote/README.md
create mode 100644 rust/quote/ext.rs
create mode 100644 rust/quote/format.rs
create mode 100644 rust/quote/ident_fragment.rs
create mode 100644 rust/quote/lib.rs
create mode 100644 rust/quote/runtime.rs
create mode 100644 rust/quote/spanned.rs
create mode 100644 rust/quote/to_tokens.rs
create mode 100644 rust/syn/README.md
create mode 100644 rust/syn/attr.rs
create mode 100644 rust/syn/bigint.rs
create mode 100644 rust/syn/buffer.rs
create mode 100644 rust/syn/classify.rs
create mode 100644 rust/syn/custom_keyword.rs
create mode 100644 rust/syn/custom_punctuation.rs
create mode 100644 rust/syn/data.rs
create mode 100644 rust/syn/derive.rs
create mode 100644 rust/syn/discouraged.rs
create mode 100644 rust/syn/drops.rs
create mode 100644 rust/syn/error.rs
create mode 100644 rust/syn/export.rs
create mode 100644 rust/syn/expr.rs
create mode 100644 rust/syn/ext.rs
create mode 100644 rust/syn/file.rs
create mode 100644 rust/syn/fixup.rs
create mode 100644 rust/syn/gen/clone.rs
create mode 100644 rust/syn/gen/debug.rs
create mode 100644 rust/syn/gen/eq.rs
create mode 100644 rust/syn/gen/fold.rs
create mode 100644 rust/syn/gen/hash.rs
create mode 100644 rust/syn/gen/visit.rs
create mode 100644 rust/syn/gen/visit_mut.rs
create mode 100644 rust/syn/generics.rs
create mode 100644 rust/syn/group.rs
create mode 100644 rust/syn/ident.rs
create mode 100644 rust/syn/item.rs
create mode 100644 rust/syn/lib.rs
create mode 100644 rust/syn/lifetime.rs
create mode 100644 rust/syn/lit.rs
create mode 100644 rust/syn/lookahead.rs
create mode 100644 rust/syn/mac.rs
create mode 100644 rust/syn/macros.rs
create mode 100644 rust/syn/meta.rs
create mode 100644 rust/syn/op.rs
create mode 100644 rust/syn/parse.rs
create mode 100644 rust/syn/parse_macro_input.rs
create mode 100644 rust/syn/parse_quote.rs
create mode 100644 rust/syn/pat.rs
create mode 100644 rust/syn/path.rs
create mode 100644 rust/syn/precedence.rs
create mode 100644 rust/syn/print.rs
create mode 100644 rust/syn/punctuated.rs
create mode 100644 rust/syn/restriction.rs
create mode 100644 rust/syn/scan_expr.rs
create mode 100644 rust/syn/sealed.rs
create mode 100644 rust/syn/span.rs
create mode 100644 rust/syn/spanned.rs
create mode 100644 rust/syn/stmt.rs
create mode 100644 rust/syn/thread.rs
create mode 100644 rust/syn/token.rs
create mode 100644 rust/syn/tt.rs
create mode 100644 rust/syn/ty.rs
create mode 100644 rust/syn/verbatim.rs
create mode 100644 rust/syn/whitespace.rs
--
2.51.2
Powered by blists - more mailing lists