Привет! Пытаюсь собрать библиотеку, где 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})
https://github.com/RadeonOpenCompute/ROCm-CompilerSupport/blob/amd-stg-open/lib/comgr/CMakeLists.txt сам CMakeLists.txt
Я пока собрал 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)
(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
Арсений, есть ли успехи с починкой пакета, нужна ли вам помощь?
После изучения апстримной 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
Проблема рассосалась сама собой при сборке с llvm16, пока закрываю.