Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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 613fe1692377
("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>

+33
+7
init/Kconfig
··· 60 60 default $(ld-version) if LD_IS_LLD 61 61 default 0 62 62 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 + 63 70 config RUST_IS_AVAILABLE 64 71 def_bool $(success,$(srctree)/scripts/rust_is_available.sh) 65 72 help
+26
scripts/rustc-version.sh
··· 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