LLVM 入门简单教程

jopen 11年前

    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
 显示结果。。。