基本的搭建步骤如下:
1。从llvm.org里下载下来llvm 2.3的
2。从llvm.org里下载下来llvm-gcc 4.2的,在llvm的官方站点里也提供了
llvm-gcc 4.2在若干个平台上的binary版本,如果正好有自己平台相对应的binary文件,
就不需要下载llvm-gcc的源码进行手动编译安装的工作了
3。将llvm 2.3的源码包解压缩到指定目录,我是解压缩到
/mnt/work/personal/open-source/LLVM/source-code/llvm-2.3 目录下
然后
cd /mnt/work/personal/open-source/LLVM/source-code/llvm-2.3
./configure
make
make install
编译时间较长,在Ubuntu 8.04, T7250 Duo Core, 2G内存的本本上,大概花了半个
小时左右的时间。
4。将llvm-gcc 4.2的源码包解压缩到指定目录下,然后在跟该目录平级的地方创建一个
OBJ目录用来存放编译llvm-gcc生成的目标文件。
如,我将llvm-gcc4.2解压缩到 LLVM/llvm-gcc4.2-2.3.source/ 目录下,所以需要在
LLVM目录下再新建一个llvm-gcc-obj的目录,用于存放llvm-gcc编译过程中生成的目标
文件。(注:直接在 llvm-gcc4.2-2.3.source 目录下编译会报错)
cd llvm-gcc-obj/
../llvm-gcc4.2-2.3.source/configure --program-prefix=llvm-
--enable-llvm=/mnt/work/personal/open-source/LLVM/source-code/llvm-2.3
--enable-languages=c,c++
(其中program-prefix是用于确保编译生成的gcc工具的可执行文件名会有一个llvm-的前缀,而--enable-llvm则是指定步骤
3中编译llvm生成的目标文件的所在路径,确保llvm-gcc的编译过程中能够找到所需的llvm的目标文件)
make
make install
编译过程大概也花了有将近二十分钟。
5。确保llvm-gcc工具和llvm工具的可执行程序所在路径已经加到了PATH环境变量中
至此,llvm的实验环境已经搭建完毕。
现在我们可以使用刚刚搭建好的环境作一个小实验。
现在有如下内容的c++源文件test.cc:
#include
#include
using namespace std;
int main()
{
printf( "hello, the world\n" );
cout << "this from C++" << endl;
return 0;
}
实验步骤:
1。llvm-g++ test.cc -emit-llvm -c -o test.bc
调用llvm-g++的编译前端为test.cc生成相应的LLVM bit code 文件。
我们也可以在调用llvm-g++的过程中添加上一些额外的选项,如
llvm-g++ --verbose test.cc -emit-llvm -c -o test.bc
加上--verbose以确认llvm-g++前端在编译过程中使用的是正确的头文件
llvm-g++ -S test.cc --emit-llvm
加上 -S 选项,生成 LLVM的汇编格式文件。
2。基于步骤1生成的bit code文件,我们可以调用lli来对其解释执行
lli ./test.bc
3。基于步骤1生成的bit code文件,我们可以调用llvm-dis来进行反汇编
llvm-dis < test.bc
4。基于步骤1生成的bit code文件,我们还可以调用llc来为其生成本地的汇编
文件
llc test.bc -o test.s
5。最后我们可以调用本地g++编译器为test.s生成本地机器码并执行之。
g++ test.s -o test.native
./test.native
阅读(989) | 评论(0) | 转发(0) |