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

llvm+clang 添加 LTO(Link Time Optimization) 支持相关推荐

  1. LTO(Link Time Optimization)优化

    之前做build settings相关的调研,一直以为开启LTO后主要是能给包大小带来优化(在debug模式下包大小确实减小了5.7M),但是最终打包(release下)发现包大小不减反增了0.2M, ...

  2. 【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍

    转自:ARM 之七 主流编译器(armcc.iar.gcc for arm.LLVM(clang))详细介绍_itexp-CSDN博客_armcc 必备   在讲解各编译器之前,必须先了解一下以下文件 ...

  3. clang编译c语言开o优化,针对gcc或clang的LTO可以跨C和C方法进行优化

    是! 链接时优化通常适用于"胖"目标文件中存在的中间表示(IR),其可以包含用于传统链接的机器代码和用于LTO链接的IR. 在这个阶段,没有更高级的语言结构,因此链接时优化与语言无 ...

  4. LLVM Clang前端编译与调试

    LLVM Clang前端编译与调试 iOS 关于编译 o 一.Objective-C 编译过程 o 为什么需要重新编译? o 编译步骤 o 二.编译步骤的详细说明 o 1.预处理 o 2.编译 o 词 ...

  5. 在windows下使用llvm+clang

    clang是FreeBSD和Mac下C/C++语言的默认编译器.如果你在苹果下做过开发,那么应该对它很熟悉. 这套工具链有很多优点: 代码很新,架构优良. 错误信息更友好. 静态检查功能更强大. 版权 ...

  6. 编译器 LLVM Clang原理与实战 制作自己的编译器 source-to-source 源代码转换 编译遍 compile pass 代码插桩

    编译器 LLVM Clang原理与实战 参考1 clang LLVM CMU 教案 深入剖析-iOS-编译-Clang-LLVM LLVM_proj LLVM编程索引 llvm源码浏览带跳转 llvm ...

  7. iOS 查漏补缺 - LLVM Clang

    LLVM 是一个自由软件项目,它是一种编译器基础设施,以 C++ 写成,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端.它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期 ...

  8. 编译器 llvm clang 源码转换示例

    编译器 llvm clang 源码转换示例 从git获取llvm项目的源码方式: git clone https://github.com/llvm/llvm-project.git 下载源码后,进入 ...

  9. 扩展LLVM:添加指令、内部函数、类型等

    扩展LLVM:添加指令.内部函数.类型等 Introduction and Warning Adding a new intrinsic function Adding a new instructi ...

  10. 在Linux上编译LLVM/Clang 8.0.0等全部源代码

    2019独角兽企业重金招聘Python工程师标准>>> 本教程使用的操作系统是Ubuntu Linux 18.04.2 LTS版本,编译器是GCC 6.5.0(不用新版的原因是某些代 ...

最新文章

  1. redis实现对账(集合比较)功能
  2. 2、创建视图(CREATE VIEW)
  3. OGRE 1.7.2 [Cthugha] 编译配置全过程方法
  4. 分析IBASE save 白屏问题
  5. ASP.NET 2.0 的数据源、数据绑定控件概述与区别
  6. 【完整版-斯坦福-密码学】全13讲(流密码)【笔记】
  7. Python之网络爬虫(XML与HTML与JSON文件、urllib与request的用法)
  8. 6.5版本虚拟机的封装
  9. 今天又啃了一些數據類型的東西~漸漸地記起了一些東西。
  10. vs2013 命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”。是否缺少程序集引用?...
  11. android 自定义ratingbar 图片显示不全的解决方案
  12. 每次连接服务器都要source ~/.bashrc问题
  13. 阿里云产品经理吴华剑:SLS 的产品功能与发展历程
  14. JVM初识-JVM内存结构
  15. 服务器u盘pe制作,u盘winpe启动盘制作
  16. 超市仓库商品盘点作业流程,仓库如何进行盘点,仓库盘点流程?仓库盘点好方法?
  17. 照片换背景色(Photoshop工具)
  18. SAP中采购合同与采购计划协议关联性分析(续)
  19. uniapp 微信小程序分享给微信好友与分享到朋友圈功能
  20. 钛磨产品行业调研报告 - 市场现状分析与发展前景预测

热门文章

  1. 观察者模式Java内存管理进阶篇——如何避免内存泄漏
  2. android进阶(一)Activity加载模式
  3. BZOJ5222[Lydsy2017省队十连测] 怪题
  4. BZOJ2832[AHOI2012] 信号塔
  5. chrom浏览器配置,把跨域保护关闭
  6. linux重定向文件容加时间,linux – Shell重定向和文件I / O持续时间
  7. java中的冒泡排序和交换排序
  8. java构造器_Java入门第十三课:“如何使用构造器初始化对象?”
  9. php 5的手册,本手册中所涉及的 PHP 版本 - PHP 5 中文文档
  10. java -cp 配置文件目录_java – 使用可执行JAR时指定Log4j2配置文件