Bug 44831 - Q: link libLLVM statically
Summary: Q: link libLLVM statically
Status: CLOSED WORKSFORME
Alias: None
Product: Sisyphus
Classification: Development
Component: llvm15.0-devel (show other bugs)
Version: unstable
Hardware: all Linux
: P5 normal
Assignee: Arseny Maslennikov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-01-07 12:43 MSK by Konstantin A Lepikhov (L.A. Kostis)
Modified: 2023-06-15 23:27 MSK (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Konstantin A Lepikhov (L.A. Kostis) 2023-01-07 12:43:01 MSK
Привет!

Пытаюсь собрать библиотеку, где libLLVM будет слинкован статически. Внутри CMakeLists.txt объявляю:

set(LLVM_LINK_LLVM_DYLIB OFF)

но после этого все равно в списке библиотек на линковку появляется /usr/lib/llvm-15/../libLLVM-15.so

Других флагов для управления процессом внутри AddLLVM и LLVM-Config я не нашел, отсюда вопрос, как предполагается собирать LLVM статически, раз -static-libs теперь входят в субпакет -devel?

Оригинальная логика из пакета, где я хочу залинковать libLLVM:

if (LLVM_LINK_LLVM_DYLIB)                                                                                                                                                                                                                                     
  set(LLVM_LIBS LLVM)                                                                                                                                                                                                                                         
else()                                                                                                                                                                                                                                                        
  llvm_map_components_to_libnames(LLVM_LIBS                                                                                                                                                                                                                   
    ${LLVM_TARGETS_TO_BUILD}                                                                                                                                                                                                                                  
    DebugInfoDWARF                                                                                                                                                                                                                                            
    Symbolize)                                                                                                                                                                                                                                                
endif()                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                              
target_link_options(amd_comgr                                                                                                                                                                                                                                 
  PUBLIC                                                                                                                                                                                                                                                      
    ${AMD_COMGR_PUBLIC_LINKER_OPTIONS}                                                                                                                                                                                                                        
  PRIVATE                                                                                                                                                                                                                                                     
    ${AMD_COMGR_PRIVATE_LINKER_OPTIONS})                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                              
target_link_libraries(amd_comgr                                                                                                                                                                                                                               
  PRIVATE                                                                                                                                                                                                                                                     
    ${LLD_LIBS}                                                                                                                                                                                                                                               
    ${LLVM_LIBS}                                                                                                                                                                                                                                              
    ${CLANG_LIBS})
Comment 1 Konstantin A Lepikhov (L.A. Kostis) 2023-01-07 12:44:07 MSK
https://github.com/RadeonOpenCompute/ROCm-CompilerSupport/blob/amd-stg-open/lib/comgr/CMakeLists.txt сам CMakeLists.txt
Comment 2 Arseny Maslennikov 2023-01-10 14:49:30 MSK
Я пока собрал https://git.altlinux.org/tasks/313080, но туда планируется ещё кое-что добавить по несвязанным причинам.

#100 llvm15.0 15.0.6-alt1.1 -> 15.0.6-alt2
 Tue Jan 10 2023 Arseny Maslennikov <arseny@altlinux> 15.0.6-alt2
 <...>
 - Allow cmake config users to override LLVM_LINK_LLVM_DYLIB=ON. (Closes: 44831)
Comment 3 Konstantin A Lepikhov (L.A. Kostis) 2023-01-12 00:04:37 MSK
(In reply to Arseny Maslennikov from comment #2)
> Я пока собрал https://git.altlinux.org/tasks/313080, но туда планируется ещё
> кое-что добавить по несвязанным причинам.
> 
> #100 llvm15.0 15.0.6-alt1.1 -> 15.0.6-alt2
>  Tue Jan 10 2023 Arseny Maslennikov <arseny@altlinux> 15.0.6-alt2
>  <...>
>  - Allow cmake config users to override LLVM_LINK_LLVM_DYLIB=ON. (Closes:
> 44831)

Спасибо! Но пока я не понял, как этим пользоваться :)

$ less build.log.tmp
...
<13>Jan 11 09:48:10 rpmi: llvm15.0-filesystem-15.0.6-alt2 sisyphus+313080.200.2.1 1673364156 installed
<13>Jan 11 09:48:25 rpmi: llvm15.0-polly-15.0.6-alt2 sisyphus+313080.200.2.1 1673364156 installed
<13>Jan 11 09:48:25 rpmi: llvm15.0-gold-15.0.6-alt2 sisyphus+313080.200.2.1 1673364156 installed
<13>Jan 11 09:48:26 rpmi: llvm15.0-libs-15.0.6-alt2 sisyphus+313080.200.2.1 1673364156 installed
<13>Jan 11 09:48:31 rpmi: llvm15.0-15.0.6-alt2 sisyphus+313080.200.2.1 1673364156 installed
<13>Jan 11 09:48:49 rpmi: llvm15.0-devel-15.0.6-alt2 sisyphus+313080.200.2.1 1673364156 installed

set(LLVM_LINK_LLVM_DYLIB OFF) объявлена в CMakeLists.txt проекта и все равно в link.txt я вижу libLLVM-15.so:

[builder@localhost .in]$ cat ~/RPM/BUILD/rocm-comgr-5.4.1/lib/comgr/x86_64-alt-linux/CMakeFiles/amd_comgr.dir/link.txt 
/usr/bin/clang++ -fPIC -pipe -frecord-gcc-switches -Wall -g -O2 -O2 -g -DNDEBUG -pthread -Wl,--version-script=/usr/src/RPM/BUILD/rocm-comgr-5.4.1/lib/comgr/x86_64-alt-linux/src/exportmap -Wl,--no-undefined -fuse-ld=lld -shared -Wl,-soname,libamd_comgr.so.2 -o libamd_comgr.so.2.4 "CMakeFiles/amd_comgr.dir/src/comgr-compiler.cpp.o" CMakeFiles/amd_comgr.dir/src/comgr.cpp.o "CMakeFiles/amd_comgr.dir/src/comgr-device-libs.cpp.o" "CMakeFiles/amd_comgr.dir/src/comgr-disassembly.cpp.o" "CMakeFiles/amd_comgr.dir/src/comgr-elfdump.cpp.o" "CMakeFiles/amd_comgr.dir/src/comgr-env.cpp.o" "CMakeFiles/amd_comgr.dir/src/comgr-metadata.cpp.o" "CMakeFiles/amd_comgr.dir/src/comgr-objdump.cpp.o" "CMakeFiles/amd_comgr.dir/src/comgr-signal.cpp.o" "CMakeFiles/amd_comgr.dir/src/comgr-symbol.cpp.o" "CMakeFiles/amd_comgr.dir/src/comgr-symbolizer.cpp.o" "CMakeFiles/amd_comgr.dir/src/time-stat/time-stat.cpp.o"  -Wl,-rpath,/usr/lib/llvm-15.0/lib64: 
....
/usr/lib/llvm-15.0/lib64/libclangASTMatchers.a /usr/lib/llvm-15.0/lib64/libclangEdit.a /usr/lib/llvm-15.0/lib64/libclangSupport.a /usr/lib/llvm-15.0/lib64/libclangFormat.a /usr/lib/llvm-15.0/lib64/libclangToolingInclusions.a /usr/lib/llvm-15.0/lib64/libclangAST.a /usr/lib/llvm-15.0/lib64/libclangToolingCore.a /usr/lib/llvm-15.0/lib64/libclangRewrite.a /usr/lib/llvm-15.0/lib64/libclangLex.a /usr/lib/llvm-15.0/lib64/libclangBasic.a /usr/lib/llvm-15.0/lib64/libLLVM-15.so
Comment 4 Konstantin A Lepikhov (L.A. Kostis) 2023-03-08 22:13:57 MSK
Арсений, есть ли успехи с починкой пакета, нужна ли вам помощь?
Comment 5 Arseny Maslennikov 2023-03-17 12:27:00 MSK
После изучения апстримной cmake-лапши у меня сложилось впечатление, что нужно:
* либо собирать два разных "LLVM distribution"[1][2][3], т. е. снова переписывать сборку и упаковку, мейнтейнить перечисление этих компонентов, etc. с пока неясным мне результатом, и разложить получившиеся артефакты в совсем разные семейства пакетов (i. e. это две сборки из одних и тех же исходников);
* либо в каком-то виде возвращать RH-0001-CMake-Split-static-library-exports-into-their-own-ex.patch (т. е. реализовать его заново). Сейчас занялся этим.

[1] https://github.com/llvm/llvm-project/blob/llvmorg-15.0.7/clang/cmake/caches/MultiDistributionExample.cmake
[2] https://llvm.org/docs/BuildingADistribution.html
[3] https://github.com/gentoo/gentoo/blob/dbc45b1f9e41ec0832af235b948028c7afa531fc/sys-devel/clang/clang-15.0.7-r1.ebuild
Comment 6 Konstantin A Lepikhov (L.A. Kostis) 2023-06-15 23:27:03 MSK
Проблема рассосалась сама собой при сборке с llvm16, пока закрываю.