Skip to contentSkip to conversation

rust: kbuild: disambiguate `zerocopy_derive` for `rusttest`

PATCH Applied Miguel Ojeda 2 participants 3 messages Aug 23 – Aug 25

Subsystems (3)
lore
Share & tools
lore

Miguel Ojeda

author maintainer
#0 lore raw

PATCH 1/1 rust: kbuild: disambiguate `zerocopy_derive` for `rusttest`

The rustc-dev components for Rust 1.82.0 through 1.87.0 include a precompiled zerocopy_derive procedural macro in the sysroot. This range includes Rust 1.85.0, our minimum supported version.

This makes rusttest fail because the compiler finds both the sysroot copy and the copy built in rust/test:

    error[E0464]: multiple candidates for `dylib` dependency `zerocopy_derive` found
      --> rust/kernel/prelude.rs:70:9
       |
    70 | pub use zerocopy_derive::{
       |         ^^^^^^^^^^^^^^^
       |
       = note: candidate #1: .../lib/rustlib/x86_64-unknown-linux-gnu/lib/libzerocopy_derive-54d2b38896fa6bc5.so
       = note: candidate #2: .../rust/test/libzerocopy_derive.so

Commit fe39a233ea52 ("rust: kbuild: disambiguate zerocopy for rusttest") fixed the equivalent ambiguity for zerocopy.

Thus point to the dependency explicitly in this case too.

Cc Antoni Boucher <[email protected]>
Fixes 506054980429 ("rust: zerocopy-derive: enable support in kbuild")
---
 rust/Makefile | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
rust/Makefile +2 -1
index fbe0accc51a3..a346a01bb3eb 100644
@@ -350,7 +350,8 @@ rusttestlib-pin_init: $(src)/pin-init/src/lib.rs rusttestlib-macros \
 rusttestlib-kernel: private rustc_target_flags = --extern ffi \
     --extern build_error --extern macros --extern pin_init \
     --extern bindings --extern uapi \
-    --extern zerocopy=$(objtree)/$(obj)/test/libzerocopy.rlib --extern zerocopy_derive
+    --extern zerocopy=$(objtree)/$(obj)/test/libzerocopy.rlib \
+    --extern zerocopy_derive=$(objtree)/$(obj)/test/libzerocopy_derive.so
 rusttestlib-kernel: $(src)/kernel/lib.rs rusttestlib-bindings rusttestlib-uapi \
     rusttestlib-build_error rusttestlib-pin_init $(obj)/$(libmacros_name) \
     $(obj)/bindings.o rusttestlib-zerocopy rusttestlib-zerocopy_derive FORCE

base-commit: d24f5cdbeff8b6a063fca92d0a1f94122a799b59

Signature · 1 line
2.55.0
#1 lore raw
Quoted 2 lines · Miguel Ojeda

+ --extern zerocopy_derive=$(objtree)/$(obj)/test/libzerocopy_derive.so

This should be:

    ... test/$(libzerocopy_derive_name)

as Sashiko mentions, for the macOS support, of course.

Cheers,
Miguel

Applied
#2 lore raw
In reply to Miguel Ojeda
Quoted 20 lines · Miguel Ojeda

The rustc-dev components for Rust 1.82.0 through 1.87.0 include a precompiled zerocopy_derive procedural macro in the sysroot. This range includes Rust 1.85.0, our minimum supported version.

This makes rusttest fail because the compiler finds both the sysroot copy and the copy built in rust/test:

    error[E0464]: multiple candidates for `dylib` dependency `zerocopy_derive` found
      --> rust/kernel/prelude.rs:70:9
       |
    70 | pub use zerocopy_derive::{
       |         ^^^^^^^^^^^^^^^
       |
       = note: candidate #1: .../lib/rustlib/x86_64-unknown-linux-gnu/lib/libzerocopy_derive-54d2b38896fa6bc5.so
       = note: candidate #2: .../rust/test/libzerocopy_derive.so

Commit fe39a233ea52 ("rust: kbuild: disambiguate zerocopy for rusttest") fixed the equivalent ambiguity for zerocopy.

Quoted 6 lines

Thus point to the dependency explicitly in this case too.

Cc Antoni Boucher <[email protected]>
Fixes 506054980429 ("rust: zerocopy-derive: enable support in kbuild")

Applied to rust-fixes.

Cheers,
Miguel