34 llvm::ExitOnError ExitOnErr;
35 std::unique_ptr<llvm::LLVMContext> Context;
36 std::unique_ptr<llvm::IRBuilder<>> Builder;
37 std::unique_ptr<llvm::Module> Module;
39 std::unique_ptr<SammineJIT> sammineJIT;
41 std::unique_ptr<llvm::TargetMachine> target_machine;
42 llvm::legacy::PassManager pass;
45 llvm::InitializeAllTargetInfos();
46 llvm::InitializeAllTargets();
47 llvm::InitializeAllTargetMCs();
48 llvm::InitializeNativeTargetAsmParser();
49 llvm::InitializeNativeTargetAsmPrinter();
51 sammineJIT = ExitOnErr(SammineJIT::Create());
52 InitializeEssentials();
56 void InitializeEssentials() {
57 Context = std::make_unique<llvm::LLVMContext>();
60 Module = std::make_unique<llvm::Module>(
"KaleidoscopeJIT", *Context);
62 llvm::Triple TargetTriple(LLVMGetDefaultTargetTriple());
64 auto Target = llvm::TargetRegistry::lookupTarget(TargetTriple, Error);
68 llvm::TargetOptions opt;
70 std::unique_ptr<llvm::TargetMachine>(Target->createTargetMachine(
71 TargetTriple, CPU, Features, opt, llvm::Reloc::PIC_));
73 Builder = std::make_unique<llvm::IRBuilder<>>(*Context);
76 Module->setDataLayout(target_machine->createDataLayout());