Compile LLVM+CLANG 4.0.1 for RHEL6
llvm + clang
系统要求:
Package | version |
---|---|
GNU Make | 3.79,3.71 |
GCC |
= 4.8.0 |
python |
= 2.7 |
zlib |
= 1.2.3 |
下载
http://releases.llvm.org/download.html#4.0.1
export CLANG_PKG=/mnt/clang
cd /mnt/clang
wget http://releases.llvm.org/4.0.1/llvm-4.0.1.src.tar.xz
wget http://releases.llvm.org/4.0.1/cfe-4.0.1.src.tar.xz
wget http://releases.llvm.org/4.0.1/compiler-rt-4.0.1.src.tar.xz
wget http://releases.llvm.org/4.0.1/libcxx-4.0.1.src.tar.xz
wget http://releases.llvm.org/4.0.1/libcxxabi-4.0.1.src.tar.xz
wget http://releases.llvm.org/4.0.1/libunwind-4.0.1.src.tar.xz
wget http://releases.llvm.org/4.0.1/lld-4.0.1.src.tar.xz
wget http://releases.llvm.org/4.0.1/lldb-4.0.1.src.tar.xz
wget http://releases.llvm.org/4.0.1/polly-4.0.1.src.tar.xz
wget http://releases.llvm.org/4.0.1/clang-tools-extra-4.0.1.src.tar.xz
wget http://releases.llvm.org/4.0.1/test-suite-4.0.1.src.tar.xz
解压
tar -Jxf ${CLANG_PKG}/llvm-4.0.1.src.tar.xz
mv llvm-4.0.1.src llvm_RELEASE_401
export CLANG_SRC=`pwd`/llvm_RELEASE_401
cd ${CLANG_SRC}/tools
tar -Jxf ${CLANG_PKG}/cfe-4.0.1.src.tar.xz
mv cfe-4.0.1.src clang
tar -Jxf ${CLANG_PKG}/polly-4.0.1.src.tar.xz
mv polly-4.0.1.src polly
tar -Jxf ${CLANG_PKG}/lldb-4.0.1.src.tar.xz
mv lldb-4.0.1.src lldb
tar -Jxf ${CLANG_PKG}/lld-4.0.1.src.tar.xz
mv lld-4.0.1.src lld
tar -Jxf ${CLANG_PKG}/clang-tools-extra-4.0.1.src.tar.xz
cd ${CLANG_SRC}/tools/clang/tools
mv clang-tools-extra-4.0.1.src extra
cd ${CLANG_SRC}/projects
tar -Jxvf ${CLANG_PKG}/compiler-rt-4.0.1.src.tar.xz
mv compiler-rt-4.0.1.src compiler-rt
tar -Jxvf ${CLANG_PKG}/libcxx-4.0.1.src.tar.xz
mv libcxx-4.0.1.src libcxx
tar -Jxvf ${CLANG_PKG}/libcxxabi-4.0.1.src.tar.xz
mv libcxxabi-4.0.1.src libcxxabi
tar -Jxvf ${CLANG_PKG}/libunwind-4.0.1.src.tar.xz
mv libunwind-4.0.1.src libunwind
也可通过svn checkout
所有代码,具体参考GettingStarted.
配置
配置 | 描叙 |
---|---|
CMAKE_C_COMPILER | gcc 路径 |
CMAKE_CXX_COMPILER | g++ 路径 |
CMAKE_INSTALL_PREFIX | 指定install 路径 |
CMAKE_BUILD_TYPE | build 类型(Debug, Release, RelWithDebInfo, and MinSizeRel. Default is Debug. ) |
LLVM_TARGETS_TO_BUILD | build 目标平台 (AArch64, AMDGPU, ARM, BPF, Hexagon, Mips, MSP430, NVPTX, PowerPC, Sparc, SystemZ, X86, XCore. ) |
LLVM_OPTIMIZED_TABLEGEN | Builds a release tablegen that gets used during the LLVM build. This can dramatically speed up debug builds. |
LLVM_BUILD_LLVM_DYLIB | Generate libLLVM.so. This library contains a default set of LLVM components that can be overridden with LLVM_DYLIB_COMPONENTS. The default contains most of LLVM and is defined in tools/llvm-shlib/CMakelists.txt. |
CMAKE_CXX_FLAGS | c++ 编译参数 |
CMAKE_EXE_LINKER_FLAGS | linker 参数 |
CLANG_DEFAULT_CXX_STDLIB | 指定clang 默认使用的C++ stdlib ("libstdc++" or "libc++" or 空使用当前默认配置 ) |
CLANG_DEFAULT_LINKER | 指定clang 默认使用的 linker (linker name or absolute path. ) |
CLANG_DEFAULT_RTLIB | 指定clang 默认使用的 runtime 库("libgcc" or "compiler-rt" or 空使用当前默认配置 ) |
LLVM_ENABLE_LIBCXX | 启用libc++ 编译llvm & clang ; |
LLVM_ENABLE_LLD | 启用lld 作为 C and C++ linker ; |
PYTHON_EXECUTABLE | 指定使用python path ; |
注意:
如果当前python
版本为3
,可通过-DPYTHON_EXECUTABLE=python2-path
指定使用python2
路径;
cmake -G "Unix Makefiles" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/opt/llvm_RELEASE_401-linux-x86_64-RHEL6 \
-DLLVM_TARGETS_TO_BUILD=X86 \
../llvm_RELEASE_401
注: libcxx-4.0.1 & libcxxabi-4.0.1
系统g++
版本不能低于 4.9
, 低于4.9
版本g++编译报错。
安装
make install/strip
其他
Using LLD
- 修改系统
ld
链接到ld.lld
; clang
添加-fuse-ld=lld
LDFLAGS;- 修改
llvm
编译配置,修改CLANG_DEFAULT_LINKER=ld.lld
, 重新make install/strip
;
clang Expressive Diagnostics
clang -fsyntax-only format-strings.c
format-strings.c:91:13: warning: '.*' specified field precision is missing a matching 'int' argument
printf("%.*d");
参考
GettingStarted
Building and Running Clang
PollyGetStarted
BuildingLldbOnLinux
BuildingLibcxx
LLD - The LLVM Linker
How To Install LLVM and Clang on CentOS 6
How To Install GCC on CentOS 6