From patchwork Mon Sep 2 16:55:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miguel Ojeda X-Patchwork-Id: 13787526 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DF49718028; Mon, 2 Sep 2024 16:56:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725296163; cv=none; b=kYjr3gBLeRANj94KeN+luWzdbiX/5xUn5lvbphAMXJn5PT9cQbtTN7ZzGbkkw34QfKlu/sRK57adWqNfGybTyBK9gts+n4RCKkzoO6WHR44J4SveZI9J41mZj8s+VPsFm3ypXnpbvwTFZxGvnC2gxYOHwGnVJPK+HF5BGTMLY0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725296163; c=relaxed/simple; bh=OPfqn3z0R6G80BF+F0Is94BhMTckTTROfEsTDwttcwQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ctpPz90Z/fhu7xSprEFd80pqPlr4vcEhuNv8GFlHAZUeijBxrMa742tKfF0WRwmcchJqYF06HRsKjnbCskXi20XOkWc2hI7RIFEg8EXSEBuAmPUgXzZCNlGGnN8hYnN2/8uvdp6Mdk0h95cDbxe38E91Ip7QQpeJ0/r4JGusj18= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=O1/XA2T+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="O1/XA2T+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 463B9C4CEC4; Mon, 2 Sep 2024 16:55:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1725296162; bh=OPfqn3z0R6G80BF+F0Is94BhMTckTTROfEsTDwttcwQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O1/XA2T+iWYzGRceF4UMC9ztBvI1WXW6LESJX6N5HL5uGF4UC59qf3hX3cYUe3ixn lUIAYgydwC098my2ArigaMCyHiN0HaJg5h+dfNm3WUqbRYhx97MVQbCPC6XBsYftrO 0Mk5pMHpTKDA2dKNgYGTKsZI49cPxGEonWMC/iFV2f4us7SV1ZYTVrznIM5755sTSK bEn4//mADwR5sKkdF0UAKU3p5LoUFFstZgDVfjy9OLIctcMj+B6XZbIneg5HIJNFtp CIBl1dpbpSkerSvdzuHG5hkGVb1IxqjJCyRpbs1Qxza3q2Mc1GbTMa8N8KyaQDCX4h hC3na/kevgCvQ== From: Miguel Ojeda To: Miguel Ojeda , Alex Gaynor , Wedson Almeida Filho , Masahiro Yamada Cc: Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , rust-for-linux@vger.kernel.org, Nathan Chancellor , Nicolas Schier , linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev Subject: [PATCH v2 1/6] kbuild: rust: add `CONFIG_RUSTC_VERSION` Date: Mon, 2 Sep 2024 18:55:28 +0200 Message-ID: <20240902165535.1101978-2-ojeda@kernel.org> In-Reply-To: <20240902165535.1101978-1-ojeda@kernel.org> References: <20240902165535.1101978-1-ojeda@kernel.org> Precedence: bulk X-Mailing-List: linux-kbuild@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 Tested-by: Alice Ryhl Signed-off-by: Miguel Ojeda --- 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. + +# 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