diff --git a/crates/cust/build.rs b/crates/cust/build.rs index 1b1f8674..d002cdc6 100644 --- a/crates/cust/build.rs +++ b/crates/cust/build.rs @@ -40,4 +40,12 @@ fn main() { println!("cargo::rustc-cfg=cuGraphGetEdges_v2"); println!("cargo::rustc-cfg=cuCtxCreate_v4"); } + + // In CUDA 13.2 the `id` field in `CUmemLocation_st` was placed inside an anonymous union. + // Bindgen renders this as `__bindgen_anon_1: CUmemLocation_st__bindgen_ty_1` instead of a + // direct `id` field. This cfg gates the struct initialization syntax accordingly. + println!("cargo::rustc-check-cfg=cfg(cuMemLocation_anon_id)"); + if driver_version >= 13020 { + println!("cargo::rustc-cfg=cuMemLocation_anon_id"); + } } diff --git a/crates/cust/src/memory/unified.rs b/crates/cust/src/memory/unified.rs index c45f5ce3..86829a38 100644 --- a/crates/cust/src/memory/unified.rs +++ b/crates/cust/src/memory/unified.rs @@ -647,6 +647,9 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemPrefetchAsync_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, + #[cfg(cuMemLocation_anon_id)] + __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, + #[cfg(not(cuMemLocation_anon_id))] id, }, #[cfg(not(cuMemPrefetchAsync_v2))] @@ -693,6 +696,9 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemPrefetchAsync_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, + #[cfg(cuMemLocation_anon_id)] + __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, + #[cfg(not(cuMemLocation_anon_id))] id, }, #[cfg(not(cuMemPrefetchAsync_v2))] @@ -735,6 +741,9 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemAdvise_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, + #[cfg(cuMemLocation_anon_id)] + __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, + #[cfg(not(cuMemLocation_anon_id))] id, }, #[cfg(not(cuMemAdvise_v2))] @@ -777,6 +786,9 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemAdvise_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, + #[cfg(cuMemLocation_anon_id)] + __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, + #[cfg(not(cuMemLocation_anon_id))] id, }, #[cfg(not(cuMemAdvise_v2))] @@ -801,6 +813,9 @@ pub trait MemoryAdvise: private::Sealed { #[cfg(cuMemAdvise_v2)] driver_sys::CUmemLocation { type_: driver_sys::CUmemLocationType::CU_MEM_LOCATION_TYPE_DEVICE, + #[cfg(cuMemLocation_anon_id)] + __bindgen_anon_1: driver_sys::CUmemLocation_st__bindgen_ty_1 { id }, + #[cfg(not(cuMemLocation_anon_id))] id, }, #[cfg(not(cuMemAdvise_v2))]