不得不写一个系列,因为手中的工作要围绕着LLVM展开。具体介绍可以去官网查看。我之前有过一点点接触,但是放弃了。这次重新拾起,写这个系列,是一个总结,也是激励自己一直学下去。先定个小目标,给已有的指令集增加一条指令(比如arm,arm64,x86什么的)!!
首先是安装llvm,我使用的是ubuntu,所以选择命令行下载,当然也可以在官网下载。
命令行下载主体:
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
在tools文件夹中下载clang
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
其余的选择性下载,我觉得后续要用了再下就行
安装(建议在前面加上sudo)
mkdir build
cmake -G "Unix Makefiles" -DLLVM_ENABLE_ASSERTIONS=On -DCMAKE_BUILD_TYPE=Release ../llvm
make
make install
这就完成了下载和安装。
下面列一些常用命令
clang -emit-llvm -c hello.c -o hello.bc
lli hello.bc
llvm-dis hello.bc
llc hello.bc -o hello.s
我们主要看的就是llvm IR,也就是.ll文件
补充一下交叉编译的指令,使用clang时可以使用--target、--mcpu等参数
clang --target=arm-linux-gnueabihf test.c -o test
clang --target=armv7a-linux-gnueabihf -mcpu=cortex-a15 test.c -o test
targer选择使用什么编译,而mcpu是为什么cpu进行编译