]> granicus.if.org Git - llvm/commit
CMake: Add LLVM_DYLIB_SYMBOL_VERSIONING option
authorTom Stellard <tstellar@redhat.com>
Wed, 3 May 2017 14:43:44 +0000 (14:43 +0000)
committerTom Stellard <tstellar@redhat.com>
Wed, 3 May 2017 14:43:44 +0000 (14:43 +0000)
commit26efd16b306c26c1dd1db60e79f374090a668fe6
tree3d8e72357b12eb2d94c70b84c148808c67f7fead
parent2891d41ee6991d5254f6642eee79763dfef1d4a2
CMake: Add LLVM_DYLIB_SYMBOL_VERSIONING option

Summary:
When apps or other libraries link against a library with symbol
versions, the version string is recorded in the import table, and used
at runtime to resolve the symbol back to a library that provides that
version (vaguely like how two-level namespaces work in Mach-O).  ld's
--default-symver flag tags every exported symbol with a symbol version
string equal to the library's soname.  Using --default-symver means
multiple versions of libLLVM can coexist within the same process, at
least to the extent that they don't try to pass data between each
other's llvms.

As an example, imagine a language like Rust using llvm for CPU codegen,
binding to OpenGL, with Mesa as the OpenGL implementation using llvm for
R600 codegen.  With --default-symver Rust and Mesa will resolve their
llvm usage to the version each was linked against, which need not match.

(Other ELF platforms like BSD and Solaris might have similar semantics,
I've not checked.)

This is based on an autoconf version of this patch by Adam Jackson.

This new option can be used to add --default-symver to the linker flags
for libLLVM.so.

Reviewers: beanz

Reviewed By: beanz

Subscribers: mgorny, llvm-commits

Differential Revision: https://reviews.llvm.org/D30997

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302026 91177308-0d34-0410-b5e6-96231b3b80d8
CMakeLists.txt
tools/llvm-shlib/CMakeLists.txt