V8エンジンをビルドしてみる

Google chromeに搭載されているJavascriptエンジン V8。一応、世間では速いと評価されているので、ソースをダウンロードして、ビルドしてみることに。しかし、これがはまる、はまる・・・
Visual Stadio 2005以上でビルド可能ってことなので、VS2005Proでビルドすることに。ダウンロードした一式のREADME.txtに(私の苦手な)英語で、python2.4以上が必要って書いてあるので、pythonをいれる。そして、sconsをいれることに。pythonは知っていたが、sconsって何??全然業界のスタンダードについていけていません--;
いざビルド。するとv8のビルドのときに、natives.ccってファイルが大量にエラーを放出。内容をみてみると、変数名に..\..\src\xxxみたいな感じの変数名がついている。C++はあまり(ていうか、全然)詳しくないけど、おそらく、こんな変数名つけれないだろう。このnatives.ccはpythonで出力しているみたいなんだが、、、とりあえず、この変数名を参照しているところは、このファイルだけっぽいので、..\..\src\xxxをsrc_xxxみたいな変数名に置き換えて逃げてみる。するとそこは通ったのだが、今度は、v8_mksnapshotのビルドで失敗。。う〜ん、先は長い。しかも

LIBCMTD.lib(stdexcpt.obj) : error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" 
(??1exception@std@@UAE@XZ) はmksnapshotですでに定義されています

みたいなエラー(><)。こまったちゃん。webで調べると、google codeのページがヒットする。なんだ、本家じゃん^^。おなじ現象でこまった人がissueにあげていたのだが、どうやら、これはVS2005の問題で、VS80sp1-KB926601-X86-ENU.exeというパッチを当てないといけないらしい。そんなんREADMEに書いておいてよ・・・
これで、ようやくだましているところはあるものの、mksnapshotはビルドできたもののの、やはり、native.ccを勝手に修正しているので、実行時に落ちる。いよいよこまったのだが、そういえば、scons。これが気になり、これ、どこかで実行しろって書いてあったようななかったような・・・って思っていたら、"Building on Windows"ここにすべて書かれているじゃん。sconsを実行しておけば、natives.ccの問題もなんなく、クリア。
失敗時のポイントをまとめておくと

  • VS2005はアップデートしておくべき
  • python2.4以上が必要
  • sconsを入れておく必要がある
  • ビルド実行前にsconsを実行しておく必要がある