* [PATCH] rust: add `rustcheck` make target for check-only builds
@ 2025-09-13 10:08 ` Onur Özkan
2025-09-13 10:21 ` Onur
2025-09-13 17:46 ` Andreas Hindborg
0 siblings, 2 replies; 6+ messages in thread
From: Onur Özkan @ 2025-09-13 10:08 UTC (permalink / raw)
To: rust-for-linux
Cc: ojeda, nathan, nicolas.schier, masahiroy, aliceryhl,
thomas.weissschuh, tamird, linux-kbuild, linux-kernel,
alex.gaynor, boqun.feng, gary, bjorn3_gh, lossin, a.hindborg,
tmgross, dakr, Onur Özkan
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
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] rust: add `rustcheck` make target for check-only builds
2025-09-13 10:08 ` [PATCH] rust: add `rustcheck` make target for check-only builds Onur Özkan
@ 2025-09-13 10:21 ` Onur
2025-09-13 17:46 ` Andreas Hindborg
1 sibling, 0 replies; 6+ messages in thread
From: Onur @ 2025-09-13 10:21 UTC (permalink / raw)
To: rust-for-linux
Cc: ojeda, nathan, nicolas.schier, masahiroy, aliceryhl,
thomas.weissschuh, tamird, linux-kbuild, linux-kernel,
alex.gaynor, boqun.feng, gary, bjorn3_gh, lossin, a.hindborg,
tmgross, dakr
On Sat, 13 Sep 2025 13:08:47 +0300
Onur Özkan <work@onurozkan.dev> wrote:
> 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
Seems like I got some indentation issues, will handle in in the next
version after some feedbacks.
-Onur
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] rust: add `rustcheck` make target for check-only builds
2025-09-13 10:08 ` [PATCH] rust: add `rustcheck` make target for check-only builds Onur Özkan
2025-09-13 10:21 ` Onur
@ 2025-09-13 17:46 ` Andreas Hindborg
2025-09-13 19:03 ` Miguel Ojeda
2025-09-15 7:32 ` Onur
1 sibling, 2 replies; 6+ messages in thread
From: Andreas Hindborg @ 2025-09-13 17:46 UTC (permalink / raw)
To: Onur Özkan, rust-for-linux
Cc: ojeda, nathan, nicolas.schier, masahiroy, aliceryhl,
thomas.weissschuh, tamird, linux-kbuild, linux-kernel,
alex.gaynor, boqun.feng, gary, bjorn3_gh, lossin, tmgross, dakr,
Onur Özkan
Onur Özkan <work@onurozkan.dev> writes:
> 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.
>
I think this is a good idea! However, it looks like this target only
checks rust code that live in rust/. Can we also check code that lives
elsewhere, like drivers?
Best regards,
Andreas Hindborg
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] rust: add `rustcheck` make target for check-only builds
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
1 sibling, 1 reply; 6+ messages in thread
From: Miguel Ojeda @ 2025-09-13 19:03 UTC (permalink / raw)
To: Andreas Hindborg
Cc: Onur Özkan, rust-for-linux, ojeda, nathan, nicolas.schier,
masahiroy, aliceryhl, thomas.weissschuh, tamird, linux-kbuild,
linux-kernel, alex.gaynor, boqun.feng, gary, bjorn3_gh, lossin,
tmgross, dakr
On Sat, Sep 13, 2025 at 7:46 PM Andreas Hindborg <a.hindborg@kernel.org> wrote:
>
> I think this is a good idea! However, it looks like this target only
> checks rust code that live in rust/. Can we also check code that lives
> elsewhere, like drivers?
That is more involved, and I don't plan to add features to the current
system, sorry.
Cheers,
Miguel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] rust: add `rustcheck` make target for check-only builds
2025-09-13 19:03 ` Miguel Ojeda
@ 2025-09-14 11:48 ` Andreas Hindborg
0 siblings, 0 replies; 6+ messages in thread
From: Andreas Hindborg @ 2025-09-14 11:48 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Onur Özkan, rust-for-linux, ojeda, nathan, nicolas.schier,
masahiroy, aliceryhl, thomas.weissschuh, tamird, linux-kbuild,
linux-kernel, alex.gaynor, boqun.feng, gary, bjorn3_gh, lossin,
tmgross, dakr
"Miguel Ojeda" <miguel.ojeda.sandonis@gmail.com> writes:
> On Sat, Sep 13, 2025 at 7:46 PM Andreas Hindborg <a.hindborg@kernel.org> wrote:
>>
>> I think this is a good idea! However, it looks like this target only
>> checks rust code that live in rust/. Can we also check code that lives
>> elsewhere, like drivers?
>
> That is more involved, and I don't plan to add features to the current
> system, sorry.
I assume you are referring to the upcoming rust build system changes. Any
idea when these will land? Will it be possible to implement a check
feature when the changes land?
Best regards,
Andreas Hindborg
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] rust: add `rustcheck` make target for check-only builds
2025-09-13 17:46 ` Andreas Hindborg
2025-09-13 19:03 ` Miguel Ojeda
@ 2025-09-15 7:32 ` Onur
1 sibling, 0 replies; 6+ messages in thread
From: Onur @ 2025-09-15 7:32 UTC (permalink / raw)
To: Andreas Hindborg
Cc: rust-for-linux, ojeda, nathan, nicolas.schier, masahiroy,
aliceryhl, thomas.weissschuh, tamird, linux-kbuild, linux-kernel,
alex.gaynor, boqun.feng, gary, bjorn3_gh, lossin, tmgross, dakr
On Sat, 13 Sep 2025 19:46:28 +0200
Andreas Hindborg <a.hindborg@kernel.org> wrote:
> Onur Özkan <work@onurozkan.dev> writes:
>
> > 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.
> >
>
> I think this is a good idea! However, it looks like this target only
> checks rust code that live in rust/. Can we also check code that lives
> elsewhere, like drivers?
>
My work depends on the existing build system and that system doesn't
allow me to do that (yet).
Regards,
Onur
>
> Best regards,
> Andreas Hindborg
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-09-15 7:32 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <-ebVaoKp9tTjZGmdSRi8rrH1o7SgmGyyzk-g2ALSCBKPJP44z7dSPCplhwKt-sibwLwqP7IPEml6qCkSpJhd8g==@protonmail.internalid>
2025-09-13 10:08 ` [PATCH] rust: add `rustcheck` make target for check-only builds Onur Özkan
2025-09-13 10:21 ` 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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).