因为是笔记,所以没有开头( ̄▽ ̄)~*
底包:
我之前安装了本人打的 LLVM-5.0.1 的 RPM 包,这次也以这个包起底。LLVM 依赖(不是那么新的) C++14 特性,Centos 自带的 gcc 套件是 4.8.5 版本,编译 libcxx 会失败。
下载文件
http://releases.llvm.org/down...
除 LLVM Test Suite
都下载,放在一起。
https://cmake.org/files/v3.11...
LLVM 编译依赖 CMake 3.4.3 以上,Centos 自带 2.8.12.2 不能用。
安装 CMake
cmake-3.11.0-Linux-x86_64.sh
添加执行权限后运行,一路 D,Y 接受许可协议,Y 安装到当前目录的 cmake-3.11.0-Linux-x86_64
子目录下。
安装其他编译依赖
$ yum install python-devel libffi-devel graphviz-devel elfutils-libelf-devel readline-devel libedit-devel libxml2-devel protobuf-devel gtext-devel doxygen swig
准备 LLVM 源码
LLVM 的各个子组件必须放在 LLVM 源码的固定位置,使用固定名称。
首先解压 llvm-6.0.0.src.tar.xz
,生成目录 llvm-6.0.0.src
解压 tar.xz 文件使用 tar Jxvf filename.tar.xz
放在 llvm-6.0.0.src/tools
目录下的组件:
- 解压
cfe-6.0.0.src.tar.xz
,重命名为llvm-6.0.0.src/tools/clang
- 解压
lld-6.0.0.src.tar.xz
,重命名为llvm-6.0.0.src/tools/lld
- 解压
polly-6.0.0.src.tar.xz
,重命名为llvm-6.0.0.src/tools/polly
- 解压
lldb-6.0.0.src.tar.xz
,重命名为llvm-6.0.0.src/tools/lldb
放在 llvm-6.0.0.src/projects
目录下的组件:
- 解压
openmp-6.0.0.src.tar.xz
,重命名为llvm-6.0.0.src/projects/openmp
- 解压
libcxx-6.0.0.src.tar.xz
,重命名为llvm-6.0.0.src/projects/libcxx
- 解压
libcxxabi-6.0.0.src.tar.xz
,重命名为llvm-6.0.0.src/projects/libcxxabi
- 解压
libunwind-6.0.0.src.tar.xz
,重命名为llvm-6.0.0.src/projects/libunwind
- 解压
compiler-rt-6.0.0.src.tar.xz
,重命名为llvm-6.0.0.src/projects/compiler-rt
clang 的子组件:
- 解压
clang-tools-extra-6.0.0.src.tar.xz
,重命名为llvm-6.0.0.src/tools/clang/tools/extra
使用 CMake 生成 Makefile
首先指定编译器为 clang 5.0.1
:
$ export LD_LIBRARY_PATH=/usr/local/lib:/opt/gcc6-dist/lib64:/opt/llvm-5.0.1/lib64
$ export CC=/opt/llvm-5.0.1/bin/clang
$ export CXX=/opt/llvm-5.0.1/bin/clang++
$ export CXXFLAGS=-stdlib=libc++
$ export LDFLAGS='-lc++ -lc++abi'
假设所有组件都放在当前用户的主目录下
$ cd ~/llvm-6.0.0.src
$ mkdir build && cd build
$ ~/cmake-3.11.0-Linux-x86_64/bin/cmake .. -DLLVM_OPTIMIZED_TABLEGEN=ON -DLLVM_INCLUDE_DOCS=OFF -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_EH=ON -DLLVM_INSTALL_UTILS=ON -DWITH_POLLY=ON -DLINK_POLLY_INTO_TOOLS=ON -DLLVM_TARGETS_TO_BUILD=X86 -DLIBOMP_ARCH=x86_64 -DBUILD_SHARED_LIBS=ON -DLIBOMP_ENABLE_SHARED=ON -DLLVM_ENABLE_LIBCXX=ON -DLLDB_RELOCATABLE_PYTHON=ON -DLLVM_ENABLE_FFI=ON -DCMAKE_BUILD_TYPE=Release -DCLANG_DEFAULT_CXX_STDLIB=libc++ -DCLANG_INCLUDE_TESTS=OFF -DENABLE_LINKER_BUILD_ID=ON -DENABLE_X86_RELAX_RELOCATIONS=ON -DLIBCXXABI_INCLUDE_TESTS=OFF -DLIBCXX_INCLUDE_BENCHMARKS=OFF -DLIBCXX_INCLUDE_TESTS=OFF -DLIBOMP_TSAN_SUPPORT=ON -DLLDB_BUILD_INTEL_PT=OFF -DLLDB_INCLUDE_TESTS=OFF -DLLVM_ENABLE_OCAMLDOC=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_GO_TESTS=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INSTALL_BINUTILS_SYMLINKS=ON -DLLVM_TOOL_LLGO_BUILD=ON -DLLVM_TOOL_PARALLEL_LIBS_BUILD=ON -DLLVM_ENABLE_PIC=ON -DLIBUNWIND_ENABLE_SHARED=OFF -DLIBCXX_ENABLE_PEDANTIC=ON -DLIBCXXABI_LIBDIR_SUFFIX=64 -DLIBCXX_LIBDIR_SUFFIX=64 -DLIBUNWIND_LIBDIR_SUFFIX=64 -DLLVM_LIBDIR_SUFFIX=64
正式编译
$ nohup make -j4 & # -j4 表示并发执行 4 个任务,这个数字指定 CPU 核心数为佳
编译时间很长,通常在一个小时以上
安装
$ make install
默认会安装到 /usr/local
下,可以用 DESTDIR=xxx
自定义安装目录
如出现如下报错:
CMake Error at tools/lldb/scripts/cmake_install.cmake:41 (file):
file INSTALL cannot find "path/llvm-6.0.0.src/build/lib/python2.7"
执行
$ cp -r lib64/python2.7 lib/python2.7