Index: llvm/CMakeLists.txt =================================================================== --- llvm/CMakeLists.txt +++ llvm/CMakeLists.txt @@ -439,6 +439,9 @@ option(LLVM_FORCE_USE_OLD_TOOLCHAIN "Set to ON to force using an old, unsupported host toolchain." OFF) +set(LLVM_LOCAL_RPATH "" CACHE FILEPATH + "If set, an absolute path added as rpath on binaries that do not already contain an executable-relative rpath.") + option(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN "Set to ON to only warn when using a toolchain which is about to be deprecated, instead of emitting an error." OFF) Index: llvm/cmake/modules/AddLLVM.cmake =================================================================== --- llvm/cmake/modules/AddLLVM.cmake +++ llvm/cmake/modules/AddLLVM.cmake @@ -821,6 +821,10 @@ if(NOT ARG_NO_INSTALL_RPATH) llvm_setup_rpath(${name}) + elseif (LLVM_LOCAL_RPATH) + set_target_properties(${name} PROPERTIES + BUILD_WITH_INSTALL_RPATH On + INSTALL_RPATH "${LLVM_LOCAL_RPATH}") endif() if(DEFINED windows_resource_file) Index: llvm/docs/GettingStarted.rst =================================================================== --- llvm/docs/GettingStarted.rst +++ llvm/docs/GettingStarted.rst @@ -340,6 +340,16 @@ from the loader similar to ``libstdc++.so.6: version `GLIBCXX_3.4.20' not found``. This means you need to tweak the -rpath linker flag. +This method will add an absolute path to the rpath of all executables. That's +fine for local development. If you want to distribute the binaries you build +so that they can run on older systems, copy ``libstdc++.so.6`` into the +``lib/`` directory. All of LLVM's shipping binaries have an rpath pointing at +``$ORIGIN/../lib``, so they will find ``libstdc++.so.6`` there. Non-distributed +binaries don't have an rpath set and won't find ``libstdc++.so.6``. Pass +``-DLLVM_LOCAL_RPATH="$HOME/toolchains/lib64"`` to cmake to add an absolute +path to ``libstdc++.so.6`` as above. Since these binaries are not distributed, +having an absolute local path is fine for them. + When you build Clang, you will need to give *it* access to modern C++ standard library in order to use it as your new host in part of a bootstrap. There are two easy ways to do this, either build (and install) libc++ along