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