最近折腾一下clang工具链自举吧,不自举老连系统库就失去在Linux上用clang的意义了啊(难迁移)。
假设在llvm-project
文件夹,源代码在llvm-project/src
文件夹,以Clang 16.0为例。
全程序版
mkdir build && cd buildcmake -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/llvmninjaninja stage2
关键程序版(clang lld lldb libcxx libcxxabi libunwind compiler_rt):
mkdir build && cd buildcmake -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/llvmninjaninja stage2
存在的问题
- PSTL老是打包不进去(正在修复,见D141779 [libc++][PSTL] Copy the headers into libc++);
- libc好像不能自举。