Make the zerocopy and zerocopy_derive crates available for use when building the UAPI crate and its tests. Then attempt to derive most of the zerocopy traits for struct drm_panthor_gpu_info when generating its binding. This will be used by the Tyr driver that needs the traits IntoBytes and Immutable to safely copy the struct byte-for-byte to userspace.
Signed-off-by: Deborah Brouwer <[email protected]> --- rust/Makefile | 12 +++++++++--- rust/bindgen_parameters | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/rust/Makefile b/rust/Makefile index da1a7409d984..bf02a1efd6f3 100644 --- a/rust/Makefile +++ b/rust/Makefile @@ -365,8 +365,11 @@ rusttestlib-bindings: private rustc_target_flags = --extern ffi --extern pin_ini rusttestlib-bindings: $(src)/bindings/lib.rs rusttestlib-ffi rusttestlib-pin_init FORCE +$(call if_changed,rustc_test_library) -rusttestlib-uapi: private rustc_target_flags = --extern ffi --extern pin_init -rusttestlib-uapi: $(src)/uapi/lib.rs rusttestlib-ffi rusttestlib-pin_init FORCE +rusttestlib-uapi: private rustc_target_flags = --extern ffi --extern pin_init \ + --extern zerocopy=$(objtree)/$(obj)/test/libzerocopy.rlib \ + --extern zerocopy_derive=$(objtree)/$(obj)/test/$(libzerocopy_derive_name) +rusttestlib-uapi: $(src)/uapi/lib.rs rusttestlib-ffi rusttestlib-pin_init \ + rusttestlib-zerocopy rusttestlib-zerocopy_derive FORCE +$(call if_changed,rustc_test_library) quiet_cmd_rustdoc_test = RUSTDOC T $< @@ -782,11 +785,14 @@ $(obj)/bindings.o: $(src)/bindings/lib.rs \ $(obj)/bindings/bindings_helpers_generated.rs FORCE +$(call if_changed_rule,rustc_library) -$(obj)/uapi.o: private rustc_target_flags = --extern ffi --extern pin_init +$(obj)/uapi.o: private rustc_target_flags = --extern ffi --extern pin_init \ + --extern zerocopy --extern zerocopy_derive $(obj)/uapi.o: private skip_gendwarfksyms = 1 $(obj)/uapi.o: $(src)/uapi/lib.rs \ $(obj)/ffi.o \ $(obj)/pin_init.o \ + $(obj)/zerocopy.o \ + $(obj)/$(libzerocopy_derive_name) \ $(obj)/uapi/uapi_generated.rs FORCE +$(call if_changed_rule,rustc_library) diff --git a/rust/bindgen_parameters b/rust/bindgen_parameters index 8402b0c93545..332bc8d6a9f7 100644 --- a/rust/bindgen_parameters +++ b/rust/bindgen_parameters @@ -71,3 +71,6 @@ # Structs should implement `Zeroable` when all of their fields do. --with-derive-custom-struct .*=MaybeZeroable --with-derive-custom-union .*=MaybeZeroable + +# `drm_panthor_gpu_info` is copied byte-for-byte to userspace. +--with-derive-custom-struct '^drm_panthor_gpu_info$'=zerocopy_derive::most_traits -- 2.55.0
