Skip to content
Branch: master
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
README.md
installer.sh

README.md

Linux 编译安装 LLVM + Clang 7.0

LLVM + Clang 7.0 发布啦,本脚本在之前LLVM + Clang 6.0 的基础上做了稍许更新。

不知道哪个版本开始,使用开了gold链接器的gcc需要用 -fuse-ld=gold 才能链接通过。所以本次脚本主要增加检测是否支持 -fuse-ld=gold 选项,如果支持则链接选项增加 -fuse-ld=gold 。另外调整了 libunwind 的编译过程。

如果在一些比较老的系统上,自带的gcc版本过低(比如CentOS 6).可以先用 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-8 编译出新版gcc,再用这个gcc来编译llvm+clang工具链。

编译脚本使用示例

sudo -b env CC=/usr/local/gcc-8.2.0/gcc CXX=/usr/local/gcc-8.2.0/g++ nohup ./install.sh
sudo chmod 777 nohup.out && tail -f nohup.out;

# 或者不需要root权限
env CC=/usr/local/gcc-8.2.0/gcc CXX=/usr/local/gcc-8.2.0/g++ nohup ./install.sh -p $HOME/prebuilt/llvm-7.0 &
tail -f nohup.out;

NOTICE

  1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so
  2. llvm内部分组件没有使用LIBCXX_LIBCXXABI_INCLUDE_PATHS来查找c++abi的头文件,故而编译的时候直接把这个目录加到了C_INCLUDE_PATH里
  3. 使用动态库,原先使用静态库会导致编译出来的二进制非常大,现在全部使用动态库
  4. CentOS 7下测试默认包+lld通过, 本地测试过的编译命令如下

clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ [源文件...]

clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ [源文件...]

clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi [源文件...]

clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi [源文件...]

clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi [源文件...]

clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi [源文件...]

其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags

  • 如果使用***clang -stdlib=libc++则需要加上-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号)
  • 如果使用***clang -stdlib=libstdc++则需要加上-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++***
  • 建议使用llvm-config --cflags,llvm-config --cxxflagsllvm-config --ldflags来查看需要附加的编译选项

发行注记

编译安装 LLVM + Clang 7.0

准备环境及依赖项

  1. cmake
  2. Python 2.7 or higher
  3. python-devel/python-dev(lldb依赖项)
  4. swig(lldb依赖项)
  5. libedit/libedit-devel/libedit-dev(lldb依赖项)
  6. libxml2-devel(lldb依赖项)
  7. ncurses-devel(lldb依赖项)
  8. GCC 4.7 or higher

我编译的环境

系统:

CentOS 7.3 & CentOS 6.2

系统库:

详情参见 llvm官网

编译的依赖库:

  • libc++ 7.0.0
  • libc++abi 7.0.0
  • libunwind 7.0.0

默认编译目标:

  • llvm 7.0.0
  • clang 7.0.0
  • compiler_rt 7.0.0
  • clang_tools_extra 7.0.0
  • lldb 7.0.0
  • lld 7.0.0

注:

  • (所有的库都会被安装在**$PREFEX_DIR**里)

额外建议:

  • 如果增加编译组件,比如已装有gtest要编译lld,使用命令 ./install.sh -t +openmp

History:

  • 2018-09-28 Created
  • 2019-02-05 更新版本到7.0.1,修订编译流程中的libunwind流程,在第二遍自举中,libc++abi必须依赖Libunwind,优先使用ninja来构建
  • 2019-03-05 改成默认Release编译,RelWithDebInfo出的包太大了

参考文献

  1. llvm官网
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.