Skip to content

Commit 6e74c6b

Browse files
committed
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 613fe16 ("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/[email protected]/ [2] Reviewed-by: Nicolas Schier <[email protected]> Tested-by: Alice Ryhl <[email protected]> Acked-by: Masahiro Yamada <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Miguel Ojeda <[email protected]>
1 parent ab309b6 commit 6e74c6b

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

init/Kconfig

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ config LLD_VERSION
6060
default $(ld-version) if LD_IS_LLD
6161
default 0
6262

63+
config RUSTC_VERSION
64+
int
65+
default $(shell,$(srctree)/scripts/rustc-version.sh $(RUSTC))
66+
help
67+
It does not depend on `RUST` since that one may need to use the version
68+
in a `depends on`.
69+
6370
config RUST_IS_AVAILABLE
6471
def_bool $(success,$(srctree)/scripts/rust_is_available.sh)
6572
help

scripts/rustc-version.sh

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/bin/sh
2+
# SPDX-License-Identifier: GPL-2.0
3+
#
4+
# Usage: $ ./rustc-version.sh rustc
5+
#
6+
# Print the Rust compiler version in a 6 or 7-digit form.
7+
8+
# Convert the version string x.y.z to a canonical up-to-7-digits form.
9+
#
10+
# Note that this function uses one more digit (compared to other
11+
# instances in other version scripts) to give a bit more space to
12+
# `rustc` since it will reach 1.100.0 in late 2026.
13+
get_canonical_version()
14+
{
15+
IFS=.
16+
set -- $1
17+
echo $((100000 * $1 + 100 * $2 + $3))
18+
}
19+
20+
if output=$("$@" --version 2>/dev/null); then
21+
set -- $output
22+
get_canonical_version $2
23+
else
24+
echo 0
25+
exit 1
26+
fi

0 commit comments

Comments
 (0)