LLVM 入门简单教程
LLVM 是一种应用广泛的开源编译器架构,该架构采用模块化设计,能够轻松地新增对编程语言和处理器架构的支持。 LLVM 支持各种各样的编程语言和前端,其中包括 C/C++、Objective-C、Fortran、Ada、Haskell、Java bytecode、Python、Ruby、ActionScript、GLSL 以及 Rust。 LLVM 是 Illinois 大学发起的一个开源项目,它到底是什么呢?从字面上看,它是一个虚机系统,然而这又和之前为大家所熟知的 JVM 以及 .net Runtime 这样的虚机不同,它提供了一套中立的中间代码和编译基础设施,并围绕这些设施提供了一套全新的编译策略(使得优化能够在编译、连接、运行环境执行过程中,以及安装之后以有效的方式进行)和其他一些非常有意思的功能。
1,下载相关源码包:
wget -c http://llvm.org/releases/2.7/llvm-2.7.tgz
wget -c http://llvm.org/releases/2.7/clang-2.7.tgz
wget -c http://llvm.org/releases/2.7/llvm-gcc-4.2-2.7.source.tgz
wget -c http://llvm.org/releases/2.7/llvm-test-2.7.tgz
llvm-2.7.tgz是LLVM的主要源码包
clang-2.7.tgz:Clang前端
llvm-gcc-4.2-2.7.source.tgz:GCC4.2前端,llvm-test-2.7.tgz:LLVM 测试验证包。
2,接下来就是解压源码:
解压缩LLVM-2.7源码
tar xzf llvm-2.7.tgz
解压缩Clang源码到llvm27/tools/clang/下 (PS:按照指定的目录执行)
tar xzf llvm-tar/clang-2.7.tgz
cp -r clang-2.7 llvm-2.7/tools/clang
3,标准步骤,configure,make,make install
mkdir llvm-build
cd llvm-build
../llvm-2.7/configure --prefix=/home/lingcc --disable-optimize
make
make install
4.testsuite要特殊对待。
解压缩llvm-test-2.7.tgz到llvm-2.7/projects/test-suite/下
tar xzf llvm-tar/llvm-test-2.7.tgz
cp -r llvm-test-2.7 llvm-2.7/projects/test-suite
cd llvm-build
../llvm-2.7/configure --prefix=/home/lingcc --disable-optimize
cd llvm-build/projects/test-suite/
gmake
日后的改动,都可以在llvm-build/projects/test-suite/验证正确性。
5.做个实验!helloworld
新建一个hello.c文件:
#include
int main()
{
printf("hello,LLVM\n");
return 0;
}
直接生成可执行文件:
clang hello.c -o hello -v
使用-v选项能看到,clang负责生成了汇编文件.s,然后/usr/bin/gcc负责将汇编文件转为.o文件,进而生成hello可执行文件。
生成LLVM中间表示文件.bc:
clang hello.c -c -o hello.bc -emit-llvm -v
用LLVM虚拟机执行
lli hello.bc
看看输出结果是不是一致。。。
转换为可读模式的LLVM中间表示:
llvm-dis < hello.bc
将LLVM中间表示转换为汇编语言文件:
llc hello.bc -o hello.s
汇编文件就可以直接使用GCC转换为可执行文件了
gcc hello.s -o hello.native
执行一下:
./hello.native
显示结果。。。