最近折腾一下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
存在的问题
- PSTL老是打包不进去(正在修复,见D141779 [libc++][PSTL] Copy the headers into libc++);
- libc好像不能自举。