llvm 实现一门语言_llvm之旅第一站 - 编译及简单使用

llvm介绍

llvm(low level virtual machine)是一个开源编译器框架,最早的时候是Illinois的一个研究项目,主要负责人是Chris Lattner,他现在就职于Apple. Apple 目前也是llvm项目的主要赞助者之一。

llvm有一个表达形式很好的IR语言,高度模块化的结构,因此它可以作为多种语言的后端,提供与编程语言无关的优化和针对多种CPU的代码生成功能。

传统编译器分三个阶段:

bbef34fd182cf0a70ab83e090ab68577.png

llvm也分三个阶段,但是设计上略微的有些区别:

638761abbf87d75515000bf5fe428cbe.png

不同的前端后端使用统一的 LLVM IR ,如果需要支持新的编程语言或者新的设备平台,只需要开发对应的前端和后端即可。同时基于 LLVM IR 我们可以很快的开发自己的编程语言。

目前llvm有很多的子项目,针对不同的需求进行了深入的扩展,具体参考llvm官方首页。

其中的Clang子项目实现了支持C/C++/Objective-C的优秀编译器前端,官方数据表明,在某些编译环境下,其编译速度要比gcc快三倍。

llvm下载及编译

后续的系列文章我们都将以Clang作为前端,Mac系统上进行开发。(Linux 及Window系统上的下载及编译过程与此相同)

1. 迁出LLVM

$ cd where-you-want-llvm-to-live

$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

d8a747a2c43d31c6111450296e4cdceb.png

2. 迁出Clang

$ cd where-you-want-llvm-to-live

$ cd llvm/tools

$ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang

9eec8f86b55316d52c9e5f8b91b3f9de.png

3. 迁出编译运行库

$ cd where-you-want-llvm-to-live

$ cd llvm/projects

$ svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt

29e3acb7ee404bf51241ecbc1fd98ace.png

4.编译源码 (Release)

$ mkdir build

$ cd build

$ cmake -DCMAKE_BUILD_TYPE:String=Release ../llvm/

60a0ba0afd65d029b284eb433d64b0e1.png
1d6bc0045272490d9c4c8a6fc23bbb08.png

也可以:

$ cd llvm

$ ./configure

$ make

推荐使用cmake编译。

build目录下存放着编译后的文件:

8192d5cc711ec25dfb5338f5eb447f0e.png

bin中存放着完整的工具链:

2a75f8ea6842898c73390432fe5bf666.png

更详细的编译选项参考 Getting Started with the LLVM System

编译链中工具的具体说明参考 LLVM Command Guide

工具链使用

编译完成后,build/bin目录下存放了完整的编译工具链,使用这些工具就可以完成源码的编译。

创建简单的c语言源码文件test.c

#include

int main() {

printf("hello llvm");

return 0;

}

编译可执行文件

./clang test.c -o test

生成LLVM 字节码文件

./clang -O3 -emit-llvm test.c -c -o test.bc

生成LLVM 可视化字节码文件

./clang -O3 -emit-llvm test.c -S -o test.ll

运行可执行文件

./test

运行字节码文件

./lli test.bc

反汇编字节码文件

./llvm-dis < test.bc | less

编译字节码为汇编文件

./llc test.bc -o test.s

参考文献:

Getting Started with the LLVM Systemhttp://llvm.org/docs/GettingStarted.html

LLVM 官网http://llvm.org

Clang 官网 - http://clang.llvm.org

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值