[llvm-dev] Building SVN head with CMake - shared libraries?

Dan Liew via llvm-dev llvm-dev at lists.llvm.org
Sun Jan 17 03:04:36 PST 2016


On 16 January 2016 at 20:21, Ismail Donmez <ismail at i10z.com> wrote:
> On Sat, Jan 16, 2016 at 9:33 PM, Dan Liew <dan at su-root.co.uk> wrote:
>>> I am trying to enable this on openSUSE but it seems to break
>>> standalone lldb (note that we don't ship static libs):
>>>
>>> cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
>>> -DCMAKE_CXX_FLAGS=-stdlib=libc++ -DLLVM_BUILD_LLVM_DYLI
>>> B=ON -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_INSTALL_PREFIX=/usr
>>> -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_LIBDIR_SUFFIX=64 -DLLDB_PA
>>> TH_TO_LLVM_BUILD=/usr -DLLDB_PATH_TO_CLANG_BUILD=/usr
>>> -DLLVM_RUNTIME_OUTPUT_INTDIR=/home/abuild/rpmbuild/BUILD/lldb-3.8.0/buil
>>> d/bin -DLLVM_LIBRARY_OUTPUT_INTDIR=/home/abuild/rpmbuild/BUILD/lldb-3.8.0/build/lib64
>>> -DPYTHON_VERSION_MAJOR=2 -DPYTHON_VERSIO
>>> N_MINOR=7 -G Ninja ..
>>>
>>> [...]
>>>
>>> CMake Error at /usr/share/llvm/cmake/LLVMExports.cmake:1011 (message):
>>>   The imported target "LLVMSupport" references the file
>>>
>>>       "/usr/lib64/libLLVMSupport.a"
>>
>> Could you try appending ``-DLLVM_LINK_LLVM_DYLIB=ON`` to your CMake
>> invocation? It looks like lldb is using the ``llvm_add_library()``
>> function in the ``cmake/modules/AddLLVM.cmake`` (LLVM source tree)
>> which uses ``LLVM_LINK_LLVM_DYLIB`` (and a few other variables) to
>> decide whether to link against LLVM's static component libraries or
>> the monolithic shared library. I could be wrong on this though but it
>> should
>> be pretty quick to check.
>
> I already use  -DLLVM_BUILD_LLVM_DYLIB=ON  -DLLVM_LINK_LLVM_DYLIB=ON

That'll teach me to suggest something without actually trying it. Then
I might have actually noticed you're already using that flag!

Let me see if I can reproduce this. Are you building on LLVM trunk on
the 3.8 release branch?


>> Out of curiosity though if you're building packages on openSUSE why do
>> you need a standalone build? I thought the normal way to do this was
>> to build everything and then generate split packages?
>
> Nice question. Since Mesa depends on llvm and Mesa is very crucial to
> a distro bootstrap, adding any new dependency to llvm creates a
> circular dependency which we can't have. And lldb itself brings python
> dependency which complicates the issue (python has a Mesa dependency).
> I may try to pre-generate files with swig to remove the dependency but
> it would be nice if this worked as expected.

It's not entirely clear to me why adding a package (build or runtime?)
dependency to LLVM creates a circular dependency.
If you build llvm, clang and lldb and make split packages from the
result you have a runtime dependency graph that is a tree with LLVM at
the root.
Maybe it's best not to digress. I agree that the standalone build of
lldb should work as expected.

Thanks,
Dan.


More information about the llvm-dev mailing list