Bug 42249 - Сборка с cmake и llvm не может использовать динамическую линковку
Summary: Сборка с cmake и llvm не может использовать динамическую линковку
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: llvm (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Arseny Maslennikov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-03-25 11:17 MSK by Anton Zhukharev
Modified: 2022-04-19 19:51 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Anton Zhukharev 2022-03-25 11:17:53 MSK
Пакеты для сборки в hasher:

BuildRequires(pre): rpm-macros-cmake
BuildRequires: make cmake
[...]
BuildRequires: llvm-common-devel
BuildRequires: llvm-comman-clang-devel
BuildRequires: libstdc++-devel
[...]

Секция build:

%cmake \
    -DCLANG_LINK_CLANG_DYLIB:BOOL=ON \
    -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \
    -DCMAKE_BUILD_TYPE:STRING=Release \
    -DCMAKE_CXX_COMPILER:STRING=clang++

%cmake_build
[...]

Сборка падает со следующим сообщением:

Executing(%build): /bin/sh -e /usr/src/tmp/rpm-tmp.14904                               
+ umask 022                                                                            
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ cd ccls-0.20210330
+ mkdir -p x86_64-alt-linux
+ cmake -DCMAKE_SKIP_INSTALL_RPATH:BOOL=yes '-DCMAKE_C_FLAGS:STRING=-pipe -frecord-gcc-switches -Wall -g -O2 ' '-DCMAKE_CXX_FLAGS:STRING=-pipe -frecord-gcc-switches -Wall -g -O2 ' '-DCMAKE_Fortran_FLAGS:STRING=-pipe -frecord-gcc-switches -Wall -g -O2 ' -DCMAKE_INSTALL_PREFIX=/usr -DINCLUDE_INSTALL_DIR:PATH=/usr/include -DLIB_INSTALL_DIR:PATH=/usr/lib64 -DSYSCONF_INSTALL_DIR:PATH=/etc -DSHARE_INSTALL_PREFIX:PATH=/usr/share -DLIB_DESTINATION=lib64 -DLIB_SUFFIX=64 -S . -B x86_64-alt-linux -DBUILD_SHARED_LIBS:BOOL=ON -DCLANG_LINK_CLANG_DYLIB:BOOL=ON -DLLVM_LINK_LLVM_DYLIB:BOOL=ON -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_CXX_COMPILER:STRING=clang++
-- The CXX compiler identification is Clang 12.0.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/clang++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found ZLIB: /usr/lib64/libz.so (found version "1.2.11") 
CMake Error at /usr/lib/llvm-12.0/lib64/cmake/llvm/LLVMExports.cmake:1153 (message):
  The imported target "LLVMDemangle" references the file

     "/usr/lib/llvm-12.0/lib64/libLLVMDemangle.a"

  but this file does not exist.  Possible reasons include:

  * The file was deleted, renamed, or moved to another location.

  * An install or uninstall procedure did not complete successfully.

  * The installation package was faulty and contained

     "/usr/lib/llvm-12.0/lib64/cmake/llvm/LLVMExports.cmake"

  but not all the files it references.

Call Stack (most recent call first):
  /usr/lib/llvm-12.0/lib64/cmake/llvm/LLVMConfig.cmake:278 (include)
  /usr/lib/llvm-12.0/lib64/cmake/clang/ClangConfig.cmake:11 (find_package)
  /usr/lib64/cmake/clang/ClangConfig.cmake:8 (include)
  CMakeLists.txt:72 (find_package)


Директива: -DBUILD_SHARED_LIBS:BOOL=ON не влияет на сборку (всё также падает).


Аналогичная ошибка: https://bugzilla.redhat.com/show_bug.cgi?id=1743574
Comment 1 Arseny Maslennikov 2022-03-25 17:52:18 MSK
В наших пакетах с LLVM 12 статические библиотеки упакованы в -devel-static. Сами они для сборки будут не нужны, но апстрим LLVM так генерирует cmake-конфиги, что они проверяют наличие всех собранных targets, которые считают нужным. Более того, в актуальных версиях они сломали наш патч RH-0001-CMake-Split-static-library-exports-into-their-own-ex.patch и сделали раздельную установку .so и .a совсем невозможной без существенной переработки CMake-скриптов в дереве исходников, которую апстрим, скорее всего, не примет.

В общем, я в ближайшие дни заканчиваю упаковку LLVM 13, где такая проблема возникать не будет. Если критичен именно LLVM 12 или надо просто как можно скорее собрать пакет, то можно доустановить -devel-static — всё равно библиотеки имеют разные имена, т. е. `-lLLVM-12` может прилинковать только shared object (или даст ошибку, если его нет), а `-lLLVMDemangle` может прилинковать соответствующий static object (и тоже даст ошибку, если его нет)
Comment 2 Arseny Maslennikov 2022-04-19 19:51:53 MSK
Сейчас сборочный git-тег https://git.altlinux.org/people/ancieg/packages/ccls.git?p=ccls.git;a=commit;h=00cd80e3238b21cf40084faa58fd815fafc3537c у меня в окружении текущего сизифа спокойно собирается.