[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAJ-ks9kCTZZ-kq+VL3-4hxxz-q07vc4k6A6L9c6b6UYc5b5f3w@mail.gmail.com>
Date: Wed, 19 Mar 2025 17:13:13 -0400
From: Tamir Duberstein <tamird@...il.com>
To: Gary Guo <gary@...yguo.net>
Cc: Miguel Ojeda <ojeda@...nel.org>, Alex Gaynor <alex.gaynor@...il.com>,
Boqun Feng <boqun.feng@...il.com>, 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>,
Danilo Krummrich <dakr@...nel.org>, Nathan Chancellor <nathan@...nel.org>,
Nick Desaulniers <nick.desaulniers+lkml@...il.com>, Bill Wendling <morbo@...gle.com>,
Justin Stitt <justinstitt@...gle.com>, Masahiro Yamada <masahiroy@...nel.org>, Tejun Heo <tj@...nel.org>,
Andrew Morton <akpm@...ux-foundation.org>, Yoann Congal <yoann.congal@...le.fr>,
Roman Gushchin <roman.gushchin@...ux.dev>, Jens Axboe <axboe@...nel.dk>,
Chen Ridong <chenridong@...wei.com>, Jann Horn <jannh@...gle.com>,
Mark Rutland <mark.rutland@....com>, Vincent Guittot <vincent.guittot@...aro.org>,
rust-for-linux@...r.kernel.org, llvm@...ts.linux.dev,
Johannes Weiner <hannes@...xchg.org>, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3 1/2] kbuild: rust: add `CONFIG_RUSTC_CLANG_LLVM_COMPATIBLE`
On Wed, Mar 19, 2025 at 4:57 PM Gary Guo <gary@...yguo.net> wrote:
>
> This config detects if Rust and Clang have matching LLVM major version.
> All IR or bitcode operations (e.g. LTO) rely on LLVM major version to be
> matching, otherwise it may generate errors, or worse, miscompile silently
> due to change of IR semantics.
>
> It's usually suggested to use the exact same LLVM version, but this can
> be difficult to guarantee. Rust's suggestion [1] is also major-version only,
> so I think this check is sufficient for the kernel.
>
> Link: https://doc.rust-lang.org/rustc/linker-plugin-lto.html [1]
> Reviewed-by: Andreas Hindborg <a.hindborg@...nel.org>
> Signed-off-by: Gary Guo <gary@...yguo.net>
> ---
> init/Kconfig | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/init/Kconfig b/init/Kconfig
> index d0d021b3fa3b..e76e4ad7d4b9 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -82,6 +82,21 @@ config RUSTC_LLVM_VERSION
> int
> default $(rustc-llvm-version)
>
> +config RUSTC_LLVM_MAJOR_VERSION
> + int
> + default $(shell,expr $(rustc-llvm-version) / 10000)
> +
> +config RUSTC_CLANG_LLVM_COMPATIBLE
> + bool
> + default y if CC_IS_CLANG && RUSTC_LLVM_MAJOR_VERSION = $(shell,expr $(cc-version) / 10000)
> + help
> + This indicates whether Rust and Clang use LLVM of the same major
> + version.
> +
> + Operations involving handling LLVM IR or bitcode (e.g. cross-language
> + LTO) requires the same LLVM major version to work properly. For best
s/requires/require/
> + compatibility it is recommended that the exact same LLVM is used.
nit: s/LLVM/LLVM version/ unless you literally mean the same dylib.
> +
> config CC_CAN_LINK
> bool
> default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(USERCFLAGS) $(USERLDFLAGS) $(m64-flag)) if 64BIT
> --
> 2.47.2
>
>
Reviewed-by: Tamir Duberstein <tamird@...il.com>
Powered by blists - more mailing lists