pipeline_script/llvm/builder/
lljit.rs

1use crate::llvm::orc::lljit::LLJIT;
2use llvm_sys::error::LLVMGetErrorMessage;
3use llvm_sys::orc2::lljit::{
4    LLVMOrcCreateLLJIT, LLVMOrcCreateLLJITBuilder, LLVMOrcLLJITBuilderRef, LLVMOrcLLJITRef,
5};
6use std::ffi::CString;
7
8pub struct LLJITBuilder(LLVMOrcLLJITBuilderRef);
9
10impl LLJITBuilder {
11    pub fn new() -> Self {
12        unsafe { Self(LLVMOrcCreateLLJITBuilder()) }
13    }
14    pub fn create_lljit(&self) -> LLJIT {
15        let orc_jit: *mut LLVMOrcLLJITRef = &mut std::ptr::null_mut();
16        let error = unsafe { LLVMOrcCreateLLJIT(orc_jit, self.0) };
17        unsafe {
18            if !error.is_null() {
19                let message = LLVMGetErrorMessage(error);
20                let s = CString::from_raw(message);
21                println!("{}", s.to_str().unwrap());
22            }
23        };
24        unsafe { LLJIT::new(*orc_jit) }
25    }
26}
27
28impl Default for LLJITBuilder {
29    fn default() -> Self {
30        Self::new()
31    }
32}