[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CANiq72kTX5o2rs=A51keKQiV=6fT0sN+FjWygL4=ddytnNM8Cg@mail.gmail.com>
Date: Tue, 10 Dec 2024 01:09:17 +0100
From: Miguel Ojeda <miguel.ojeda.sandonis@...il.com>
To: Miguel Ojeda <ojeda@...nel.org>
Cc: Alex Gaynor <alex.gaynor@...il.com>, Boqun Feng <boqun.feng@...il.com>,
Gary Guo <gary@...yguo.net>, Björn Roy Baron <bjorn3_gh@...tonmail.com>,
Benno Lossin <benno.lossin@...ton.me>, Andreas Hindborg <a.hindborg@...nel.org>,
Alice Ryhl <aliceryhl@...gle.com>, Trevor Gross <tmgross@...ch.edu>, rust-for-linux@...r.kernel.org,
linux-kernel@...r.kernel.org, patches@...ts.linux.dev,
Christian Poveda <git@...rz.com>, Emilio Cobos Álvarez <emilio@...sal.io>
Subject: Re: [PATCH] rust: kbuild: set `bindgen`'s Rust target version
On Sat, Nov 23, 2024 at 7:03 PM Miguel Ojeda <ojeda@...nel.org> wrote:
>
> Each `bindgen` release may upgrade the list of Rust targets. For instance,
> currently, in their master branch [1], the latest ones are:
>
> Nightly => {
> vectorcall_abi: #124485,
> ptr_metadata: #81513,
> layout_for_ptr: #69835,
> },
> Stable_1_77(77) => { offset_of: #106655 },
> Stable_1_73(73) => { thiscall_abi: #42202 },
> Stable_1_71(71) => { c_unwind_abi: #106075 },
> Stable_1_68(68) => { abi_efiapi: #105795 },
>
> By default, the highest stable release in their list is used, and users
> are expected to set one if they need to support older Rust versions
> (e.g. see [2]).
>
> Thus, over time, new Rust features are used by default, and at some
> point, it is likely that `bindgen` will emit Rust code that requires a
> Rust version higher than our minimum (or perhaps enabling an unstable
> feature). Currently, there is no problem because the maximum they have,
> as seen above, is Rust 1.77.0, and our current minimum is Rust 1.78.0.
>
> Therefore, set a Rust target explicitly now to prevent going forward in
> time too much and thus getting potential build failures at some point.
>
> Since we also support a minimum `bindgen` version, and since `bindgen`
> does not support passing unknown Rust target versions, we need to use
> the list of our minimum `bindgen` version, rather than the latest. So,
> since `bindgen` 0.65.1 had this list [3], we need to use Rust 1.68.0:
>
> /// Rust stable 1.64
> /// * `core_ffi_c` ([Tracking issue](https://github.com/rust-lang/rust/issues/94501))
> => Stable_1_64 => 1.64;
> /// Rust stable 1.68
> /// * `abi_efiapi` calling convention ([Tracking issue](https://github.com/rust-lang/rust/issues/65815))
> => Stable_1_68 => 1.68;
> /// Nightly rust
> /// * `thiscall` calling convention ([Tracking issue](https://github.com/rust-lang/rust/issues/42202))
> /// * `vectorcall` calling convention (no tracking issue)
> /// * `c_unwind` calling convention ([Tracking issue](https://github.com/rust-lang/rust/issues/74990))
> => Nightly => nightly;
>
> ...
>
> /// Latest stable release of Rust
> pub const LATEST_STABLE_RUST: RustTarget = RustTarget::Stable_1_68;
>
> Thus add the `--rust-target 1.68` parameter. Add a comment as well
> explaining this.
>
> An alternative would be to use the currently running (i.e. actual) `rustc`
> and `bindgen` versions to pick a "better" Rust target version. However,
> that would introduce more moving parts depending on the user setup and
> is also more complex to implement.
>
> Cc: Christian Poveda <git@...rz.com>
> Cc: Emilio Cobos Álvarez <emilio@...sal.io>
> Link: https://github.com/rust-lang/rust-bindgen/blob/21c60f473f4e824d4aa9b2b508056320d474b110/bindgen/features.rs#L97-L105 [1]
> Link: https://github.com/rust-lang/rust-bindgen/issues/2960 [2]
> Link: https://github.com/rust-lang/rust-bindgen/blob/7d243056d335fdc4537f7bca73c06d01aae24ddc/bindgen/features.rs#L131-L150 [3]
> Signed-off-by: Miguel Ojeda <ojeda@...nel.org>
Applied to `rust-fixes` -- thanks!
I added the following note to the commit message and added a small
sentence to the comment too:
Starting with `bindgen` 0.71.0 [4], we will be able to set any future
Rust version instead, i.e. we will be able to set here our minimum
supported Rust version. Christian implemented it [5] after seeing this
patch. Thanks!
I also queued it for stable:
Cc: stable@...r.kernel.org # needed for 6.12.y; unneeded for
6.6.y; do not apply to 6.1.y
Fixes: c844fa64a2d4 ("rust: start supporting several `bindgen` versions")
Cheers,
Miguel
Powered by blists - more mailing lists