pipeline_script/llvm/builder/
lljit.rs1use 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}