[PATCH] D18826: Add auto-exporting of symbols from tools so that plugins work on Windows

John Brawn via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 6 07:59:26 PDT 2016


john.brawn created this revision.
john.brawn added reviewers: chandlerc, rnk, chapuni.
john.brawn added a subscriber: llvm-commits.
john.brawn set the repository for this revision to rL LLVM.

The problem with plugins on Windows is that when building a plugin DLL it needs to explicitly link against something (an exe or DLL) if it uses symbols from that thing, and that thing must explicitly export those symbols. Also there's a limit of 65535 symbols that can be exported. This means that currently plugins only work on Windows when using BUILD_SHARED_LIBS, and that doesn't work with MSVC.

This patch adds an LLVM_EXPORT_SYMBOLS_FOR_PLUGINS option, which when enabled automatically exports from all LLVM tools the symbols that a plugin could want to use so that a plugin can link against a tool directly. Plugins can specify what tool they link against by using PLUGIN_TOOL argument to llvm_add_library. The option can also be enabled on Linux, though there all it should do is restrict the set of symbols that are exported as by default all symbols are exported.

This option is currently OFF by default, as while I've verified that it works with MSVC, linux gcc, and cygwin gcc, I haven't tried mingw gcc and I have no idea what will happen on OSX. Also unfortunately we can't turn on LLVM_ENABLE_PLUGINS when the option is ON as bugpoint-passes needs to be loaded by both bugpoint.exe and opt.exe which is incompatible with this approach. Also currently clang plugins don't work with this approach, which will be fixed in future patches.

Repository:
  rL LLVM

http://reviews.llvm.org/D18826

Files:
  cmake/modules/AddLLVM.cmake
  cmake/modules/HandleLLVMOptions.cmake
  cmake/modules/LLVMConfig.cmake.in
  lib/Transforms/Hello/CMakeLists.txt
  utils/extract_symbols.py

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18826.52796.patch
Type: text/x-patch
Size: 20917 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160406/11277890/attachment.bin>


More information about the llvm-commits mailing list