mkdir ~/llvm-release
1.下载llvm的源代码
git clone https://gitee.com/mirrors/LLVM.git LLVM
2.编译一个第一阶段的 clang 什么是第一阶段的clang
cd LLVM mkdir clang-1ststage-build cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_BUILD_LLVM_DYLIB=TRUE -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" -S llvm -B clang-1ststage-build cd clang-1ststage-build make -j
CMAKE_BUILD_TYPE 设置编译类型,一般选Release 就行 LLVM_TARGETS_TO_BUILD 编译器支持的架构平台,这里我只配置了x86 ---- LLVM_BUILD_LLVM_DYLIB 设置是否使用llvm的动态库,强烈建议打开,不然编译出来的第一阶段的二进制超级大,而且运行起来十分慢 ---- LLVM_ENABLE_PROJECTS 要编译的二进制 ---- 3.编译libcxx 上面的编译完以后就有了一个可用的clang二进制,然后我想编译c++库,让clang通过使用libc++来支持高版本的c++ 回到llvm源码根目录 ```bash mkdir libcxx-build cmake -DCMAKE_INSTALL_PREFIX=~/llvm-release -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_BUILD_LLVM_DYLIB=TRUE -DLLVM_ENABLE_RUNTIMES="libc;libcxx;libcxxabi" -S runtimes -B libcxx-build make -j make install
4.编译第二阶段的clang
回到llvm源码根目录
export LD_LIBRARY_PATH=~/llvm-release/lib mkdir clang-2ndstage-build cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_BUILD_LLVM_DYLIB=TRUE -DLLVM_ENABLE_LIBCXX=TRUE -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" -S llvm -B clang-2ndstage-build cd clang-2ndstage-build make -j make install
1.阶段1
阶段1编译出来的编译器主要是提供一个基本的编译功能,这个编译器依赖的一些动态库还是来自于你编译阶段编译器所用到的本机编译器,因为跟你本机的编译器相关,所以这个阶段编译出来的编译器二进制可能执行效率不是很好。同时因为依赖本机编译器支持的语言标准版本,如果你不去编译llvm的libcxx的话,但是你的代码使用的语言版本过高,这个阶段的编译器也是没办法编译的。同时因为这个编译器是从llvm源码编译的,所以在生成二进制方面可能会比你本机的老版本编译器好点。
2.阶段2
阶段2的编译器是使用阶段1的编译器编译出来的,阶段1的编译器二进制生成以后,用这个二进制去再次编译llvm,就会得到干净的,只依赖llvm库的编译器,跟本机的那个编译器已经没有关系了。