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

本文介绍如何在RHEL/CentOS 6系统上通过安装devtoolset-7或重新编译binutils来支持Link Time Optimization (LTO),并详细说明了配置LLVM与Clang进行LTO优化的具体步骤。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值