【笔记】在 Centos 7 下编译 LLVM / Clang

因为是笔记,所以没有开头( ̄▽ ̄)~*

底包:

我之前安装了本人打的 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 目录下的组件:

  1. 解压 cfe-6.0.0.src.tar.xz,重命名为 llvm-6.0.0.src/tools/clang
  2. 解压 lld-6.0.0.src.tar.xz,重命名为 llvm-6.0.0.src/tools/lld
  3. 解压 polly-6.0.0.src.tar.xz,重命名为 llvm-6.0.0.src/tools/polly
  4. 解压 lldb-6.0.0.src.tar.xz,重命名为 llvm-6.0.0.src/tools/lldb

放在 llvm-6.0.0.src/projects 目录下的组件:

  1. 解压 openmp-6.0.0.src.tar.xz,重命名为 llvm-6.0.0.src/projects/openmp
  2. 解压 libcxx-6.0.0.src.tar.xz,重命名为 llvm-6.0.0.src/projects/libcxx
  3. 解压 libcxxabi-6.0.0.src.tar.xz,重命名为 llvm-6.0.0.src/projects/libcxxabi
  4. 解压 libunwind-6.0.0.src.tar.xz,重命名为 llvm-6.0.0.src/projects/libunwind
  5. 解压 compiler-rt-6.0.0.src.tar.xz,重命名为 llvm-6.0.0.src/projects/compiler-rt

clang 的子组件:

  1. 解压 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

相关推荐