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

0 0
原创粉丝点击