<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:"Arial Narrow";
        panose-1:2 11 6 6 2 2 2 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        mso-fareast-language:EN-GB;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">The fundamental problem here is that opt doesn’t use ExecutionEngine (because it has no need to), so trying<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">to use ExecutionEngine (or any other bit of llvm that opt doesn’t use for that matter) in an opt plugin isn’t<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">going to work.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">The solution I’d go with would be to build llvm with shared libraries (use –DBUILD_SHARED_LIBS=ON on the<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">cmake command) then link the plugin against ExecutionEngine. That shouldn’t require any changes anywhere<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">(when I gave it a quick try it seemed to work).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">John<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> llvm-dev [mailto:llvm-dev-bounces@lists.llvm.org]
<b>On Behalf Of </b>Zhang via llvm-dev<br>
<b>Sent:</b> 16 April 2019 22:04<br>
<b>To:</b> Viktor Was BSc; llvm-dev<br>
<b>Subject:</b> Re: [llvm-dev] Opt plugin linkage<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Just another follow-up, seems like ExecutionEngine is still not usable without editing CMakeLists, on my setup I had to edit CMakeLists.txt as well to get the example working.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Below is the modifications I made:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Modified Hello.cpp for testing:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">    bool runOnFunction(Function &F) override {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      ++HelloCounter;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      std::string errStr;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      EngineBuilder eb;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      eb.setErrorStr(&errStr);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      eb.setEngineKind(EngineKind::Kind::JIT);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      ExecutionEngine* ee=eb.create();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      errs()<<"ExecutionEngine:"<<ee<<" Error:"<<errStr<<"\n";<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      delete ee;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      errs() << "Hello: ";<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      errs().write_escaped(F.getName()) << '\n';<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      return false;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    }<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Modified opt's CMakeLists.txt:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal">set(LLVM_LINK_COMPONENTS<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  ${LLVM_TARGETS_TO_BUILD}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  AggressiveInstCombine<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Analysis<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  BitWriter<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  CodeGen<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Core<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  MC<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  MCJIT<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Object<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  OrcJIT<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Interpreter<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  RuntimeDyld<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Coroutines<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  IPO<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  IRReader<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  InstCombine<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Instrumentation<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  MC<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  ObjCARCOpts<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  ScalarOpts<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Support<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Target<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  TransformUtils<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Vectorize<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Passes<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  ExecutionEngine<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  )<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"># Support plugins.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">set(LLVM_NO_DEAD_STRIP 1)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">add_llvm_tool(opt<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  AnalysisWrappers.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  BreakpointPrinter.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Debugify.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  GraphPrinters.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  NewPMDriver.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  PassPrinters.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  PrintSCC.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  opt.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">  DEPENDS<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  intrinsics_gen<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  )<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">export_executable_symbols(opt)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">if(WITH_POLLY AND LINK_POLLY_INTO_TOOLS)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  target_link_libraries(opt PRIVATE Polly)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">endif(WITH_POLLY AND LINK_POLLY_INTO_TOOLS)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">target_link_libraries(opt PUBLIC LLVMExecutionEngine)<o:p></o:p></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Modified opt's LLVMBuild.txt:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">;===- ./tools/opt/LLVMBuild.txt --------------------------------*- Conf -*--===;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;                     The LLVM Compiler Infrastructure<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">; This file is distributed under the University of Illinois Open Source<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">; License. See LICENSE.TXT for details.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;===------------------------------------------------------------------------===;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">; This is an LLVMBuild description file for the components in this subdirectory.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">; For more information on the LLVMBuild system, please see:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;   http://llvm.org/docs/LLVMBuild.html<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">;===------------------------------------------------------------------------===;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">[component_0]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">type = Tool<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">name = opt<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">parent = Tools<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">required_libraries =<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> AsmParser<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> BitReader<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> BitWriter<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> CodeGen<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> IRReader<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> IPO<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> Instrumentation<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> Scalar<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ObjCARC<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> Passes<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ExecutionEngine<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> Interpreter<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> MCJIT<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> Native<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> NativeCodeGen<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> all-targets<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">On top of that I also added these lines to the beginning of main function in opt.cpp to force linking ExecutionEngine:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">  if(argc==-1){<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    EngineBuilder eb;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    ExecutionEngine* ee=eb.create();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    delete ee;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  }<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">as well as force linking MCJIT and Interpreter by including headers in opt:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">#include "llvm/ExecutionEngine/ExecutionEngine.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "llvm/ExecutionEngine/Interpreter.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "llvm/ExecutionEngine/MCJIT.h"<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Moving cl::parseCommandLineOptions doesn't seem to be related to the issue, my previous assumption was wrong.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Those modifications works at least on my setup with the following output:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">λ : >>> bin/opt -load lib/LLVMHello.dylib hw.ll -hello<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">WARNING: You're attempting to print out a bitcode file.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">This is inadvisable as it may cause display problems. If<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">you REALLY want to taste LLVM bitcode first-hand, you<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">can force output with the `-f' option.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Assertion failed: (M && "Module is null?"), function Init, file /Users/naville/Development/Hikari/lib/ExecutionEngine/ExecutionEngine.cpp, line 80.<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Which is due to i didn't initialize the EEBuilder properly, but at least the pass now loads and executes properly<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Zhang<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Arial Narrow","sans-serif";color:black">------------------ Original ------------------<o:p></o:p></span></p>
</div>
<div>
<div id="menu_sender">
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt;color:black">From:
</span></b><span style="font-size:9.0pt;color:black"> "Zhang via llvm-dev"<llvm-dev@lists.llvm.org>;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt;color:black">Date:
</span></b><span style="font-size:9.0pt;color:black"> Wed, Apr 17, 2019 04:35 AM<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt;color:black">To:
</span></b><span style="font-size:9.0pt;color:black"> "Viktor Was BSc"<gs15m015@technikum-wien.at>; "llvm-dev"<llvm-dev@lists.llvm.org>;
<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt;color:black">Subject:
</span></b><span style="font-size:9.0pt;color:black"> Re: [llvm-dev] Opt plugin linkage<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="color:black">Hey:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">I spent sometime debugging this, it seems like editing ``llvm/tools/opt.cpp`` and move ``cl::ParseCommandLineOptions(argc, argv,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">    "llvm .bc -> .bc modular optimizer and analysis printer\n");`` to the beginning of main() solved it for me. I'm not sure if this is a bug on LLVM side<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Zhang<o:p></o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Arial Narrow","sans-serif";color:black">------------------ Original ------------------<o:p></o:p></span></p>
</div>
<div>
<div id="menu_sender">
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt;color:black">From:
</span></b><span style="font-size:9.0pt;color:black"> "Viktor Was BSc via llvm-dev"<llvm-dev@lists.llvm.org>;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt;color:black">Date:
</span></b><span style="font-size:9.0pt;color:black"> Wed, Apr 17, 2019 03:09 AM<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt;color:black">To:
</span></b><span style="font-size:9.0pt;color:black"> "llvm-dev"<llvm-dev@lists.llvm.org>;
<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt;color:black">Subject:
</span></b><span style="font-size:9.0pt;color:black"> Re: [llvm-dev] Opt plugin linkage<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="color:black">How come the hello pass example is so totally useless as a starting point? Why is this not using any library/compontent which could conflict with opt or clang and showing how to handle this? I have no clue as to
 how I have to setup llvm to get this to work or why it doesn't work in the first place with the setup described in "Getting started" and "writing an llvm pass" pages etc.
