kbuild: rust: add CONFIG_RUSTC_LLVM_VERSION
Each version of Rust supports a range of LLVM versions. There are cases where we want to gate a config on the LLVM version instead of the Rust version. Normalized cfi integer tags are one example [1]. The invocation of rustc-version is being moved from init/Kconfig to scripts/Kconfig.include for consistency with cc-version. Link: https://lore.kernel.org/all/20240925-cfi-norm-kasan-fix-v1-1-0328985cdf33@google.com/ [1] Signed-off-by: Gary Guo <gary@garyguo.net> Link: https://lore.kernel.org/r/20241011114040.3900487-1-gary@garyguo.net [ Added missing `-llvm` to the Usage documentation. - Miguel ] Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
parent
e72a076c62
commit
af0121c2d3
@ -62,7 +62,7 @@ config LLD_VERSION
|
|||||||
|
|
||||||
config RUSTC_VERSION
|
config RUSTC_VERSION
|
||||||
int
|
int
|
||||||
default $(shell,$(srctree)/scripts/rustc-version.sh $(RUSTC))
|
default $(rustc-version)
|
||||||
help
|
help
|
||||||
It does not depend on `RUST` since that one may need to use the version
|
It does not depend on `RUST` since that one may need to use the version
|
||||||
in a `depends on`.
|
in a `depends on`.
|
||||||
@ -78,6 +78,10 @@ config RUST_IS_AVAILABLE
|
|||||||
In particular, the Makefile target 'rustavailable' is useful to check
|
In particular, the Makefile target 'rustavailable' is useful to check
|
||||||
why the Rust toolchain is not being detected.
|
why the Rust toolchain is not being detected.
|
||||||
|
|
||||||
|
config RUSTC_LLVM_VERSION
|
||||||
|
int
|
||||||
|
default $(rustc-llvm-version)
|
||||||
|
|
||||||
config CC_CAN_LINK
|
config CC_CAN_LINK
|
||||||
bool
|
bool
|
||||||
default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(USERCFLAGS) $(USERLDFLAGS) $(m64-flag)) if 64BIT
|
default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(USERCFLAGS) $(USERLDFLAGS) $(m64-flag)) if 64BIT
|
||||||
|
@ -65,6 +65,9 @@ cc-option-bit = $(if-success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null,$
|
|||||||
m32-flag := $(cc-option-bit,-m32)
|
m32-flag := $(cc-option-bit,-m32)
|
||||||
m64-flag := $(cc-option-bit,-m64)
|
m64-flag := $(cc-option-bit,-m64)
|
||||||
|
|
||||||
|
rustc-version := $(shell,$(srctree)/scripts/rustc-version.sh $(RUSTC))
|
||||||
|
rustc-llvm-version := $(shell,$(srctree)/scripts/rustc-llvm-version.sh $(RUSTC))
|
||||||
|
|
||||||
# $(rustc-option,<flag>)
|
# $(rustc-option,<flag>)
|
||||||
# Return y if the Rust compiler supports <flag>, n otherwise
|
# Return y if the Rust compiler supports <flag>, n otherwise
|
||||||
# Calls to this should be guarded so that they are not evaluated if
|
# Calls to this should be guarded so that they are not evaluated if
|
||||||
|
22
scripts/rustc-llvm-version.sh
Executable file
22
scripts/rustc-llvm-version.sh
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
#
|
||||||
|
# Usage: $ ./rustc-llvm-version.sh rustc
|
||||||
|
#
|
||||||
|
# Print the LLVM version that the Rust compiler uses in a 6 digit form.
|
||||||
|
|
||||||
|
# Convert the version string x.y.z to a canonical up-to-6-digits form.
|
||||||
|
get_canonical_version()
|
||||||
|
{
|
||||||
|
IFS=.
|
||||||
|
set -- $1
|
||||||
|
echo $((10000 * $1 + 100 * $2 + $3))
|
||||||
|
}
|
||||||
|
|
||||||
|
if output=$("$@" --version --verbose 2>/dev/null | grep LLVM); then
|
||||||
|
set -- $output
|
||||||
|
get_canonical_version $3
|
||||||
|
else
|
||||||
|
echo 0
|
||||||
|
exit 1
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user