LoginSignup
1
0

More than 3 years have passed since last update.

Clang を弄るための準備

Last updated at Posted at 2021-03-20

Clang で AST を弄りたくて

Clang で AST(抽象構文木)をイジるために色々いじってみました。

そのための下地づくりをしたいと思います。

Clang の力を借りて何かしたいときはここから始めないといけない…。みたい。

まずは、llvmプロジェクトのリポジトリをクローンします。

$ git clone https://github.com/llvm/llvm-project.git

かなーり時間がかかりますがしかたありません。

で、Cmake をつかってビルド&インストールをするのですが、私の環境ではNinjaを使うよりもGNU Make を使うほうがはるかに早いので以下を実行しました。

どれだけ違うかというと

ninja :165m
gmake :58m

次に、付け加えたいプロジェクトを llvm-project/clang-tools-extra のディレクトリに追加します。

$ mkdir -p ${llvm-project のディレクトリ}/clang-tools-extra/ディレクトリ名
$ vim ${llvm-project のディレクトリ}/clang-tools-extra/ディレクトリ名/ソースコード.cpp

でもって、次にこれをビルドできるようにします。

$ echo 'add_subdirectory(プロジェクト名:つまりディレクトリ名)' >> clang-tools-extra/CMakeLists.txt
$ vim clang-tools-extra/ディレクトリ名/CMakeLists.txt

以下の設定をCmakeLists.txtに書きます。

CMakeLists.txt
set(LLVM_LINK_COMPONENTS support)

add_clang_executable(プロジェクト名
  ソースコード.cpp
  )
target_link_libraries(プロジェクト名
  PRIVATE
  clangTooling
  clangBasic
  clangASTMatchers
  )

あとはソースコード.cppを畫いて、ビルドしなおします。[2]のソースコードを参考に書いてみてください。

これを含んだパッケージをビルドしてみます。

$ mkdir llvm-project-build
$ cmake3 ${llvm-project のディレクトリ} -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra"  -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++  

で、ふつーにビルド&インストールします。

$ make -j6 <-環境に合わせてください。
$ sudo make install

これで、ビルドがうまくいったら実行できるはずです。

$ ./bin/プロジェクト名 解析したいプログラム名 --

何もなければ何も起こらないのでこれでOKです。

…のはず。

これで、あとはいじっているソースコードを変更するたびに

$ make プロジェクト名

をすれば勝手にビルドしてくれます。

参考URL:
[1] https://llvm.org/docs/GettingStarted.html
[2] https://clang.llvm.org/docs/LibASTMatchersTutorial.html

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0