public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Miguel Ojeda <ojeda@kernel.org>
To: Miguel Ojeda <ojeda@kernel.org>,
	Alex Gaynor <alex.gaynor@gmail.com>,
	Wedson Almeida Filho <wedsonaf@gmail.com>,
	Masahiro Yamada <masahiroy@kernel.org>
Cc: "Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <benno.lossin@proton.me>,
	"Andreas Hindborg" <a.hindborg@samsung.com>,
	"Alice Ryhl" <aliceryhl@google.com>,
	rust-for-linux@vger.kernel.org,
	"Nathan Chancellor" <nathan@kernel.org>,
	"Nicolas Schier" <nicolas@fjasle.eu>,
	linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	patches@lists.linux.dev
Subject: [PATCH v2 5/6] kbuild: rust: warn if the out-of-tree compiler differs from the kernel one
Date: Mon,  2 Sep 2024 18:55:32 +0200	[thread overview]
Message-ID: <20240902165535.1101978-6-ojeda@kernel.org> (raw)
In-Reply-To: <20240902165535.1101978-1-ojeda@kernel.org>

For out-of-tree modules, in the C side, Kbuild warns if the C compiler
differs from the one used to build the kernel.

Do the same for Rust, except that we add the extra condition that Rust
support was enabled in the kernel.

For instance, the output will look like:

    warning: the Rust compiler differs from the one used to build the kernel
      The kernel was built by: rustc 1.78.0 (9b00956e5 2024-04-29)
      You are using:           rustc 1.79.0 (129f3b996 2024-06-10)

Note that the build will fail later anyway in such a case, since the
Rust compiler checks for incompatible Rust versions, e.g.:

      RUSTC [M] rust-out-of-tree-module/rust_out_of_tree.o
    error[E0514]: found crate `core` compiled by an incompatible version of rustc
      |
      = note: the following crate versions were found:
              crate `core` compiled by rustc 1.78.0 (9b00956e5 2024-04-29): rust/libcore.rmeta
      = help: please recompile that crate using this compiler (rustc 1.79.0 (129f3b996 2024-06-10)) (consider running `cargo clean` first)

Nevertheless, the added warning at the top should hopefully make the
situation clearer.

The extra condition on `CONFIG_RUST=y` is added since otherwise users
would get warnings when a Rust compiler is reachable, e.g. the most
likely case today is that they are building a C module for a kernel that
does not have Rust enabled.

However, if Rust was indeed enabled, then we do print the warning in
all cases, e.g. even if they are building a C module. While it may not
matter in some cases, it may still be a sign that something unexpectedly
changed in the environment they may want to be aware of:

    warning: the Rust compiler differs from the one used to build the kernel
      The kernel was built by: rustc 1.78.0 (9b00956e5 2024-04-29)
      You are using:           rustc 1.79.0 (129f3b996 2024-06-10)
      CC [M]  c-out-of-tree-module/c_out_of_tree.o

Note that the check will also trigger for cases where the user does not
have the Rust compiler installed, including when building a C module:

    warning: the Rust compiler differs from the one used to build the kernel
      The kernel was built by: rustc 1.78.0 (9b00956e5 2024-04-29)
      You are using:
      CC [M]  c-out-of-tree-module/c_out_of_tree.o

Suggested-by: Nicolas Schier <nicolas@fjasle.eu>
Link: https://lore.kernel.org/rust-for-linux/20240817-heavy-dancing-whale-6ae13d@lindesnes/
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
---
 Makefile | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 1883aeb919a4..e3fcc7028c5f 100644
--- a/Makefile
+++ b/Makefile
@@ -1794,14 +1794,20 @@ clean: private rm-files := $(KBUILD_EXTMOD)/Module.symvers $(KBUILD_EXTMOD)/modu
 	$(KBUILD_EXTMOD)/compile_commands.json
 
 PHONY += prepare
-# now expand this into a simple variable to reduce the cost of shell evaluations
+# now expand these into simple variables to reduce the cost of shell evaluations
 prepare: CC_VERSION_TEXT := $(CC_VERSION_TEXT)
+prepare: RUSTC_VERSION_TEXT := $(RUSTC_VERSION_TEXT)
 prepare:
 	@if [ "$(CC_VERSION_TEXT)" != "$(CONFIG_CC_VERSION_TEXT)" ]; then \
-		echo >&2 "warning: the compiler differs from the one used to build the kernel"; \
+		echo >&2 "warning: the C compiler differs from the one used to build the kernel"; \
 		echo >&2 "  The kernel was built by: $(CONFIG_CC_VERSION_TEXT)"; \
 		echo >&2 "  You are using:           $(CC_VERSION_TEXT)"; \
 	fi
+	@if [ "$(CONFIG_RUST)" = "y" -a "$(RUSTC_VERSION_TEXT)" != "$(CONFIG_RUSTC_VERSION_TEXT)" ]; then \
+		echo >&2 "warning: the Rust compiler differs from the one used to build the kernel"; \
+		echo >&2 "  The kernel was built by: $(CONFIG_RUSTC_VERSION_TEXT)"; \
+		echo >&2 "  You are using:           $(RUSTC_VERSION_TEXT)"; \
+	fi
 
 PHONY += help
 help:
-- 
2.46.0


  parent reply	other threads:[~2024-09-02 16:56 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-02 16:55 [PATCH v2 0/6] `RUSTC_VERSION` and re-config/re-build support on compiler change Miguel Ojeda
2024-09-02 16:55 ` [PATCH v2 1/6] kbuild: rust: add `CONFIG_RUSTC_VERSION` Miguel Ojeda
2024-09-05  1:08   ` Masahiro Yamada
2024-09-05 20:46     ` Miguel Ojeda
2024-09-02 16:55 ` [PATCH v2 2/6] kbuild: rust: re-run Kconfig if the version text changes Miguel Ojeda
2024-09-02 16:55 ` [PATCH v2 3/6] kbuild: rust: rebuild " Miguel Ojeda
2024-09-02 16:55 ` [PATCH v2 4/6] kbuild: rust: replace proc macros dependency on `core.o` with the version text Miguel Ojeda
2024-09-02 16:55 ` Miguel Ojeda [this message]
2024-09-02 16:55 ` [PATCH v2 6/6] docs: rust: include other expressions in conditional compilation section Miguel Ojeda
2024-09-03 11:35 ` [PATCH v2 0/6] `RUSTC_VERSION` and re-config/re-build support on compiler change Alice Ryhl
2024-09-03 11:36   ` Miguel Ojeda
2024-09-04 19:32 ` Nicolas Schier
2024-09-04 21:15   ` Miguel Ojeda
2024-09-04 21:15 ` Miguel Ojeda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240902165535.1101978-6-ojeda@kernel.org \
    --to=ojeda@kernel.org \
    --cc=a.hindborg@samsung.com \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=benno.lossin@proton.me \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=gary@garyguo.net \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=nathan@kernel.org \
    --cc=nicolas@fjasle.eu \
    --cc=patches@lists.linux.dev \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=wedsonaf@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox