Skip to content

llvm-tblgen and clang-tblgen: error while loading shared libraries: libc++.so.1 #53561

Open
@arcivanov

Description

I have a custom two-stage build.

Stage 1 build LLVM 13.0.1 toolchain via GCC on Fedora 35 x86.
Stage 2 build LLVM 13.0.1 toolchain using Stage 1 relying completely on LLVM (libc++, compiler-rt, libunwind everywhere).

Stage 1 builds and functions fine.
Stage 2 fails to build while invoking any target with llvm-tblgen in its path, because it's built before libc++ it requires.
If llvm-tblgen is specified to be remote via "-DLLVM_TABLEGEN" then the identical thing happens to clang-tblgen.

IMPORTANT: The CMAKE_INSTALL_PREFIX of Stage 1 is on PATH when building Stage 2 but is in a user home directory

Stage 1 CMAKE cache:

set(LLVM_ENABLE_PROJECTS "clang;lld;compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "")

set(LLVM_TARGETS_TO_BUILD X86 CACHE STRING "")

set(LLVM_BUILD_TOOLS OFF CACHE BOOL "")
set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
set(LLVM_INCLUDE_BENCHMARKS OFF CACHE BOOL "")

set(LLVM_INSTALL_BINUTILS_SYMLINKS ON CACHE BOOL "")
set(LLVM_INSTALL_CCTOOLS_SYMLINKS ON CACHE BOOL "")

set(LLVM_PARALLEL_LINK_JOBS 1 CACHE STRING "")

set(LLVM_BUILD_LLVM_DYLIB ON CACHE BOOL "")
set(LLVM_LINK_LLVM_DYLIB ON CACHE BOOL "")
set(CLANG_LINK_CLANG_DYLIB ON CACHE BOOL "")

set(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "")

set(CMAKE_BUILD_TYPE Release CACHE STRING "")
set(CMAKE_C_FLAGS_RELEASE "-O2" CACHE STRING "")
set(CMAKE_CXX_FLAGS_RELEASE "-O2" CACHE STRING "")
set(CMAKE_ASM_FLAGS_RELEASE "-O2" CACHE STRING "")

Stage 2 CMAKE cache:

set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld;lldb" CACHE STRING "")
set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "")
set(LLVM_TARGETS_TO_BUILD X86 CACHE STRING "")

set(LLVM_BUILD_TOOLS ON CACHE BOOL "")
set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
set(LLVM_INCLUDE_BENCHMARKS OFF CACHE BOOL "")

set(LLVM_ENABLE_DUMP ON CACHE BOOL "")

set(LLVM_BUILD_LLVM_DYLIB ON CACHE BOOL "")
set(LLVM_LINK_LLVM_DYLIB ON CACHE BOOL "")
set(CLANG_LINK_CLANG_DYLIB ON CACHE BOOL "")

set(LLVM_ENABLE_LTO Thin CACHE BOOL "")
set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
set(LLVM_ENABLE_LIBEDIT OFF CACHE BOOL "")
set(LLVM_ENABLE_LLD ON CACHE BOOL "")
set(LLVM_ENABLE_LIBCXX ON CACHE BOOL "")

set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
set(CLANG_DEFAULT_LINKER lld CACHE STRING "")
set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
set(CLANG_DEFAULT_UNWINDLIB libunwind CACHE STRING "")

set(COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "")
set(SANITIZER_CXX_ABI libc++ CACHE STRING "")
set(SANITIZER_TEST_CXX libc++ CACHE STRING "")
set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "")
set(LIBCXX_USE_COMPILER_RT YES CACHE BOOL "")
set(LIBCXXABI_USE_COMPILER_RT YES CACHE BOOL "")
set(LIBCXXABI_USE_LLVM_UNWINDER YES CACHE BOOL "")

set(LLVM_INSTALL_BINUTILS_SYMLINKS ON CACHE BOOL "")
set(LLVM_INSTALL_CCTOOLS_SYMLINKS ON CACHE BOOL "")

set(LLVM_PARALLEL_LINK_JOBS 1 CACHE STRING "")

set(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "")

set(CMAKE_C_COMPILER clang CACHE STRING "")
set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -glldb -DNDEBUG" CACHE STRING "")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -glldb -DNDEBUG" CACHE STRING "")
set(CMAKE_ASM_FLAGS_RELWITHDEBINFO "-O3 -glldb -DNDEBUG" CACHE STRING "")

Stage 1 and Stage 2 are built virtually identically.
Stage 2 is built as follows, where LLVM_DISTRO_CONF is the CMAKE cache file above:

cmake3 -G Ninja \
  -Wno-dev \
  -DCMAKE_INSTALL_PREFIX="$TARGET_DIR" \
  -DPYTHON_HOME="$(python -c 'import sys; print(sys.exec_prefix)')" \
  -DPYTHON_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')" \
  -DPython3_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')" \
  -C "$LLVM_DISTRO_CONF" \
  -S "$SOURCE_DIR" -B "$BUILD_DIR"

pushd "$BUILD_DIR"

ninja-build install-runtimes

The build fails with the above llvm-tblgen or clang-tblgen error.

Example:

[423/2897] Building Attributes.inc...
FAILED: include/llvm/IR/Attributes.inc /home/user/Documents/src/llvm/llvm.stage2.build/include/llvm/IR/Attributes.inc 
cd /home/user/Documents/src/llvm/llvm.stage2.build && /home/user/Documents/src/llvm/llvm.stage2.build/bin/llvm-tblgen -gen-attrs -I /home/user/Documents/src/llvm/llvm-project/llvm/include/llvm/IR -I/home/user/Documents/src/llvm/llvm.stage2.build/include -I/home/user/Documents/src/llvm/llvm-project/llvm/include /home/user/Documents/src/llvm/llvm-project/llvm/include/llvm/IR/Attributes.td --write-if-changed -o include/llvm/IR/Attributes.inc -d include/llvm/IR/Attributes.inc.d
/home/user/Documents/src/llvm/llvm.stage2.build/bin/llvm-tblgen: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions