Skip to contentSkip to conversation

rust: proc-macro2: rebuild if the version text changes

PATCH Applied Miguel Ojeda 4 participants 5 messages Jan 22 – Jan 23

Subsystems (2)
lore
Share & tools
lore

Miguel Ojeda

author maintainer
#0 lore raw

PATCH 1/1 rust: proc-macro2: rebuild if the version text changes

The Rust compiler cannot use dependencies built by other versions, e.g.:

    error[E0514]: found crate `proc_macro2` compiled by an incompatible version of rustc
     --> rust/quote/ext.rs:5:5
      |
    5 | use proc_macro2::{TokenStream, TokenTree};
      |     ^^^^^^^^^^^
      |
      = note: the following crate versions were found:
              crate `proc_macro2` compiled by rustc 1.92.0 (ded5c06cf 2025-12-08): ./rust/libproc_macro2.rlib
      = help: please recompile that crate using this compiler (rustc 1.93.0 (254b59607 2026-01-19)) (consider running `cargo clean` first)

Thus trigger a rebuild if the version text changes like we do in other top-level cases (e.g. see commit aeb0e24abbeb ("kbuild: rust: replace proc macros dependency on core.o with the version text")).

The build errors for now are hard to trigger, since we do not yet use the new crates we just introduced (the use cases are coming in the next merge window), but they can still be seen if e.g. one manually removes one of the targets, so fix it already.

Fixes 158a3b72118a ("rust: proc-macro2: enable support in kbuild")
---
 rust/proc-macro2/lib.rs | 4 ++++
 1 file changed, 4 insertions(+)
rust/proc-macro2/lib.rs +4 -0
index 7b78d065d51c..5d408943fa0d 100644
@@ -1,5 +1,9 @@
 // SPDX-License-Identifier: Apache-2.0 OR MIT
 
+// When fixdep scans this, it will find this string `CONFIG_RUSTC_VERSION_TEXT`
+// and thus add a dependency on `include/config/RUSTC_VERSION_TEXT`, which is
+// touched by Kconfig when the version string from the compiler changes.
+
 //! [![github]](https://github.com/dtolnay/proc-macro2) [![crates-io]](https://crates.io/crates/proc-macro2) [![docs-rs]](crate)
 //!
 //! [github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=github

base-commit: 2af6ad09fc7dfe9b3610100983cccf16998bf34d

Signature · 1 line
2.52.0
reviewer Reviewed-by on v1 1/1
#1 lore raw
Quoted 16 lines · Miguel Ojeda

The Rust compiler cannot use dependencies built by other versions, e.g.:

    error[E0514]: found crate `proc_macro2` compiled by an incompatible version of rustc
     --> rust/quote/ext.rs:5:5
      |
    5 | use proc_macro2::{TokenStream, TokenTree};
      |     ^^^^^^^^^^^
      |
      = note: the following crate versions were found:
              crate `proc_macro2` compiled by rustc 1.92.0 (ded5c06cf 2025-12-08): ./rust/libproc_macro2.rlib
      = help: please recompile that crate using this compiler (rustc 1.93.0 (254b59607 2026-01-19)) (consider running `cargo clean` first)

Thus trigger a rebuild if the version text changes like we do in other top-level cases (e.g. see commit aeb0e24abbeb ("kbuild: rust: replace proc macros dependency on core.o with the version text")).

Quoted 7 lines

The build errors for now are hard to trigger, since we do not yet use the new crates we just introduced (the use cases are coming in the next merge window), but they can still be seen if e.g. one manually removes one of the targets, so fix it already.

Fixes 158a3b72118a ("rust: proc-macro2: enable support in kbuild")
reviewer
#2 lore raw
In reply to Miguel Ojeda
Quoted 32 lines · Miguel Ojeda

