5 #ifndef ROADRUNNER_MCJIT_H
6 #define ROADRUNNER_MCJIT_H
8 #include <rrRoadRunnerOptions.h>
12 #pragma warning(disable: 4146)
13 #pragma warning(disable: 4141)
14 #pragma warning(disable: 4267)
15 #pragma warning(disable: 4624)
18 #include "llvm/ExecutionEngine/ExecutionEngine.h"
19 #include "llvm/IR/LegacyPassManager.h"
22 #pragma warning(default: 4146)
23 #pragma warning(default: 4141)
24 #pragma warning(default: 4267)
25 #pragma warning(default: 4624)
35 class MCJit :
public Jit {
38 explicit MCJit(std::uint32_t options);
40 ~MCJit()
override =
default;
43 std::string mangleName(
const std::string &unmangledName)
const override;
45 void mapFunctionsToJitSymbols()
override;
47 void transferObjectsToResources(std::shared_ptr<rrllvm::ModelResources> modelResources)
override;
49 std::uint64_t lookupFunctionAddress(
const std::string& name)
override;
51 void addObjectFile(rrOwningBinary owningObject)
override;
53 void addObjectFile(std::unique_ptr<llvm::object::ObjectFile> objectFile)
override;
55 void addObjectFile(std::unique_ptr<llvm::MemoryBuffer> obj)
override;
57 const llvm::DataLayout& getDataLayout()
const override;
59 void addModule()
override;
61 void addModule(llvm::Module* M)
override;
63 void addModule(std::unique_ptr<llvm::Module> M, std::unique_ptr<llvm::LLVMContext> ctx)
override;
71 void addModuleViaObjectFile();
73 std::unique_ptr<llvm::MemoryBuffer> getCompiledModelFromCache(
const std::string &sbmlMD5)
override;
75 ExecutionEngine* getExecutionEngineNonOwning()
const;
77 llvm::TargetMachine *getTargetMachine() ;
79 llvm::legacy::FunctionPassManager *getFunctionPassManager()
const ;
81 llvm::raw_svector_ostream &getCompiledModuleStream();
83 std::string getModuleAsString(std::string sbmlMD5)
override;
95 void writeObjectToBinaryStream();
97 void initFunctionPassManager();
102 EngineBuilder engineBuilder;
103 std::unique_ptr<ExecutionEngine> executionEngine;
104 std::unique_ptr<llvm::legacy::FunctionPassManager> functionPassManager;
105 std::unique_ptr<std::string> errString;