Markus Himmel via llvm-dev
2015-Nov-02 07:53 UTC
[llvm-dev] [lib/support] Questions about loadable modules on Windows
Hi, I have been playing around with a custom pass which is built out-of-source using CMake. It works as expected on Linux. I have also built the pass and llvm trunk (separately) using Visual Studio. However when running `opt -load=. -help` on Windows, the -load directive appears to work but the passes defined in the .dll are not displayed. In several places it is suggested that this is due to dynamic linking not being supported on Windows (e.g. [1]). However, I do not fully understand this explanation, since there does in fact appear to be Run-Time Dynamic Linking on Windows [2], and this is even implemented in lib/Support/Windows/DynamicLibrary.inc. I would greatly appreciate someone explaining in a little more detail why dynamic linking of loadable modules is not supported on Windows, or if it is and I'm just doing something wrong. Thanks a lot, Markus [1] http://uu-kk.blogspot.de/2012/02/llvm-pass-on-windows-integrating-with.html [2] https://msdn.microsoft.com/en-us/library/windows/desktop/ms685090(v=vs.85).a spx -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151102/f5247f73/attachment.html>
Reid Kleckner via llvm-dev
2015-Nov-02 22:28 UTC
[llvm-dev] [lib/support] Questions about loadable modules on Windows
Plugins for opt are expected to reference symbols defined in the main executable, rather than linking in another copy of LLVM libraries and globals. LLVM and Clang were developed on Linux and Mac, where this is a common technique. On Windows, it is much harder to do this, although it is possible. Instead, it is much more common to move most of the application logic into a DLL and link plugins against that. I think you can load passes into opt if you build LLVM as a DLL (cmake -DLLVM_BUILD_LLVM_DYLIB=ON), and link your pass against LLVM.dll. I've never attempted this personally, but it should work. :) On Sun, Nov 1, 2015 at 11:53 PM, Markus Himmel via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hi, > > > > I have been playing around with a custom pass which is built out-of-source > using CMake. It works as expected on Linux. I have also built the pass and > llvm trunk (separately) using Visual Studio. However when running `opt > –load=… -help` on Windows, the –load directive appears to work but the > passes defined in the .dll are not displayed. In several places it is > suggested that this is due to dynamic linking not being supported on > Windows (e.g. [1]). However, I do not fully understand this explanation, > since there does in fact appear to be Run-Time Dynamic Linking on Windows > [2], and this is even implemented in > lib/Support/Windows/DynamicLibrary.inc. I would greatly appreciate someone > explaining in a little more detail why dynamic linking of loadable modules > is not supported on Windows, or if it is and I’m just doing something wrong. > > > > Thanks a lot, > > Markus > > > > [1] > http://uu-kk.blogspot.de/2012/02/llvm-pass-on-windows-integrating-with.html > > [2] > https://msdn.microsoft.com/en-us/library/windows/desktop/ms685090(v=vs.85).aspx > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151102/e5237313/attachment.html>