初识LLVM

llvm的官网:https://llvm.org/

下面展示下用Ubuntu20.04来编译llvm9.0.1

源码编译

  1. 准备编译环境
1
2
sudo apt update
sudo apt install gcc g++ cmake ninja-build
  1. 下载llvm源码

https://github.com/llvm/llvm-project

1
2
3
4
5
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-9.0.1/llvm-project-9.0.1.tar.xz
//将.xz解压为.tar
xz -dk llvm-project-9.0.1.tar.xz
//将.tar解压为普通文件
tar -xvf llvm-project-9.0.1.tar
  1. 开始编译

https://llvm.org/docs/GettingStarted.html

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
//Debug
cd llvm-project-9.0.1
mkdir build_debug
cd build_debug
cmake -DLLVM_ENABLE_PROJECTS="clang" ../llvm
make


//Release版
cd llvm-project-9.0.1
mkdir build_release
cd build_release/

cmake -G Ninja -DCMAKE_BUILD_TYPE=RELEASE -DLLVM_ENABLE_PROJECTS="clang" ../llvm
ninja -j8

-G Ninja: 表示生成Ninja系统的构建文件,可选的构建系统有Ninja、Unix Makefiles、Visual Studio、Xcode

-DCMAKE_BUILD_TYPE=RELEASE: 表示生成Release版本的LLVM,此值默认是Debug

-DLLVM_TARGETS_TO_BUILD=“X86”: 表示编译的目标平台是X86平台,可选的目标机器有AArch64、AMDGPU、ARM、BPF、Hexagon、Lanai、Mips、MSP430、NVPTX、PowerPC、RISCV、Sparc、SystemZ、WebAssembly、X86、XCore

-DLLVM_ENABLE_PROJECTS=“clang”: 表示我们除了编译LLVM以外,还要编译clang.如果还需要编译其他工具,则在后面添加,并用分号分割.比如,要编译clang和lldb,则需要设置为-DLLVM_ENABLE_PROJECTS=“clang;lldb”

-DLLVM_OPTIMIZED_TABLEGEN=ON: 仅对Debug模式有效,开启此选项可提高编译速度

Clion编译

  1. 用Clion打开llvm的CMakeLists.txt文件

Clion打开

  1. 配置Release选项

配置Release选项

1
-G Ninja -DLLVM_ENABLE_PROJECTS="clang"
  1. 在上述的debug或者release目录下执行下述命令,即可开始编译.
1
ninja -j8

常用工具

名称 功能 输入文件后缀 输出文件后缀 参数
clang C编译器 .c .ll -emit-llvm -S
clang++ C++编译器 .cpp .ll -emit-llvm -S
llvm-as llvm汇编 .ll .bc
llvm-dis llvm反汇编 .bc .ll
lli llvm解释器 .ll
llc llvm后端编译器 .ll .s
opt 优化器 .bc/.ll .bc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
//常用指令如下
//.c -> .ll
clang -emit-llvm -S luoTst.c -o luoTst.ll
//.c -> .bc
clang -emit-llvm -c luoTst.c -o luoTst.bc
//.ll -> .bc
llvm-as luoTst.ll -o luoTst.bc
//.bc -> .ll
llvm-dis luoTst.bc -o luoTst.ll
//执行ll
lli luoTst.ll
//.bc -> .s
llc luoTst.bc -o luoTst.s

相关内容

0%