LLVM-Clang 二次开发--查找全局变量及其调用函数

前言

应这学期大作业要求,完成了基于Clang的二次开发,实现了基于Clang的LibTooling & 库,编写ASTMatcher来查找相应变量以及调用函数。

前期准备

项目初期,由于不清楚后续的工作,没有一个总览,导致走了许多弯路。比如使用 Svn 下载llvm & Clang 的源码,由于网络问题,我们发现下载得到的源码始终不完整;再比如通过 Visual Studio + CMake编译生成项目,生成时间长到难以忍受,等等。

在 Clang 官方文档 中对 “编写ASTMatcher” 的介绍中采用了一种新的构建工具 - ninja,经过查找相关资料,发现 ninja的build速度非常之快,且具有易用等特点,我们决定参考Clang官方文档推荐的方式,重新获取clang源码,改用 ninja重新构建 clang 工程。

下载Clang

弃用 Svn,直接从 GitHub 中抓取 Clang 的源码。

由于 Clang 是 LLVM 工程的一部分,我们首先需要下载 LLVM 的源码,之后再在指定位置下载 Clang 的源码。需要注意的是,虽然我们 git 的只是 LLVM 工程的镜像。

mkdir /opt/clang-llvm && cd /opt/clang-llvm
git clone http://llvm.org/git/llvm.git
cd llvm/tools
git clone http://llvm.org/git/clang.git
cd clang/tools
git clone http://llvm.org/git/clang-tools-extra.git extra

之后,我们需要下载 CMake 构建系统以及 Ninja 构建工具。虽然我们的环境中已经装有 CMake,但为了使二者兼容,我们需要检查当前环境下 CMake 的版本是否符合要求。

cd /opt/clang-llvm
git clone https://github.com/martine/ninja.git
cd ninja
git checkout release
python bootstrap.py //这里使用了.py文件安装ninja,意味着我们的环境中需要安装python
sudo cp ninja /usr/bin/ //这是linux下的指令,作用是将ninja 添加到环境变量,windows下只需要将 ninja 路径添加到环境变量中即可

cd /opt/clang-llvm
git clone git://cmake.org/stage/cmake.git
cd cmake
git checkout next
python bootstrap.py
make
sudo make install

这之后,我们就可以构建 Clang 工程了。

cd /opt/clang-llvm
mkdir build && cd build
cmake -G Ninja ../llvm -DLLVM_BUILD_TESTS=ON  // Enable tests; default is off.

ninja
ninja install

在执行 ninja 时,我们需要经历漫长的等待(视电脑配置,主要是硬盘的区别,可能在2~4小时),如果顺利的话,我们就成功构建好 Clang 了。需要说明的是,这种构建方式与 CMake 生成 Visual Studio 解决方案不同点在于,ninja 构建之后,会直接在build/bin 路径下生成若干 .exe文件,这意味着在重新编译之后我们可以直接使用这些 .exe 文件,是可以脱离Clang 工程的;而Visual Studio + CMake方式,必须在 Visual Studio解决方案中才可以运行。

当然,如果不幸在 ninja 指令过后报错,据目前发生过的问题来看,我们需要打开 CMake 的图形化界面,指令如下。

Cmake -gui

之后为工程指定 CMAKE_CXX_COMPILER & CMAKE_ASM_COMPILER 为 cl.exe(位于Visual Studio/VC/ 目录下,不同电脑可能有所差别ÿ

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值