您的位置:首页 > 其它

llvm 学习笔记一 编译llvm

2013-11-02 17:09 316 查看
一 、 llvm构建(Linux ubuntu64 3.2.0-29-generic)
http://llvm.org/releases/download.html#3.3
从llvm 下载3.3版本, 下载clang、llvm、compiler-rt三部分。

 tar vxzf llvm-3.3.src.tar.gz 

 tar vxzf cfe-3.3.src.tar.gz 

 tar vxzf compiler-rt-3.3.src.tar.gz 

mv cfe-3.3.src llvm-3.3.src/tools/clang

mv compiler-rt-3.3.src llvm-3.3.src/projects/compiler-rt

mkdir build

cd build 

../llvm/configure 或者 cmake ../llvm 

make -j8

生成clang等在build/bin中。

参考文档 http://llvm.org/docs/GettingStarted.html

二、基本工具使用 (参考 http://llvm.org/docs/CommandGuide/index.html)

hello.c  

clang hello.c -o hello    //生成可执行文件hello

clang -O3 -emit-llvm hello.c -c -o hello.bc     //生成llvmir 的bc格式文件

clang -O3 -emit-llvm hello.c -S -o hello.ll      //生成llvmir的ll格式

llvm-dis < hello.bc |less    //bc格式转换成ll格式显示

lli hello.bc   //JIT运行

llc hello.bc -o hello.s   //生成.s文件

clang 前端命令。

clang -cc1 -help      //获取cc1的命令选项列表

clang -cc1 -ast-dump hello.c      //dump AST

#include <stdio.h>

int main()

{
printf("hello world.\n");

    return 0;

}

TranslationUnitDecl 0x6f15720 <<invalid sloc>>

|-TypedefDecl 0x6f15c00 <<invalid sloc>> __int128_t '__int128'

|-TypedefDecl 0x6f15c60 <<invalid sloc>> __uint128_t 'unsigned __int128'

|-TypedefDecl 0x6f15fb0 <<invalid sloc>> __builtin_va_list '__va_list_tag [1]'

|-FunctionDecl 0x6f16050 <hello.c:3:1, line:7:1> main 'int ()'

| `-CompoundStmt 0x6f42b40 <line:4:1, line:7:1>

|   |-CallExpr 0x6f16390 <line:5:2, col:25> 'int'

|   | |-ImplicitCastExpr 0x6f16378 <col:2> 'int (*)(const char *, ...)' <FunctionToPointerDecay>

|   | | `-DeclRefExpr 0x6f162b8 <col:2> 'int (const char *, ...)' Function 0x6f16160 'printf' 'int (const char *, ...)'

|   | `-ImplicitCastExpr 0x6f16400 <col:9> 'const char *' <BitCast>

|   |   `-ImplicitCastExpr 0x6f163e8 <col:9> 'char *' <ArrayToPointerDecay>

|   |     `-StringLiteral 0x6f16318 <col:9> 'char [14]' lvalue "hello world.\n"

|   `-ReturnStmt 0x6f42b20 <line:6:5, col:12>

|     `-IntegerLiteral 0x6f16418 <col:12> 'int' 0

`-FunctionDecl 0x6f16160 <line:5:2> printf 'int (const char *, ...)' extern

  |-ParmVarDecl 0x6f16200 <<invalid sloc>> 'const char *'

  `-FormatAttr 0x6f16260 <col:2> "printf" 1 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  llvm