<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="color:black">Also there is basically no documentation for the custom cmake commands.
<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="color:black">Can please somebody help me with this issue? How do I get dynamically loaded llvm pass plugins to work? Am I the only one ever having this issue?
<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Thanks <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Viktor <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">On Apr 16, 2019, at 05:38, Viktor Was BSc via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="color:black">Hi,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">I have a dynamically loaded llvm pass built in-tree with ninja (generated with cmake, basically a copy of the hallo pass plugin, linux, llvm/clang version 6.0.1).<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">It uses the ExecutionEngine.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Building it without linking against LLVMExecutionEngine library results in an undefined symbol to the vtable of the EngineBuilder when loaded to opt. Linking the plugin with LLVMExecutionEngine results in the pass
 simply not being executable with giving "opt: Unkown command line argument '-passArg'."
<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="color:black">For a minimal example add set(LLVM_LINK_COMPONENTS Core) to the CMakeLists.txt of the Hello llvm pass.
<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">There is no error or warning at any point when linking or loading a plugin linked against some  libs.
<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">How do I find out which llvm libs I can't link with a dynamically loaded plugin?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="color:black">How can I use the EngineBuilder in my plugin with proper symbol resolution?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">For reproductivity:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="color:black">cmake -G "Sublime Text 2 - Ninja" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DLLVM_EXPORT_SYMBOLS_FOR_PLUGINS=ON -DLLVM_BUILD_TESTS=ON -DLLVM_BUILD_EXAMPLES=ON -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra"
 -DLLVM_TOOL_CLANG_BUILD=ON -DLLVM_TOOL_CLANG_TOOLS_EXTRA=ON -DLLVM_OPTIMIZED_TABLEGEN=ON -DCLANG_BUILD_EXAMPLES=ON -DCLANG_PLUGIN_SUPPORT=ON<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Hope someone can help me out.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Viktor<o:p></o:p></span></p>
</div>
<pre style="text-align:center"><span style="color:black"><hr size="2" width="100%" align="center"></span></pre>
<pre><span style="color:black"><br>LLVM Developers mailing list<br>llvm-dev@lists.llvm.org<br><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><o:p></o:p></span></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>