Open2
Reposoup: プロジェクトリサーチツールの整理

ゴールデンウイークいっぱいを掛けてリサーチツールの整理をすることにした。Reposoupのリサーチツールは:
- 各ソースコードのプロジェクト(= Git submodule)へのアサイン
- コマンドラインの収集とCコンパイラに渡されるオプションの解析
- 成果物とソースコードの対応
を調査する。で、調査手法がいままではビルドトレースしか無かったが、Visual StudioのbinlogやCMake file APIを追加しようとしている。
調査したデータはclangdの抽象化や静的解析の追加に使用する。

CMakeプロジェクトの解析準備
今回はlibpeerを試してみる https://github.com/sepfy/libpeer 。
クエリの実施
クエリファイルはとりあえずWarpの https://github.com/okuoku/warpsdk/blob/f621682ef900b78291cf906c6e2340992dc31eb7/query.json を流用する。
$ mv query.json .cmake/api/v1/query/client-reposoup/
クエリがsubprojectに浸透しない問題
うーむ... 2passでやるしかない。。?3.xの最終版である 3.31 では CMAKE_CONFIG_DIR
https://cmake.org/cmake/help/latest/envvar/CMAKE_CONFIG_DIR.html があるので強制的にクエリをinjectするのは簡単にできる。
とりあえず手動で配置:
$ mkdir -p cjson-prefix/src/cjson-build/.cmake/api/v1/query/client-reposoup/
$ cp .cmake/api/v1/query/client-reposoup/query.json cjson-prefix/src/cjson-build/.cmake/api/v1/query/client-reposoup/
これで ninja -t clean
して再度ビルドするとconfigureが再度走り、クエリが実施された。つまり、
- 一旦普通にビルドする
-
CMakeCache.txt
の場所を記録する - ビルドツリーを一旦消す
- 記録した
CMakeCache.txt
のある各ディレクトリにクエリを配置する - 再度ビルドする
- 生成されたクエリを回収
というプロセスが必要になる。 CMAKE_CONFIG_DIR
は地味に偉大なんだな。。とりあえず簡単なツールを書いた:
あと、 今回は一旦ヒューリスティック無しで挑戦する。ninja -t compdb
してビルドファイルをjsonに変換する必要もある。