[llvm-dev] cmake 3.22 breaks libc++ build

433 views
Skip to first unread message

Roland Schatz via llvm-dev

unread,
Dec 3, 2021, 5:28:36 AM12/3/21
to llvm...@lists.llvm.org

Hi,

I'm currently debugging a problem in our Github Actions build. We're doing a custom build of libc++ and libc++abi, and this is failing since the cmake version in the base image was updated to version 3.22.

The issue can be reproduced by following the instructions at https://libcxx.llvm.org/BuildingLibcxx.html.

The setup I'm using is this:
* Linux
* cmake version 3.22
* I've tried llvm-project sources 12.0.0, 13.0.0 and the tip of main
* system compiler is clang 12.0.1 (but I don't think that matters here)

The exact commands I'm running are (the last one is failing [1]):
cd llvm-project
mkdir build
cmake -G Ninja -S runtimes -B build "-DLLVM_ENABLE_RUNTIMES=libcxx;libcxxabi" -DCMAKE_INSTALL_PREFIX=install
ninja -C build cxx cxxabi
ninja -C build install-cxxabi
ninja -C build install-cxx


What seems to be happening is that cmake tries to patch the RPATH of libc++.so. But libc++.so is not a symlink to a shared object, it's a linker script.
I have bisected that to a particular cmake change [2].


One thing I noticed is that the build works just fine when I'm doing the build of libc++ and libc++abi separately:

cmake -S libcxxabi ...
// build, install, ...
cmake -S libcxx -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_CXX_ABI_LIBRARY_PATH=path/to/install/from/prev/step ...


That works on Linux, but breaks the build on Darwin, it seems to be missing the re-exports of libc++abi symbols in libc++ then.
Also that's the "deprecated" way of doing things, so not sure if it's good to pursue that path.


To be honest, I'm not sure I fully understand the problem, or how these different ways of building even make a difference.

Am I doing something wrong? Is this a bug in LLVM's cmake scripts? Or a bug in cmake?
Any hints what I can try to fix this?


Thanks!
Roland


[1] failing build output:

...
-- Installing: /home/roland/test/cmake/llvm-project/install/include/c++/v1/wctype.h
-- Installing: /home/roland/test/cmake/llvm-project/install/include/c++/v1/__config_site
[4/4] cd /home/roland/test/cmake/llvm-project/build/libcxx/src && /nix/store/n7j...ENT=cxx -P /home/roland/test/cmake/llvm-project/build/libcxx/cmake_install.cmake
FAILED: libcxx/src/CMakeFiles/install-cxx /home/roland/test/cmake/llvm-project/build/libcxx/src/CMakeFiles/install-cxx
cd /home/roland/test/cmake/llvm-project/build/libcxx/src && /nix/store/n7jz18i0cspdkfd1y0w1mg5rqvs15kdr-cmake-3.22.0/bin/cmake -DCMAKE_INSTALL_COMPONENT=cxx -P /home/roland/test/cmake/llvm-project/build/libcxx/cmake_install.cmake
-- Install configuration: ""
-- Installing: /home/roland/test/cmake/llvm-project/install/lib/libc++.so.1.0
-- Installing: /home/roland/test/cmake/llvm-project/install/lib/libc++.so.1
-- Set runtime path of "/home/roland/test/cmake/llvm-project/install/lib/libc++.so.1.0" to ""
-- Installing: /home/roland/test/cmake/llvm-project/install/lib/libc++.so
CMake Error at cmake_install.cmake:88 (file):
  file RPATH_CHANGE could not write new RPATH:



  to the file:

    /home/roland/test/cmake/llvm-project/install/lib/libc++.so

Call Stack (most recent call first):
  /home/roland/test/cmake/llvm-project/build/libcxx/cmake_install.cmake:56 (include)


ninja: build stopped: subcommand failed.

[2] https://github.com/Kitware/CMake/commit/2e1149874d34b63cc16c7330ce1ef5ef779e5140

Shoaib Meenai via llvm-dev

unread,
Dec 3, 2021, 1:16:43 PM12/3/21
to Roland Schatz, llvm...@lists.llvm.org

This is a workaround, not a fix, but does configuring with -DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE help? That should prevent CMake from having to adjust the rpath at install time.

PoYao Chang via llvm-dev

unread,
Dec 3, 2021, 1:31:00 PM12/3/21
to Roland Schatz, llvm...@lists.llvm.org
I ran in to this exact problem (cmake trying to modify rpath of a linker script) too.
The workaround I employed was setting “LIBCXX_ENABLE_STATIC_ABI_LIBRARY” to ON.
Works on 13.0.0 and ToT. 
Hope this helps.

_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

Khem Raj via llvm-dev

unread,
Dec 3, 2021, 1:46:18 PM12/3/21
to Roland Schatz, llvm-dev
On Fri, Dec 3, 2021 at 2:28 AM Roland Schatz via llvm-dev
<llvm...@lists.llvm.org> wrote:
>
> Hi,
>
> I'm currently debugging a problem in our Github Actions build. We're doing a custom build of libc++ and libc++abi, and this is failing since the cmake version in the base image was updated to version 3.22.
>
> The issue can be reproduced by following the instructions at https://libcxx.llvm.org/BuildingLibcxx.html.
>
> The setup I'm using is this:
> * Linux
> * cmake version 3.22
> * I've tried llvm-project sources 12.0.0, 13.0.0 and the tip of main
> * system compiler is clang 12.0.1 (but I don't think that matters here)
>

yeah I did something like this

https://github.com/kraj/meta-clang/commit/85fb0a622e0e9a7b2bb7e7035d66dab90e0432b4

Roland Schatz via llvm-dev

unread,
Dec 7, 2021, 3:09:37 AM12/7/21
to Shoaib Meenai, llvm...@lists.llvm.org

Thanks! That fixes the problem for me, and doesn't seem to have any ill side-effects.

- Roland

Reply all
Reply to author
Forward
0 new messages