比起从 0 构建 Clang 前端更应该叫如何重装 LLVM …… 🤡 少说也从头重装过五六次了。
操作系统:Ubuntu 18.04
配置 C++ 环境和必要工具
根据 LLVM 官网指引 Getting Started with the LLVM System ,截至 23/8/19 时对软件环境的要求如下(一般来说安装当时最新版应该没问题):
安装 GCC、G++ 和必要的库
1 | sudo apt-get install gcc |
从源码构建 CMake
- 从 CMake 官网 https://cmake.org/download/ 下载最新的 CMake 源码包
- 解压源码包后进入该文件夹目录,在该目录下开启终端,运行以下代码
1 | ./bootstrap |
从源码构建 Zlib
- 从 Zlib 官网 http://www.zlib.net/ 下载最新的 Zlib 源码包
- 解压源码包后进入该文件夹目录,在该目录下开启终端,运行以下代码
1 | ./configure |
其他
- 安装 python(
sudo apt get install python3 python3-pip
) - 安装 GNU Make(先使用
make -v
查看本地有没有 make,若没有,运行sudo apt-get install make
即可) - 安装 Git(运行
sudo apt install git
即可)
编译安装 Clang-LLVM
大体按照官网指引即可,但官网部分指令运行后会出错,需要修改。下面的是可以正确运行的版本。
1 | mkdir ~/clang-llvm |
ninja 构建过程中可能遇到编译中止问题,一般是虚拟机内存不足导致的,解决方案见 https://blog.csdn.net/weixin_44796670/article/details/121234446 。或者一开始构建虚拟机的时候就把内存给大点 / 手动扩展虚拟机内存也能解决问题(虽然也经历过手动扩容两三次都不够用的情况 …… )。
扩展虚拟机内存后如果无法启动虚拟机(表现为开机黑屏),解决方案见 Ubuntu20.04虚拟机扩展磁盘后系统无法启动 - 黑夫和惊 - 博客园 (cnblogs.com) 。
由于 LLVM 项目的编译流程非常非常吃内存,ninja 构建阶段结束之后最好及时删除 swap 分区,上面的博客里也介绍了方法。很多时候 LLVM 构建过程中出现的问题都是内存的问题 🤡
有两行用于测试的代码,其实我运行的时候并没有通过所有的测试(LLVM 测试失败了 4 个,Clang 测试成功通过),但似乎并不影响后面的使用,在论坛询问后也没有很好的预后方案。
1 | # LLVM TEST |
完成以上工作后,在终端运行 cmake-gui ../llvm-project/llvm
,如果想要将 clang 作为默认编译器的话,将 CMAKE_CXX_COMPILER 的值设置为 clang++ 的安装路径(也可以不改,直接用 gcc 编译器),但最重要的是要将 CMAKE_BUILD_TYPE 的值设置为 Release。填写完后,依次点击 Configure 和 Generate。待 Generate 成功结束后,回到终端,在 build 目录下最后运行一次 ninja
。
编译 Clang 库编写的解析工具
这一步需要将写好的 Clang 工具文件夹(包括 cpp 文件和 CMakeLists,如官网上的例子 /loop-convert )复制一份到 ~/clang-llvm/llvm-project/clang-tools-extra 路径下,对工具进行安装。具体步骤:
- 编辑 ~/clang-llvm/llvm-project/clang-tools-extra/CMakeLists.txt ,加入一行
add_subdirectory(loop-convert)
- 回到 ~/clang-llvm/build 目录下,再次运行
ninja
工具安装结束后可以通过 ~/clang-llvm/build/bin/loop-convert
调用工具。