bheisler / RustaCUDA

Rusty wrapper for the CUDA Driver API
Apache License 2.0
765 stars 58 forks source link

RustaCUDA doesn't build on ARMv8 #65

Open jswang opened 2 years ago

jswang commented 2 years ago

Background

Building RustaCUDA version 0.1.3 yields the following error when building on ARMv8:

error[E0308]: mismatched types
   --> /home/root/.cargo/registry/src/github.com-1ecc6299db9ec823/rustacuda-0.1.3/src/device.rs:376:48
    |
376 |             let mut cu_uuid = CUuuid { bytes: [0i8; 16] };
    |                                                ^^^ expected `u8`, found `i8`
    |
help: change the type of the numeric literal from `i8` to `u8`
    |
376 |             let mut cu_uuid = CUuuid { bytes: [0u8; 16] };
    |                                                 ~~

In the cuda_runtime.rs bindings and in the cuda.rs bindings from cuda-sys, these structs are raw c_char's: cuda_runtime.rs:

#[repr(C)]
#[derive(Debug, Default, Copy, Clone, Hash, PartialOrd, Ord, PartialEq, Eq)]
pub struct CUuuid_st {
    pub bytes: [::std::os::raw::c_char; 16usize],
}

cuda.rs

#[repr(C)]
#[derive(Debug, Default, Copy, Clone, Hash, PartialOrd, Ord, PartialEq, Eq)]
pub struct CUuuid_st {
    pub bytes: [::std::os::raw::c_char; 16usize],
}

Note that this doesn't happen when building on x86.

Proposed fix:

Change to u8 as suggested