clang-libcxx-lld-lldb自举

最近折腾一下clang工具链自举吧,不自举老连系统库就失去在Linux上用clang的意义了啊(难迁移)。

假设在llvm-project文件夹,源代码在llvm-project/src文件夹,以Clang 16.0为例。

全程序版

mkdir build && cd build
cmake -G "Ninja" \
  -DCMAKE_C_COMPILER=clang \
  -DCMAKE_CXX_COMPILER=clang++ \
  -DLLVM_USE_LINKER=lld \
  -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;cross-project-tests;libclc;lld;lldb;polly;pstl" \
  -DLLVM_TARGETS_TO_BUILD=Native \
  -DCLANG_ENABLE_BOOTSTRAP=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -DCLANG_DEFAULT_CXX_STDLIB=libc++ \
  -DCLANG_DEFAULT_RTLIB=compiler-rt \
  -DLLVM_ENABLE_RUNTIMES="compiler-rt;libc;libcxx;libcxxabi;libunwind;openmp" \
  -DLIBCXX_USE_COMPILER_RT=YES \
  -DLIBCXXABI_USE_COMPILER_RT=YES \
  -DLIBCXXABI_USE_LLVM_UNWINDER=YES \
  -DLIBCXX_ENABLE_PARALLEL_ALGORITHMS=ON \
  -DBOOTSTRAP_CMAKE_BUILD_TYPE=Release \
  -DBOOTSTRAP_LLVM_ENABLE_PROJECTS="clang;clang-tools-extra;cross-project-tests;libclc;lld;lldb;polly;pstl" \
  -DBOOTSTRAP_LLVM_ENABLE_RUNTIMES="compiler-rt;libc;libcxx;libcxxabi;libunwind;openmp" \
  -DBOOTSTRAP_CLANG_DEFAULT_CXX_STDLIB=libc++ \
  -DBOOTSTRAP_CLANG_DEFAULT_RTLIB=compiler-rt \
  -DBOOTSTRAP_LIBCXX_USE_COMPILER_RT=YES \
  -DBOOTSTRAP_LIBCXXABI_USE_COMPILER_RT=YES \
  -DBOOTSTRAP_LIBCXXABI_USE_LLVM_UNWINDER=YES \
  -DBOOTSTRAP_LLVM_USE_LINKER=lld \
  -DLIBUNWIND_USE_COMPILER_RT=Yes \
  -DBOOTSTRAP_LIBUNWIND_USE_COMPILER_RT=Yes \
  -DBOOTSTRAP_LIBCXX_ENABLE_PARALLEL_ALGORITHMS=ON \
  ../src/llvm
ninja 
ninja stage2

关键程序版(clang lld lldb libcxx libcxxabi libunwind compiler_rt):

mkdir build && cd build
cmake -G "Ninja" \
  -DCMAKE_C_COMPILER=clang \
  -DCMAKE_CXX_COMPILER=clang++ \
  -DLLVM_USE_LINKER=lld \
  -DLLVM_ENABLE_PROJECTS="clang;lld;lldb;libc;pstl" \
  -DLLVM_TARGETS_TO_BUILD=Native \
  -DCLANG_ENABLE_BOOTSTRAP=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -DCLANG_DEFAULT_CXX_STDLIB=libc++ \
  -DCLANG_DEFAULT_RTLIB=compiler-rt \
  -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind" \
  -DLIBCXX_USE_COMPILER_RT=YES \
  -DLIBCXXABI_USE_COMPILER_RT=YES \
  -DLIBCXXABI_USE_LLVM_UNWINDER=YES \
  -DLIBUNWIND_USE_COMPILER_RT=Yes \
  -DBOOTSTRAP_CMAKE_BUILD_TYPE=Release \
  -DBOOTSTRAP_LLVM_ENABLE_PROJECTS="clang;lld;lldb;pstl" \
  -DBOOTSTRAP_LLVM_ENABLE_RUNTIMES="compiler-rt;libc;libcxx;libcxxabi;libunwind" \
  -DBOOTSTRAP_CLANG_DEFAULT_CXX_STDLIB=libc++ \
  -DBOOTSTRAP_CLANG_DEFAULT_RTLIB=compiler-rt \
  -DBOOTSTRAP_LIBCXX_USE_COMPILER_RT=YES \
  -DBOOTSTRAP_LIBCXXABI_USE_COMPILER_RT=YES \
  -DBOOTSTRAP_LIBCXXABI_USE_LLVM_UNWINDER=YES \
  -DBOOTSTRAP_LLVM_USE_LINKER=lld \
  -DBOOTSTRAP_LIBUNWIND_USE_COMPILER_RT=Yes \
  ../src/llvm
ninja 
ninja stage2

存在的问题

  1. PSTL老是打包不进去(正在修复,见D141779 [libc++][PSTL] Copy the headers into libc++);
  2. libc好像不能自举。