NM #20 - Bazel
05:08. 一日風邪で休んだ。まだ喉が痛いが、風邪の後の喉の不調はいつも一週間くらい続くのでやむなし。
今日は C++ 環境づくり。すなわち Bazel で C++ およびなんらかの依存 (libpng とか?) をビルドできるようにする。そして png でなんか保存できるとこまでいけばなおよし。
なぜ Bazel か、というと今更 CMake に限らず C++ のビルド環境づくりとかいまいちやる気が起きないため。
BUILD を色々試しているうちに終了・・・。
- third_party のコードを使うのは色々うんざりだが (Bazel に限った話ではなく C/C++ でなんかやる時の常として)、TensorFlow が山のように依存を持っているのでこいつらに使いたいものが含まれていればそれをコピーしてくればよい。というか何らかの Bazel-based なプロジェクトから必要な BUILD のを探してきて使うのがよい。自分でサードパーティ用に BUILD を書いてあげるのは茨すぎ。
- コピーして持ってくる際、External dependencies の名前 (@ で始まるやつら) は気分で変えないほうが良い。なぜなら依存したライブラリが Bazel を使っている時、その依存先の BUILD ファイルは名前空間を共有しており、特定の名前で external dependency を参照する場合があるからである。なんかすごい適当につけられたっぽい名前であっても(じっさい適当につけたと思われるが)グローバルな識別子のように振る舞う。たとえば Abseil が Googletest を参照したりする。そういう入れ子参照がどちらも Bazel を使うケースはレアな気もするけれど、一方でわざわざ地雷を仕込む必要もない。
- 一方で、色々うんざりとはいえ third_party ライブラリの使い方をビルドシステムとして既定しているのはよい気もする。他人の成果をコピペできるので。そういう意味で Bazel は third party 用の BUILD ファイルをホストすべきだな。DefinitelyTyped みたいなかんじで。
- それにしても色々 undocumented assumptions がある気がして、他人に進める気にはならないなあ・・・。会社の中ならコードサーチで見様見真似すればなんとなく問題を解決できるが、GitHub の世界ではそうもいかない。(GitHub が悪いという話ではなく Bazel のエコシステムがしょぼいため。) 真面目に C++ やりたい人はおとなしく CMake あたりを受け入れるのが良いのではないかね。外部ライブラリを使うコンベンションみたいのも決められてるっぽいし。
- CMake も Bazel もうんざりだけれど、それは CMake や Bazel のせいではなくC/C++ のせいなので文句はいうまいよ。