Re: [PATCH v3 1/2] kbuild: rust: add `CONFIG_RUSTC_CLANG_LLVM_COMPATIBLE`
From: Tamir Duberstein
Date: Wed Mar 19 2025 - 17:15:07 EST
On Wed, Mar 19, 2025 at 4:57 PM Gary Guo <gary@xxxxxxxxxxx> 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@xxxxxxxxxx>
> Signed-off-by: Gary Guo <gary@xxxxxxxxxxx>
> ---
> 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@xxxxxxxxx>