Roland Schatz via llvm-dev
2021-Dec-03 10:28 UTC
[llvm-dev] cmake 3.22 breaks libc++ build
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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20211203/c901eb70/attachment.html>
Shoaib Meenai via llvm-dev
2021-Dec-03 18:16 UTC
[llvm-dev] cmake 3.22 breaks libc++ build
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. From: llvm-dev <llvm-dev-bounces at lists.llvm.org> on behalf of Roland Schatz via llvm-dev <llvm-dev at lists.llvm.org> Reply-To: Roland Schatz <roland.schatz at oracle.com> Date: Friday, December 3, 2021 at 2:28 AM To: "llvm-dev at lists.llvm.org" <llvm-dev at lists.llvm.org> Subject: [llvm-dev] cmake 3.22 breaks libc++ build 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<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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20211203/52c5449a/attachment-0001.html>
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.> On Dec 3, 2021, at 6:28 PM, Roland Schatz via llvm-dev <llvm-dev at 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 <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 <https://github.com/Kitware/CMake/commit/2e1149874d34b63cc16c7330ce1ef5ef779e5140> > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20211204/a0886049/attachment.html>
On Fri, Dec 3, 2021 at 2:28 AM Roland Schatz via llvm-dev <llvm-dev at 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> 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 > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev