use llvm_sys::prelude::LLVMModuleRef;
use std::ffi::{CStr, c_char};
pub(crate) unsafe fn link_bitcode(module: LLVMModuleRef, bitcode: &[u8]) -> Result<(), String> {
let err = unsafe { cubecl_link_device_bitcode(module, bitcode.as_ptr().cast(), bitcode.len()) };
if err.is_null() {
return Ok(());
}
unsafe {
let message = CStr::from_ptr(err).to_string_lossy().into_owned();
cubecl_free_message(err);
Err(message)
}
}
unsafe extern "C" {
fn cubecl_link_device_bitcode(
dest: LLVMModuleRef,
data: *const c_char,
len: usize,
) -> *mut c_char;
fn cubecl_free_message(message: *mut c_char);
}