MN #63 Building PDFium

05:05 段々起きる時間が遅くなってる. 昨日は寝る前にちょっとコードをいじったら案の定寝付きが悪くなってこの有様. 寝る前に読める無難な紙の本を探そうかな...

今日は PDFium ビルドつづき

  • 自分で書いた Makefile と Ubuntu の Clang を使ってビルドしようとしているが, C++ stdlib のシンボルらしきものがみつからずリンクエラー... と思っていたがよくみると instantiate された std::vector がないのか。なんで?結局 libpdfium.a だけでではだめなのかな? basic_ostream とかもまじってるので結局はライブラリな気もするが...
  • __next_prime() とかはやはりランタイムの一部でヘッダで定義はされてないぽいのでライブラリが必要。これは Chrome が持っている Clang 系列の C++ ライブラリ。一方手元の clang は /usr/lib/x86_64-linux-gnu/libstdc++.so.6 を参照しており、これは GNU 由来っぽい。問題は2つあって
    • Clang 由来ではなく GNU 由来の C++ を使っている
    • そもそも Chromium はライブラリ含め自分でビルドした C++ ツールチェインをつかっている。
  • というわけでシステムのツールチェインではなく Chromium のもってるツールチェインを使わないとダメなのではなかろうか...まじで? それライブラリとして使えないじゃん・・・。しかし Ubuntu の Clang とはじっさいだいぶバージョンが乖離してるのでダメそうだな。

というわけで一定程度 Chromium の流儀でコードを書く必要があるのは受け入れねばならなげ。あるいは自分で Makefile や Bazel のビルド設定を書く、だけどそっちはより茨度高いからねえ。そもそも Android の Chrome は PDF 見れないので、いま Android+aarch64 向けにビルドできてるのも歴史的残滓の可能性がある。(AArch64 自体は Chromebook もあるからサポートするだろうけれど。) うーむ・・・。まあそれはいま気にしても仕方ない。

Cronet の BUILD.gn を見てみる。まあこういう感じでやるのだろうなあ。そしていよいよ Chromium のツリーがいるのでは・・・。あんなでかいもんチェックアウトしたくない・・・・。一方で Chromium のツールチェインにくっついている以上 v8 と違ってもはや単体での利用は非現実的なのだから Chromium のツリーに入れてしまえばいいのにと思ってしまう。Blink ですらマージしてるってのに。世の中にはこれをなんとかビルドして使ってる人がいるのかなあ。

あらためて DEPS を睨んでいて気づいたが、googlesource.com の git は何らかの頑張りにより git レポジトリのサブディレクトリを独立した git repo として clone できるっぽい・・・。なかなか狂ってるなあ・・・。こういうのを駆使すれば Chromium の必要なサブセットだけを持ってきて使うことができ、実際 PDFium はちょっとだけそういうことをしているわけだが・・・茨の道としか思えないのだった。しばらく見ない間にまただいぶ独自世界化が進んでいる Chrome の世界よ。

そして v8 を見ていて気づくこととしては別にこいつも out of box では単独ビルドできず Chromium のツールチェインを使うね。Node.js は、単に開発者ががんばって追従してるのだろうなあ・・・。

時間切れ。