ochalog

RubyとMediaWikiとIRCが好き。

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が見つかった。

Fixed Datetime comparison with milliseconds involved by wjzijderveld · Pull Request #6888 · facebook/hhvm

新しいバージョンではだめなのかと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時間弱も待つことに。