[llvm] r310712 - [cmake] Expose the dependencies of ExecutionEngine as PUBLIC

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 21 13:21:12 PDT 2017


Merged to 5.0 in r311376.

On Fri, Aug 11, 2017 at 6:25 AM, Michal Gorny via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: mgorny
> Date: Fri Aug 11 06:25:20 2017
> New Revision: 310712
>
> URL: http://llvm.org/viewvc/llvm-project?rev=310712&view=rev
> Log:
> [cmake] Expose the dependencies of ExecutionEngine as PUBLIC
>
> Expose the dependencies of LLVMExecutionEngine library as PUBLIC rather
> than PRIVATE when building a shared library. This is necessary because
> the library is not contained but exposes API of other LLVM libraries via
> its headers.
>
> This causes other libraries to fail to link if the linker verifies for
> correctness of -l flags (i.e. fails on indirect dependencies). This e.g.
> happens when building LLDB against shared LLVM:
>
>   lib64/liblldbExpression.a(IRExecutionUnit.cpp.o):(.data.rel.ro._ZTIN4llvm18MCJITMemoryManagerE[_ZTIN4llvm18MCJITMemoryManagerE]+0x10): undefined reference to `typeinfo for llvm::RuntimeDyld::MemoryManager'
>   lib64/liblldbExpression.a(IRExecutionUnit.cpp.o):(.data.rel.ro._ZTVN4llvm18MCJITMemoryManagerE[_ZTVN4llvm18MCJITMemoryManagerE]+0x60): undefined reference to `llvm::RuntimeDyld::MemoryManager::anchor()'
>   lib64/liblldbExpression.a(IRExecutionUnit.cpp.o):(.data.rel.ro._ZTVN12lldb_private15IRExecutionUnit13MemoryManagerE[_ZTVN12lldb_private15IRExecutionUnit13MemoryManagerE]+0x48): undefined reference to `llvm::RTDyldMemoryManager::deregisterEHFrames()'
>   lib64/liblldbExpression.a(IRExecutionUnit.cpp.o):(.data.rel.ro._ZTVN12lldb_private15IRExecutionUnit13MemoryManagerE[_ZTVN12lldb_private15IRExecutionUnit13MemoryManagerE]+0x60): undefined reference to `llvm::RuntimeDyld::MemoryManager::anchor()'
>   lib64/liblldbExpression.a(IRExecutionUnit.cpp.o):(.data.rel.ro._ZTVN12lldb_private15IRExecutionUnit13MemoryManagerE[_ZTVN12lldb_private15IRExecutionUnit13MemoryManagerE]+0xd0): undefined reference to `llvm::JITSymbolResolver::anchor()'
>   collect2: error: ld returned 1 exit status
>
> Declaring the dependencies as PUBLIC guarantees that any package using
> the ExecutionEngine library will also get explicit -l flags for
> the dependent libraries guaranteeing that the symbols exposed in headers
> could be resolved.
>
> Patch originally written by NAKAMURA Takumi.
>
> Differential Revision: https://reviews.llvm.org/D36211
>
> Modified:
>     llvm/trunk/lib/ExecutionEngine/CMakeLists.txt
>
> Modified: llvm/trunk/lib/ExecutionEngine/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/CMakeLists.txt?rev=310712&r1=310711&r2=310712&view=diff
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/CMakeLists.txt (original)
> +++ llvm/trunk/lib/ExecutionEngine/CMakeLists.txt Fri Aug 11 06:25:20 2017
> @@ -14,6 +14,10 @@ add_llvm_library(LLVMExecutionEngine
>    intrinsics_gen
>    )
>
> +if(BUILD_SHARED_LIBS)
> +  target_link_libraries(LLVMExecutionEngine PUBLIC LLVMRuntimeDyld)
> +endif()
> +
>  add_subdirectory(Interpreter)
>  add_subdirectory(MCJIT)
>  add_subdirectory(Orc)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list