Re: [PATCH v2 1/3] kbuild: rust: add `CONFIG_RUSTC_CLANG_LLVM_COMPATIBLE`

From: Alice Ryhl
Date: Mon Jan 06 2025 - 04:03:06 EST


On Sun, Jan 5, 2025 at 9:02 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]
> Signed-off-by: Gary Guo <gary@xxxxxxxxxxx>
> ---
> init/Kconfig | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/init/Kconfig b/init/Kconfig
> index a20e6efd3f0f..cbe4b2922ce2 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
> + compatible it is recommended that the exact same LLVM is used.

typo: compatibility

Alice