kbuild: rust: add CONFIG_RUSTC_VERSION
Now that we support several Rust versions, introduce
`CONFIG_RUSTC_VERSION` so that it can be used in Kconfig to enable and
disable configuration options based on the `rustc` version.
The approach taken resembles `pahole`'s -- see commit 613fe16923
("kbuild: Add CONFIG_PAHOLE_VERSION"), i.e. a simple version parsing
without trying to identify several kinds of compilers, since so far
there is only one (`rustc`).
However, unlike `pahole`'s, we also print a zero if executing failed for
any reason, rather than checking if the command is found and executable
(which still leaves things like a file that exists and is executable,
but e.g. is built for another platform [1]). An equivalent approach to
the one here was also submitted for `pahole` [2].
Link: https://lore.kernel.org/rust-for-linux/CANiq72=4vX_tJMJLE6e+bg7ZECHkS-AQpm8GBzuK75G1EB7+Nw@mail.gmail.com/ [1]
Link: https://lore.kernel.org/linux-kbuild/20240728125527.690726-1-ojeda@kernel.org/ [2]
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
Tested-by: Alice Ryhl <aliceryhl@google.com>
Acked-by: Masahiro Yamada <masahiroy@kernel.org>
Link: https://lore.kernel.org/r/20240902165535.1101978-2-ojeda@kernel.org
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
parent
ab309b6e08
commit
6e74c6b5a4
@ -60,6 +60,13 @@ config LLD_VERSION
|
|||||||
default $(ld-version) if LD_IS_LLD
|
default $(ld-version) if LD_IS_LLD
|
||||||
default 0
|
default 0
|
||||||
|
|
||||||
|
config RUSTC_VERSION
|
||||||
|
int
|
||||||
|
default $(shell,$(srctree)/scripts/rustc-version.sh $(RUSTC))
|
||||||
|
help
|
||||||
|
It does not depend on `RUST` since that one may need to use the version
|
||||||
|
in a `depends on`.
|
||||||
|
|
||||||
config RUST_IS_AVAILABLE
|
config RUST_IS_AVAILABLE
|
||||||
def_bool $(success,$(srctree)/scripts/rust_is_available.sh)
|
def_bool $(success,$(srctree)/scripts/rust_is_available.sh)
|
||||||
help
|
help
|
||||||
|
26
scripts/rustc-version.sh
Executable file
26
scripts/rustc-version.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
#
|
||||||
|
# Usage: $ ./rustc-version.sh rustc
|
||||||
|
#
|
||||||
|
# Print the Rust compiler version in a 6 or 7-digit form.
|
||||||
|
|
||||||
|
# Convert the version string x.y.z to a canonical up-to-7-digits form.
|
||||||
|
#
|
||||||
|
# Note that this function uses one more digit (compared to other
|
||||||
|
# instances in other version scripts) to give a bit more space to
|
||||||
|
# `rustc` since it will reach 1.100.0 in late 2026.
|
||||||
|
get_canonical_version()
|
||||||
|
{
|
||||||
|
IFS=.
|
||||||
|
set -- $1
|
||||||
|
echo $((100000 * $1 + 100 * $2 + $3))
|
||||||
|
}
|
||||||
|
|
||||||
|
if output=$("$@" --version 2>/dev/null); then
|
||||||
|
set -- $output
|
||||||
|
get_canonical_version $2
|
||||||
|
else
|
||||||
|
echo 0
|
||||||
|
exit 1
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user