It is a common convention in Rust that FFI bindings should be developed as two crates.
One crate is a pure translation of the C ABI into Rust, potentially using a tool like bindgen, and usually with a name ending in -sys. This is what libtls-sys and winapi are.
Another crate does the job of making a safe API for it. This is what libtls and wio do.
This is so that, if a single project winds up using two different safe wrappers at once, both can pull in a common “sys crate” binding, which will be responsible for finding the system libraries. Otherwise, a single Rust app could wind up linking to two different OpenCL libraries at one, and fail to link at the end.
https://doc.rust-lang.org/cargo/reference/build-scripts.html#-sys-packages gives more info about this.
Basically, the build.rs and ffi modules become cl3-sys, and cl3 should depend on it.