LLVM的最新版本已经更新到了13.0.0版本,而我在之前的博客中给出的还是4.0版本的安装教程(https://www.cnblogs.com/jourluohua/p/9554995.html),两边的代码结构没有大的变化,但是API和调用接口等已经变化非常迅速。现在就最新的llvm源码安装进行说明。
大概分为以下的几个步骤:
- 1. 依赖库的安装
- 2. 相关文件下载
- 3. 编译&安装
- 4. 测试安装是否完成
- 依赖库的安装。(老生常谈,现实是,我也不知道需要什么安装依赖库,用的系统是Linux version 4.9.0-39-custom (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2) )),只有cmake遇到了版本过低的问题,我们这里不使用sudo权限,仅安装在自己目录下进行使用。
wget https://cmake.org/files/v3.18/cmake-3.18.2.tar.gz tar -xzvf cmake-3.18.2.tar.gz cd cmake-3.18.2 ./bootstrap --prefix=/$dir_you_want_install make make install
并且在.bashrc进行对应的修改
export PATH=/mnt/ssd/wenze.lwz/local/bin:$PATH
2. 下载相关的文件
一般来说,有git方式,或者源码下载方式两种,我这里采用的是源码下载方式
https://github.com/llvm/llvm-project/archive/main.zip unzip llvm-project-main.zip
3. 添加编译脚本
为了节省输入的工作量,这里直接将相关的编译命令写成了build.sh,内容如下:
1 #! /bin/bash 2 BASEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" 3 ENABLE_LLVM_TARGETS="X86;NVPTX" 4 5 if [ ! -z "$1" ] 6 then 7 if [ $1 == clean ] 8 then 9 echo remove build folder... 10 rm -rf build 11 exit 0 12 else 13 if [ $1 == rebuild ] 14 then 15 rm -rf build 16 elif [ $1 == quicktest ] 17 then 18 ENABLE_LLVM_TARGETS="X86;NVPTX" 19 fi 20 fi 21 fi 22 if [ -d $BASEDIR/build ] 23 then 24 rm -rf build && mkdir build && cd build 25 cmake ../llvm -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_TARGETS_TO_BUILD=${ENABLE_LLVM_TARGETS} 26 -DLLVM_BUILD_TOOLS=true -DLLVM_INCLUDE_UTILS=true -DCMAKE_BUILD_TYPE=Release 27 -DLLVM_ENABLE_RTTI=true -DLLVM_TOOL_LLVM_OPT_FUZZER_BUILD=On 28 29 && make -j32 30 if [ $? -ne 0 ];then 31 echo "FAIL!" 32 exit 1 33 else 34 echo "SUCCESS!" 35 fi 36 fi
配置bashrc
export LLVM_HOME=$where_your_llvm_dir/llvm-project-main/build/bin
export PATH=$LLVM_HOME:$PATH
4. 测试
使用clang –version 如果能得到正确结果,并且llvm-dis能得到正确结果,代表此处安装正确
为了增加对Clang的AST的熟悉程度,想作为一个AST实现的源源变化的系列教程:
- Clang AST介绍 https://www.cnblogs.com/jourluohua/p/14524955.html
- Clang教程之实现源源变化 https://www.cnblogs.com/jourluohua/p/14514274.html
- Clang教程之实现源源变化(2) https://www.cnblogs.com/jourluohua/p/14517145.html
- Clang教程之实现源源变化(3) https://www.cnblogs.com/jourluohua/p/14520336.html
- Clang教程之实现源源变化(4) https://www.cnblogs.com/jourluohua/p/14525428.html