HHVMのコンパイルエラー対策
スーパーロボット大戦Wiki等のMediaWikiを動かすためのHHVMを3.14.2に更新しようとしたときに、まずCMakeで失敗した。これはサブモジュールを再帰的にすべてダウンロードできていなかったためで、以下のコマンドを実行することで次に進めた。
# gitでcloneしたHHVMのディレクトリで rm -rf third-party git submodule update --init --recursive
しかし、その後makeするとコンパイルエラーが起きて止まってしまった。コンパイルに失敗するのは hphp/hack/src/server/serverError.ml で、探してみたところ以下のissueが見つかった。
新しいバージョンではだめなのかと3.14.1等バージョンを戻して試してみるもどうもうまくいかない。さらに探してみると、以下のissueが見つかり、そこに衝撃の事実が。
jwatzman commented on 31 Dec 2015
ocaml's build systems are terrible when it comes to incremental builds. Can you try
rm -rf hphp/hack/src/_build
and try again?「Error: Unbound value ServerMonitor.start_monitoring · Issue #6701 · facebook/hhvm」より
訳すと「OCamlのビルドシステムはインクリメンタルビルドになるとひどい。rm -rf hphp/hack/src/_build
をやってもう一度試してもらえる?」といったところか。こんな罠は知らなかった…
というわけで、上記のとおりにできたファイルを削除してもう一度ビルドをかけたらすんなり進んだ。しかし3コアのVPSではビルドにかなり時間がかかるようで、2時間弱も待つことに。