The Rust compiler cannot use dependencies built by other versions, e.g.:

    error[E0514]: found crate `proc_macro2` compiled by an incompatible version of rustc
     --> rust/quote/ext.rs:5:5
      |
    5 | use proc_macro2::{TokenStream, TokenTree};
      |     ^^^^^^^^^^^
      |
      = note: the following crate versions were found:
              crate `proc_macro2` compiled by rustc 1.92.0 (ded5c06cf 2025-12-08): ./rust/libproc_macro2.rlib
      = help: please recompile that crate using this compiler (rustc 1.93.0 (254b59607 2026-01-19)) (consider running `cargo clean` first)

Thus trigger a rebuild if the version text changes like we do in other top-level cases (e.g. see commit aeb0e24abbeb ("kbuild: rust: replace proc macros dependency on core.o with the version text")).

The build errors for now are hard to trigger, since we do not yet use the new crates we just introduced (the use cases are coming in the next merge window), but they can still be seen if e.g. one manually removes one of the targets, so fix it already.

Fixes 158a3b72118a ("rust: proc-macro2: enable support in kbuild")
---
 rust/proc-macro2/lib.rs | 4 ++++
 1 file changed, 4 insertions(+)
rust/proc-macro2/lib.rs +0 -0
index 7b78d065d51c..5d408943fa0d 100644

rust/proc-macro2/lib.rs line 5

Quoted 5 lines
rust/proc-macro2/lib.rs +3 -0
@@ -1,5 +1,9 @@
 // SPDX-License-Identifier: Apache-2.0 OR MIT
 
+// When fixdep scans this, it will find this string `CONFIG_RUSTC_VERSION_TEXT`
+// and thus add a dependency on `include/config/RUSTC_VERSION_TEXT`, which is
+// touched by Kconfig when the version string from the compiler changes.

We use the same trick for multiple crates now. Is this something that can done in Makefile or it has to be in the source?

Best,
Gary

Quoted 6 lines
rust/proc-macro2/lib.rs +1 -0
+
 //! [![github]](https://github.com/dtolnay/proc-macro2) [![crates-io]](https://crates.io/crates/proc-macro2) [![docs-rs]](crate)
 //!
 //! [github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=github

base-commit: 2af6ad09fc7dfe9b3610100983cccf16998bf34d

#3 lore raw
Quoted 3 lines · Gary Guo

We use the same trick for multiple crates now. Is this something that can done in Makefile or it has to be in the source?

Good question: it can (we do it for core), but Kbuild preferred we avoid it since it is considered an implementation detail, so I only use that way for core.o since we cannot apply it in that case since we don't control the sources.

Having said that, for the new build system, I would prefer to ideally generate this automatically (and then it shouldn't be a problem to depend on that since it would be a "single" place to update it).

Cheers,
Miguel

Applied
#4 lore raw
In reply to Miguel Ojeda
Quoted 17 lines · Miguel Ojeda

The Rust compiler cannot use dependencies built by other versions, e.g.:

    error[E0514]: found crate `proc_macro2` compiled by an incompatible version of rustc
     --> rust/quote/ext.rs:5:5
      |
    5 | use proc_macro2::{TokenStream, TokenTree};
      |     ^^^^^^^^^^^
      |
      = note: the following crate versions were found:
              crate `proc_macro2` compiled by rustc 1.92.0 (ded5c06cf 2025-12-08): ./rust/libproc_macro2.rlib
      = help: please recompile that crate using this compiler (rustc 1.93.0 (254b59607 2026-01-19)) (consider running `cargo clean` first)

Thus trigger a rebuild if the version text changes like we do in other top-level cases (e.g. see commit aeb0e24abbeb ("kbuild: rust: replace proc macros dependency on core.o with the version text")).

Quoted 7 lines

The build errors for now are hard to trigger, since we do not yet use the new crates we just introduced (the use cases are coming in the next merge window), but they can still be seen if e.g. one manually removes one of the targets, so fix it already.

Fixes 158a3b72118a ("rust: proc-macro2: enable support in kbuild")

Applied to rust-fixes -- thanks everyone!

I am applying this one fairly fast since Rust 1.93.0 is out and folks may trigger it in linux-next.

Cheers,
Miguel