LLVM(一):简单介绍
来源:互联网 发布:网络系统工程师考试 编辑:程序博客网 时间:2024/06/08 03:06
本人对LLVM的学习主要在2013年,到现在已经有很长的时间没有接触了。俗话说的好:温故而知新,可以为师矣。llvm有很多值得学习的地方。
LLVM和GCC的主要架构区别在于它采用了自己的中间代码形式,也就是llvm bitcode。前后端分离,启到的跨平台的作用,比如在android中的RSscript就是通过llvm前端clang类似的slang转换为llvm bitcode,存在于apk文件中。安装后通过libbcc后端jit执行的。当然编译时间、代码密度、性能都有不同,这个就看个人喜好了。目前llvm的最新版本为3.4,可以在官网http://llvm.org/releases/download.html#3.4下载源码。
首先下载llvm source code、clang sourcecode、compiler rt source code。网上build教程非常多,简单说一下:解压3个包,并把clang-3.4文件夹重命名为clang,放到llvm-3.4/tools/下。吧compiler-rt-3.4文件夹重命名为compiler-rt并放到llvm-3.4/projects/下。新建并进入build目录,执行llvm-3.4目录下的configure --help可看到很多build选项。按个人喜好添加,configure完成打开Makefile.config文件,修改ENABLE_OPTIMIZED=0,方便以后调试。
在build目录下执行make,等编译结束,Debug+Asserts/bin/目录下为llvm工具的可执行文件。将这个目录加入到环境变量。然后尝试下用llvm编译C文件。
Clang –emit-llvm –S test.c –O2
生成llvm中间表达式的汇编文件test.s,clang为llvm的前端,参数基本和gcc是兼容的
llc test.s
生成目标机器的汇编文件test.s.s,默认target为x86。--help可以看到很多参数,例如加上—mcpu=arm就可以生成arm的汇编文件,例如加上—filetype=obj就是生成目标文件。这里和gcc有些区别,gcc是必须经过汇编这个步骤的,而llvm可以直接通过MC层生成object文件。
纯手打原创,文笔烂技术菜请包涵,有笔误和认识错误希望各位指出,准备下一篇写下llvm的后端结构吧。
- LLVM(一):简单介绍
- LLVM教程(一)-- LLVM的简介
- LLVM 介绍
- 编写LLVM的后端(一)
- LLVM 源码分析 (一) pass 类
- LLVM IR 语法简介(一)
- CRM简单介绍(一)
- Git简单介绍(一)
- Git简单介绍(一)
- ZooKeeper简单介绍(一)
- Webservice简单介绍(一)
- 简单介绍Fiddler(一)
- OkHttp3 简单介绍(一)
- avtiviti5.20简单介绍(一) -- 介绍
- LLVM安装使用介绍
- LLVM 与 Clang 介绍
- LLVM 与 Clang 介绍
- LLVM 与 Clang 介绍
- 13章 运算符重载
- IRP_MN_START_DEVICE分发例程中的前进和等待IRP总结
- 3D拓扑自动布局之Web Workers篇
- 【json】json_encode() 函数介绍
- 在VC++程序中调用DOS命令例子
- LLVM(一):简单介绍
- USACO 1.3 Barn Repair (barn1)
- 编程珠玑--位图在排序中的使用
- three.js学习点滴(1) — 创建场景
- VS2008反汇编小解(转)
- Android之drawable state各个属性详解
- USACO 1.3 Calf Flac (calfflac)
- 判断一个单链表是否有环及环的链接点(转)
- c#中属性和字段的区别?