github.com/igggame/nebulas-go@v2.1.0+incompatible/nbre/test/link_example/test_llvm_linker.cpp (about) 1 #include "OrcLazyJIT.h" 2 #include "llvm/ADT/StringExtras.h" 3 #include "llvm/ADT/Triple.h" 4 #include "llvm/Bitcode/BitcodeReader.h" 5 #include "llvm/CodeGen/CommandFlags.def" 6 #include "llvm/CodeGen/LinkAllCodegenComponents.h" 7 #include "llvm/ExecutionEngine/GenericValue.h" 8 #include "llvm/ExecutionEngine/Interpreter.h" 9 #include "llvm/ExecutionEngine/JITEventListener.h" 10 #include "llvm/ExecutionEngine/MCJIT.h" 11 #include "llvm/ExecutionEngine/ObjectCache.h" 12 #include "llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h" 13 #include "llvm/ExecutionEngine/OrcMCJITReplacement.h" 14 #include "llvm/ExecutionEngine/SectionMemoryManager.h" 15 #include "llvm/IR/IRBuilder.h" 16 #include "llvm/IR/LLVMContext.h" 17 #include "llvm/IR/Module.h" 18 #include "llvm/IR/Type.h" 19 #include "llvm/IR/TypeBuilder.h" 20 #include "llvm/IRReader/IRReader.h" 21 #include "llvm/Object/Archive.h" 22 #include "llvm/Object/ObjectFile.h" 23 #include "llvm/Support/CommandLine.h" 24 #include "llvm/Support/Debug.h" 25 #include "llvm/Support/DynamicLibrary.h" 26 #include "llvm/Support/Format.h" 27 #include "llvm/Support/ManagedStatic.h" 28 #include "llvm/Support/MathExtras.h" 29 #include "llvm/Support/Memory.h" 30 #include "llvm/Support/MemoryBuffer.h" 31 #include "llvm/Support/Path.h" 32 #include "llvm/Support/PluginLoader.h" 33 #include "llvm/Support/PrettyStackTrace.h" 34 #include "llvm/Support/Process.h" 35 #include "llvm/Support/Program.h" 36 #include "llvm/Support/Signals.h" 37 #include "llvm/Support/SourceMgr.h" 38 #include "llvm/Support/TargetSelect.h" 39 #include "llvm/Support/raw_ostream.h" 40 #include "llvm/Transforms/Instrumentation.h" 41 #include <cerrno> 42 43 #ifdef __CYGWIN__ 44 #include <cygwin/version.h> 45 #if defined(CYGWIN_VERSION_DLL_MAJOR) && CYGWIN_VERSION_DLL_MAJOR < 1007 46 #define DO_NOTHING_ATEXIT 1 47 #endif 48 #endif 49 50 using namespace llvm; 51 52 53 LLVM_ATTRIBUTE_NORETURN 54 static void reportError(SMDiagnostic Err, const char *ProgName) { 55 Err.print(ProgName, errs()); 56 exit(1); 57 } 58 59 //===----------------------------------------------------------------------===// 60 // main Driver function 61 // 62 int main(int argc, char **argv, char *const *envp) { 63 sys::PrintStackTraceOnErrorSignal(argv[0]); 64 PrettyStackTraceProgram X(argc, argv); 65 66 atexit(llvm_shutdown); // Call llvm_shutdown() on exit. 67 68 // if (argc > 1) 69 // ExitOnErr.setBanner(std::string(argv[0]) + ": "); 70 71 // If we have a native target, initialize it to ensure it is linked in and 72 // usable by the JIT. 73 InitializeNativeTarget(); 74 InitializeNativeTargetAsmPrinter(); 75 // InitializeNativeTargetAsmParser(); 76 77 sys::Process::PreventCoreFiles(); 78 79 LLVMContext Context; 80 81 // Load the bitcode... 82 SMDiagnostic Err; 83 std::string InputFile = 84 "/home/xuepeng/git/go-nebulas/nbre/test/link_example/foo.bc"; 85 std::string sopath = 86 "/home/xuepeng/git/go-nebulas/nbre/test/link_example/libtest_bar.so"; 87 llvm::sys::DynamicLibrary::LoadLibraryPermanently(sopath.c_str()); 88 std::unique_ptr<Module> Owner = parseIRFile(InputFile, Err, Context); 89 Module *Mod = Owner.get(); 90 if (!Mod) 91 reportError(Err, argv[0]); 92 93 std::vector<std::unique_ptr<Module>> Ms; 94 Ms.push_back(std::move(Owner)); 95 // for (auto &ExtraMod : ExtraModules) { 96 // Ms.push_back(parseIRFile(ExtraMod, Err, Context)); 97 // if (!Ms.back()) 98 // reportError(Err, argv[0]); 99 //} 100 std::vector<std::string> Args; 101 Args.push_back(InputFile); 102 // for (auto &Arg : InputArgv) 103 // Args.push_back(Arg); 104 return runOrcLazyJIT(std::move(Ms), Args); 105 }