39 std::unique_ptr<llvm::orc::ExecutionSession> ES{
nullptr };
41#if LLVM_VERSION_MAJOR >= 11 && LLVM_VERSION_MAJOR <= 12
42 ES = std::make_unique<llvm::orc::ExecutionSession>();
43#elif LLVM_VERSION_MAJOR >= 13 && LLVM_VERSION_MAJOR <= 16
44 ES = std::make_unique<llvm::orc::ExecutionSession>(cantFail(llvm::orc::SelfExecutorProcessControl::Create()));
45#elif LLVM_VERSION_MAJOR >= 17 && LLVM_VERSION_MAJOR <= 19
46 ES = std::make_unique<llvm::orc::ExecutionSession>(cantFail(llvm::orc::SelfExecutorProcessControl::Create()));
47#elif LLVM_VERSION_MAJOR >= 20
48 ES = std::make_unique<llvm::orc::ExecutionSession>(cantFail(llvm::orc::SelfExecutorProcessControl::Create()));
54 llvm::report_fatal_error(
"Failed to create ES");
58std::unique_ptr<llvm::MemoryBuffer>
get_virtual_source(llvm::StringRef code, clang::CompilerInstance &CI)
61 std::unique_ptr<llvm::MemoryBuffer> buffer{
nullptr };
62 buffer = llvm::MemoryBuffer::getMemBufferCopy(code,
"/etiss_llvm_clang_memory_mapped_file.c");
64#if LLVM_VERSION_MAJOR == 11
65 CI.getSourceManager().overrideFileContents(
66 CI.getFileManager().getVirtualFile(
"/etiss_llvm_clang_memory_mapped_file.c", buffer->getBufferSize(), 0),
68#elif LLVM_VERSION_MAJOR >= 12 && LLVM_VERSION_MAJOR <= 16
69 CI.getSourceManager().overrideFileContents(
70 CI.getFileManager().getVirtualFile(
"/etiss_llvm_clang_memory_mapped_file.c", buffer->getBufferSize(), 0),
72#elif LLVM_VERSION_MAJOR >= 17 && LLVM_VERSION_MAJOR <= 20
73 CI.getSourceManager().overrideFileContents(
74 CI.getFileManager().getVirtualFileRef(
"/etiss_llvm_clang_memory_mapped_file.c", buffer->getBufferSize(), 0),
100#if LLVM_VERSION_MAJOR >= 11 && LLVM_VERSION_MAJOR <= 12
101 auto diagOpts =
new clang::DiagnosticOptions();
102 auto diagPrinter =
new clang::TextDiagnosticPrinter(llvm::outs(), diagOpts);
104 CI.createDiagnostics(diagPrinter);
105#elif LLVM_VERSION_MAJOR >= 13 && LLVM_VERSION_MAJOR <= 20
106 auto diagOpts = llvm::makeIntrusiveRefCnt<clang::DiagnosticOptions>();
107 auto diagPrinter = std::make_unique<clang::TextDiagnosticPrinter>(llvm::errs(), diagOpts.get());
109 llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> diagID(
new clang::DiagnosticIDs());
110#if LLVM_VERSION_MAJOR < 20
111 llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diags(
112 new clang::DiagnosticsEngine(diagID, diagOpts, diagPrinter.release()));
114 llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diags(
115 new clang::DiagnosticsEngine(diagID, diagOpts, diagPrinter.release(),
false));
117 CI.setDiagnostics(diags.get());