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
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
相关文章推荐
- (转)Android开发学习笔记(二)——编译和运行原理(1)
- 马哥学习笔记六——编译安装LAMP只httpd
- make编译安装_学习笔记
- jade 学习笔记 - gulp 自动编译
- LLVM学习笔记——目录
- GCC/G++学习笔记 - 1 - 执行预编译
- Thrift 学习笔记1——Ubuntu环境下Thrift的安装、编译以及测试
- 韦东山“第09课第1节 u-boot分析之编译体验“之学习笔记
- effective C ++ 学习笔记之 item 31 将文件间的编译依赖关系降至最低(未完成)
- 【C++ 学习笔记】防止头文件二次编译总结
- 包含编译模型(学习笔记,其他地方参考)
- 【Qt学习笔记】在Qt编译好之后运行程序时提示:程序异常结束。The process was ended forcefully. ....exe crashed.
- RPG学习笔记四(编译程序时的出错信息查看)
- 【学习笔记】编译原理-有限自己主动机
- jsp学习笔记_编译指令
- sqlite学习笔记1:编译数据库
- hive的学习笔记2-hive源码的编译
- 编译原理学习笔记
- Ubuntu学习笔记(1)---编译源码包
- LLVM学习笔记(24)