From: "Onur Özkan" <work@onurozkan.dev>
To: rust-for-linux@vger.kernel.org
Cc: ojeda@kernel.org, nathan@kernel.org, nicolas.schier@linux.dev,
masahiroy@kernel.org, aliceryhl@google.com,
thomas.weissschuh@linutronix.de, tamird@gmail.com,
linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
alex.gaynor@gmail.com, boqun.feng@gmail.com, gary@garyguo.net,
bjorn3_gh@protonmail.com, lossin@kernel.org,
a.hindborg@kernel.org, tmgross@umich.edu, dakr@kernel.org,
"Onur Özkan" <work@onurozkan.dev>
Subject: [PATCH] rust: add `rustcheck` make target for check-only builds
Date: Sat, 13 Sep 2025 13:08:47 +0300 [thread overview]
Message-ID: <20250913100847.9234-1-work@onurozkan.dev> (raw)
Adds a new `rustcheck` make target to run a check-only build
similar to `cargo check`. This allows us to verify that the Rust
sources can build without building/linking final artifacts,
which speeds up the iteration (a lot) during development.
The target supports the same flags as other Rust build rules, so
it can also be used with `CLIPPY=1` (e.g., `make LLVM=1 rustcheck
CLIPPY=1) to run Clippy in a faster way.
Also, unlike `make LLVM=1`, it doesn't compile large amounts of C
code (on a fresh checkout) when the goal is only to check that
Rust builds are not broken after some changes.
Suggested-by: Benno Losin <lossin@kernel.org>
Link: https://rust-for-linux.zulipchat.com/#narrow/channel/288089/topic/x/near/539103602
Signed-off-by: Onur Özkan <work@onurozkan.dev>
---
Makefile | 7 +++++
rust/Makefile | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 80 insertions(+)
diff --git a/Makefile b/Makefile
index cf37b9407821..7812cdc72938 100644
--- a/Makefile
+++ b/Makefile
@@ -1716,6 +1716,8 @@ help:
@echo ' is formatted, printing a diff otherwise.'
@echo ' rustdoc - Generate Rust documentation'
@echo ' (requires kernel .config)'
+ @echo ' rustcheck - Check that the Rust code builds'
+ @echo ' (requires kernel .config)'
@echo ' rusttest - Runs the Rust tests'
@echo ' (requires kernel .config; downloads external repos)'
@echo ' rust-analyzer - Generate rust-project.json rust-analyzer support file'
@@ -1821,6 +1823,11 @@ PHONY += rustdoc
rustdoc: prepare
$(Q)$(MAKE) $(build)=rust $@
+# Checking Rust sources.
+PHONY += rustcheck
+rustcheck: prepare0
+ $(Q)$(MAKE) $(build)=rust $@
+
# Testing target
PHONY += rusttest
rusttest: prepare
diff --git a/rust/Makefile b/rust/Makefile
index bfa915b0e588..c148ef4a8c08 100644
--- a/rust/Makefile
+++ b/rust/Makefile
@@ -265,6 +265,79 @@ rusttest-kernel: $(src)/kernel/lib.rs rusttestlib-ffi rusttestlib-kernel \
rusttestlib-uapi rusttestlib-pin_init FORCE
+$(call if_changed,rustc_test)
+## Check-only compilation (similar to `cargo check`)
+quiet_cmd_rustc_check_library = $(RUSTC_OR_CLIPPY_QUIET) CHECK $<
+ cmd_rustc_check_library = \
+ OBJTREE=$(abspath $(objtree)) \
+ $(RUSTC_OR_CLIPPY) $(rust_common_flags) \
+ @$(objtree)/include/generated/rustc_cfg $(rustc_target_flags) \
+ --crate-type $(if $(rustc_check_library_proc),proc-macro,rlib) \
+ $(if $(rustc_check_library_proc),,--emit=metadata) \
+ --out-dir $(objtree)/$(obj)/check -L$(objtree)/$(obj)/check \
+ --crate-name $(if $(rustc_check_crate_name),$(rustc_check_crate_name), \
+ $(subst rustcheck-,,$(subst rustchecklib-,,$@))) $<
+
+rustcheck: rustchecklib-build_error rustchecklib-ffi rustchecklib-macros \
+ rustchecklib-compiler_builtins rustchecklib-pin_init_internal \
+ rustchecklib-pin_init rustchecklib-bindings rustchecklib-uapi \
+ rustchecklib-kernel
+
+rustchecklib-build_error: $(src)/build_error.rs FORCE
+ +$(call if_changed,rustc_check_library)
+
+rustchecklib-ffi: $(src)/ffi.rs FORCE
+ +$(call if_changed,rustc_check_library)
+
+rustchecklib-macros: private rustc_target_flags = --extern proc_macro
+rustchecklib-macros: private rustc_check_library_proc = yes
+rustchecklib-macros: $(src)/macros/lib.rs FORCE
+ +$(call if_changed,rustc_check_library)
+
+rustchecklib-compiler_builtins: private rustc_check_crate_name = compiler_builtins_kernel
+rustchecklib-compiler_builtins: $(src)/compiler_builtins.rs FORCE
+ +$(call if_changed,rustc_check_library)
+
+rustchecklib-pin_init_internal: private rustc_target_flags = --cfg kernel \
+ --extern proc_macro
+rustchecklib-pin_init_internal: private rustc_check_library_proc = yes
+rustchecklib-pin_init_internal: $(src)/pin-init/internal/src/lib.rs FORCE
+ +$(call if_changed,rustc_check_library)
+
+rustchecklib-pin_init: private rustc_target_flags = --extern pin_init_internal \
+ --extern macros --cfg kernel
+rustchecklib-pin_init: $(src)/pin-init/src/lib.rs rustchecklib-macros \
+ rustchecklib-pin_init_internal FORCE
+ +$(call if_changed,rustc_check_library)
+
+rustchecklib-bindings: private rustc_target_flags = --extern ffi
+rustchecklib-bindings: $(src)/bindings/lib.rs \
+ $(obj)/bindings/bindings_generated.rs \
+ $(obj)/bindings/bindings_helpers_generated.rs \
+ rustchecklib-ffi FORCE
+ +$(call if_changed,rustc_check_library)
+
+rustchecklib-uapi: private rustc_target_flags = --extern ffi
+rustchecklib-uapi: $(src)/uapi/lib.rs $(obj)/uapi/uapi_generated.rs \
+ rustchecklib-ffi FORCE
+ +$(call if_changed,rustc_check_library)
+
+ifdef CONFIG_JUMP_LABEL
+rustchecklib-kernel: $(obj)/kernel/generated_arch_static_branch_asm.rs FORCE
+endif
+ifndef CONFIG_UML
+ifdef CONFIG_BUG
+rustchecklib-kernel: $(obj)/kernel/generated_arch_warn_asm.rs \
+ $(obj)/kernel/generated_arch_reachable_asm.rs FORCE
+endif
+endif
+
+rustchecklib-kernel: private rustc_target_flags = --extern ffi --extern pin_init \
+ --extern build_error --extern macros --extern bindings --extern uapi
+rustchecklib-kernel: $(src)/kernel/lib.rs rustchecklib-ffi rustchecklib-pin_init \
+ rustchecklib-build_error rustchecklib-macros rustchecklib-bindings \
+ rustchecklib-uapi FORCE
+ +$(call if_changed,rustc_check_library)
+
ifdef CONFIG_CC_IS_CLANG
bindgen_c_flags = $(c_flags)
else
--
2.51.0
next reply other threads:[~2025-09-13 10:15 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <-ebVaoKp9tTjZGmdSRi8rrH1o7SgmGyyzk-g2ALSCBKPJP44z7dSPCplhwKt-sibwLwqP7IPEml6qCkSpJhd8g==@protonmail.internalid>
2025-09-13 10:08 ` Onur Özkan [this message]
2025-09-13 10:21 ` [PATCH] rust: add `rustcheck` make target for check-only builds Onur
2025-09-13 17:46 ` Andreas Hindborg
2025-09-13 19:03 ` Miguel Ojeda
2025-09-14 11:48 ` Andreas Hindborg
2025-09-15 7:32 ` Onur
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=20250913100847.9234-1-work@onurozkan.dev \
--to=work@onurozkan.dev \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=masahiroy@kernel.org \
--cc=nathan@kernel.org \
--cc=nicolas.schier@linux.dev \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tamird@gmail.com \
--cc=thomas.weissschuh@linutronix.de \
--cc=tmgross@umich.edu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.