Message ID | 20240902165535.1101978-2-ojeda@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | `RUSTC_VERSION` and re-config/re-build support on compiler change | expand |
On Tue, Sep 3, 2024 at 1:56 AM Miguel Ojeda <ojeda@kernel.org> wrote: > > 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> > Signed-off-by: Miguel Ojeda <ojeda@kernel.org> > --- > init/Kconfig | 7 +++++++ > scripts/rustc-version.sh | 26 ++++++++++++++++++++++++++ > 2 files changed, 33 insertions(+) > create mode 100755 scripts/rustc-version.sh > > diff --git a/init/Kconfig b/init/Kconfig > index 839c83034006..38c1cfcce821 100644 > --- a/init/Kconfig > +++ b/init/Kconfig > @@ -60,6 +60,13 @@ config LLD_VERSION > default $(ld-version) if LD_IS_LLD > 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 > def_bool $(success,$(srctree)/scripts/rust_is_available.sh) > help > diff --git a/scripts/rustc-version.sh b/scripts/rustc-version.sh > new file mode 100755 > index 000000000000..62ea510be71b > --- /dev/null > +++ b/scripts/rustc-version.sh > @@ -0,0 +1,26 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0 > +# > +# Usage: $ ./rustc-version.sh rustc > +# > +# Print the Rust compiler name and its version in a 6 or 7-digit form. This script does not print the name. Only the version. > + > +# 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 > -- > 2.46.0 >
On Thu, Sep 5, 2024 at 3:08 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > This script does not print the name. > > Only the version. Good catch -- fixed! Cheers, Miguel
diff --git a/init/Kconfig b/init/Kconfig index 839c83034006..38c1cfcce821 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -60,6 +60,13 @@ config LLD_VERSION default $(ld-version) if LD_IS_LLD 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 def_bool $(success,$(srctree)/scripts/rust_is_available.sh) help diff --git a/scripts/rustc-version.sh b/scripts/rustc-version.sh new file mode 100755 index 000000000000..62ea510be71b --- /dev/null +++ b/scripts/rustc-version.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# +# Usage: $ ./rustc-version.sh rustc +# +# Print the Rust compiler name and its 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