llvm+clang 添加 LTO(Link Time Optimization) 支持

binutils

LTO 要求当前系统binutils可使用 gold linker或者ld.bfd 通过 plugin 支持 LTO, binutils 版本 >= 2.21.511.0.2. 可通过ld -plugin 检查当前系统是否支持 plugin.
RHEL/CentOS6 系统自带 binutils 不支持 plugin.

$ ld -v
GNU ld version 2.20.51.0.2-5.47.el6_9.1 20100205
$ ld -plugin
ld: unrecognized option '-plugin'
ld: use the --help option for usage information

安装 devtoolset-7 后可以支持.

$ ld -v
GNU ld version 2.28-8.el6
$ ld -plugin
ld: -plugin: missing argument
ld: use the --help option for usage information

亦可通过重新编译binutils安装到系统提供支持

$ git clone --depth 1 git://sourceware.org/git/binutils-gdb.git binutils
$ mkdir build
$ cd build
$ ../binutils/configure --disable-werror # ld.bfd includes plugin support by default
$ make all-ld

LLVM-CLANG

Full compile llvm-clang

重新配置 llvm-clang 运行 cmake 添加 -DLLVM_BINUTILS_INCDIR=/path/to/binutils/include 指定包含 plugin-api.h 目录参数 , make install/strip 即可.

LLVMgold plugin

安装 binutils$PREFIX 目录.

cmake ... -DLLVM_BINUTILS_INCDIR=/path/to/binutils/include ../llvm_Release_500/
make -C tools/gold/

复制 /lib/LLVMgold.so$PREFIX/lib/bfd-plugins/

Usage

clang -flto xxx.c -o xxx

autotool 工具链配置使用.

export CC="$PREFIX/bin/clang -flto"
export CXX="$PREFIX/bin/clang++ -flto"
export AR="$PREFIX/bin/ar"
export NM="$PREFIX/bin/nm"
export RANLIB=/bin/true #ranlib is not needed, and doesn't support .bc files in .a

参考

gold linker
GCC LTO
libLTO
GoldPlugin

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值