pkgsrc-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
rust-1.81.0 & LLVM, LLD and cmake
Hi,
I am finding that rust 1.81.0 does not appear to want to build
with an external LLVM (and libunwind), at least not if either of
those are not >= 18.0.0.
However, installing LLVM 18.x and libunwind 18.x still does not
make rust-1.81.0 build with this external LLVM, and this leads me
to a battle with my favourite hate object: cmake, which spreads
its different fragments and functions over a myriad of
non-transparent places, and if I need to do some surgery to the
cmake setup, it's basically impossible to figure out where to do
that. Case in point, the rust-1.81.0 build now fails with
-- Installing: /usr/pkgsrc/wip/rust181/work/rustc-1.81.0-src/build/x86_64-unknown-netbsd/lld/bin/lld
CMake Error at tools/lld/cmake_install.cmake:50 (file):
file RPATH_CHANGE could not write new RPATH:
$ORIGIN/../lib
to the file:
/usr/pkgsrc/wip/rust181/work/rustc-1.81.0-src/build/x86_64-unknown-netbsd/lld/bin/lld
The current RPATH is:
/usr/pkg/lib
which does not contain:
$ORIGIN/../lib:/usr/pkg/lib:
as was expected.
Call Stack (most recent call first):
cmake_install.cmake:51 (include)
gmake: *** [Makefile:100: install] Error 1
Now, I know that we have scaffolding in pkgsrc which prevents the
use of $ORIGIN in RPATHs, and I hope that the static RPATH
pointing to ${PREFIX}/lib (here /usr/pkg/lib) will be sufficient.
Looking at
work/rustc-1.81.0-src/build/x86_64-unknown-netbsd/lld/build/tools/lld/cmake_install.cmake
says at the top
# Install script for directory: /usr/pkgsrc/wip/rust181/work/rustc-1.81.0-src/src/llvm-project/lld/tools/lld
But ... this is a build directory, so patching that will not
succeed -- it looks like this cmake_install.cmake is generated.
But from what?!? There's no trace. This file contains
if(CMAKE_INSTALL_COMPONENT STREQUAL "lld" OR NOT CMAKE_INSTALL_COMPONENT)
if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/lld" AND
NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/lld")
file(RPATH_CHECK
FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/lld"
RPATH "\$ORIGIN/../lib")
endif()
file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE MESSAGE_LAZY FILES "/usr/pkgsrc/wip/rust181/work/rustc-1.81.0-src/build/x86_64-unknown-netbsd/lld/build/bin/lld")
if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/lld" AND
NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/lld")
file(RPATH_CHANGE
FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/lld"
OLD_RPATH "\$ORIGIN/../lib:/usr/pkg/lib:"
NEW_RPATH "\$ORIGIN/../lib")
if(CMAKE_INSTALL_DO_STRIP)
execute_process(COMMAND "/usr/pkgsrc/wip/rust181/work/.tools/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/lld")
endif()
endif()
endif()
and obviously this attempt at $ORIGIN tweaking needs to go for
pkgsrc (yes?)
But ... where does this cmake section come from?
I've rummaged a bit around in work/rustc-1.81.0-src/llvm-project
without much success, at which point I throw up my hands in
frustration.
Forcing rust to always build with the embedded LLVM (which
succeeds) seems a bit heavy-handed, and will not exactly do
wonders for the rust build time (as if that wasn't terrible
already).
Searching with
find work/rustc-1.81.0-src/src/llvm-project/ -type f -print0 | \
xargs -0 egrep -l CMAKE_INSTALL_COMPONENT | xargs egrep -l ORIGIN
only turns up
work/rustc-1.81.0-src/src/llvm-project/llvm/cmake/modules/AddLLVM.cmake
and that's not it.
How do folks debug this stuff?!? Is there some tool I should
use which I don't know about?
"Help!"
Regards,
- Håvard
Home |
Main Index |
Thread Index |
Old Index