Enable linking tools, shared libraries against libLLVM
authorAndrew Wilkins <axwalk@gmail.com>
Tue, 1 Sep 2015 03:14:31 +0000 (03:14 +0000)
committerAndrew Wilkins <axwalk@gmail.com>
Tue, 1 Sep 2015 03:14:31 +0000 (03:14 +0000)
commit10add60748226d67d3a1e4d1a8175f798a053708
tree22d6f780b080664e584b5a747911c22e53b4b66d
parent6bf871423ec7b5dee85aaed2204fb2c984fadd6c
Enable linking tools, shared libraries against libLLVM

Summary:
Three closely related changes, to have a mode in which we link all
executables and shared libraries against libLLVM.

1. Add a new LLVM_LINK_LLVM_DYLIB cmake option, which, when ON, will link
   executables and shared libraries against libLLVM. For this to work, it
   is necessary to also set LLVM_BUILD_LLVM_DYLIB and LLVM_DYLIB_EXPORT_ALL.

   It is not strictly necessary to set LLVM_DISABLE_LLVM_DYLIB_ATEXIT, but
   we also default to OFF in this mode, or tools tend to misbehave (e.g.
   stdout may not flush on exit when output is buffered.)

   llvm-config and Tablegen do not use libLLVM, as they are dependencies of
   libLLVM.

2. Modify llvm-go to take a new flag, "linkmode=component-libs|dylib".
   Depending on which one is passed (default is component-libs), we link
   with the individual libraries or libLLVM respectively. We pass in dylib
   when LLVM_LINK_LLVM_DYLIB is ON.

3. Fix LLVM_DYLIB_EXPORT_ALL on Linux, and expand the symbols exported to
   actually export all. Don't strip leading underscore from symbols on Linux,
   and make sure we get all exported symbols and weak-with-default symbols
   ("W" in nm output). Without these changes, passes won't load because
   the "Annotate..." symbols defined in lib/Support/Valigrind.cpp are not
   found.

Testing:
 - Ran default build ("ninja") with LLVM, clang, compiler-rt, llgo, lldb.
 - Ran "check", "check-clang", "check-tsan", "check-libgo" targets. I've
   never had much success with LLDB tests, and llgoi is currently broken
   so check-llgo fails for an unrelated reason.
 - Ran "lldb" to ensure it loads.

Reviewers: chandlerc, beanz, pcc, rnk

Subscribers: rnk, chapuni, sylvestre.ledru, llvm-commits

Differential Revision: http://reviews.llvm.org/D12488

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246527 91177308-0d34-0410-b5e6-96231b3b80d8
CMakeLists.txt
cmake/modules/AddLLVM.cmake
cmake/modules/TableGen.cmake
tools/llvm-go/llvm-go.go
tools/llvm-shlib/CMakeLists.txt