LLVM(一):简单介绍

本人对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的后端结构吧大笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值