V8 JavaScript Engine を VS2010 でビルド(GYP版)

20120319a_v8engine01
V8 JavaScript Engineを使おうとVS2010でビルドし始めたら、
えらい迷ったのでビルドの仕方をメモしておきます。

V8 JavaScript Engineは2011年5月2日迄、
VS2005のソリューションファイルが付いていた様です。
しかしその日以降GYPと呼ばれるビルドシステムに移行した様で、
ソリューションファイルは提供されなくなっています。

GYP導入後に於けるVisualStudioに依るビルドですが、
まずGYPを使ってソリューションファイルを生成します。
そのソリューションファイルを使って、
VisualStudioでビルドする形になります。

ちなみにPythonやSConsは無くてもいけそうです。
正確にはPythonは使うっぽいですが、
別途古いバージョンをダウンロードして使う様なのでわざわざインストールする必要は無いです。
既にインストールしてある場合は、別途ダウンロードするのを端折ってもいけるかもしれませんが未確認です。
やってみて成功したら教えてくれると助かります。

別途Cygwinもダウンロードして使う様です。
Cygwinはインストールしてありますがパスを通していないし起動する必要も無かったので、
わざわざインストールしておく必要は無いのじゃないかなと思います。
逆に既にインストールしてあるからと、別途ダウンロードするのを端折ったら失敗しました。
お気を付け下さい。

では取り敢えず、下記環境揃えて下さい。
Microsoft Visual Studio 2010
Tortoise SVN

私の環境では既に入っていたので、ここら辺の導入方法は割愛します。
ちなみに私が使用したTortoise SVNのバージョンは1.6.10でした。
起動する度に“最新は1.7.6です”とアナウンスされたるので、かなり古いですね。

20120319b_v8engine02
ではまず、作業用のディレクトリ決めて下さい。
このメモでは下記のディレクトリで作業します。
D:\Space Ok

パスに空白が入っていても問題無いです。
この場所で作業した場合には最終的に下記にライブラリやら実行ファイルやらが出来ます。
D:\Space Ok\v8\build\Debug
D:\Space Ok\v8\build\Release

ビルド終わってから移動させたら良いだけなので、そこらへんは適当にどうぞ。

20120319c_v8engine03
ではまず本体であるV8 JavaScript Engineをチェックアウトします。

20120319d_v8engine04
リポジトリのURLはV8 JavaScript Engineの公式サイトの、
Sourceページに書いてあります。
下記ですね。
http://v8.googlecode.com/svn/trunk/

20120319e_v8engine05
最新のリビジョンを落としてきましたが、
この時のリビジョンは11074でした。

20120319f_v8engine06
作業用のディレクトリにv8フォルダが出来ます。

昔はv8\tools\visual_studioにソリューションファイルが直接有った様です。
今はREADME.txtだけが残っていて、
“GYPでソリューションファイル作ってね。”とあります。

README.txt内にhttp://code.google.com/p/v8/wiki/BuildingOnWindows
へのリンクが張ってありますが、これはSCons用です。
リンク先の2011年9月25日(Sep 25, 2011)のコメントにありますが、
SConsは既に非推奨に為っています。
ご丁寧に最新のGYPを使ったビルドのリンクを張ってくれています。
http://code.google.com/p/v8/wiki/BuildingWithGYP
そもそものREADME.txtを直してくれると嬉しいんですけどね。

GYP使ったビルドのREADME.txtはv8\buildの中です。

ではGYP関連をチェックアウトしていきます。
Visual Studioにてビルドする場合、GYPの他に2つ必要で合計3つチェックアウトします。
本当は色々とディレクトリの指定があるのですが、
v8のと衝突して面倒なので一旦作業ディレクトリ直下にチェックアウトします。

20120319g_v8engine07
まず、GYP本体。
http://gyp.googlecode.com/svn/trunk/

20120319h_v8engine08
この時のリビジョンは1250でした。

20120319i_v8engine09
次にchromiumリポジトリにて管理されているcygwinのリビジョン66844。
http://src.chromium.org/svn/trunk/deps/third_party/cygwin/
私が落としてきた時は最新が66844でしたが、
一応ドキュメントに明示されているのでチェックアウト時も明示しておきます。

20120319j_v8engine10
と言う事で、リビジョン66844。

20120319k_v8engine11
最後にchromiumリポジトリにて管理されているpythonのリビジョン89111。
http://src.chromium.org/svn/trunk/tools/third_party/python_26/

20120319l_v8engine12
リビジョン89111。

20120319m_v8engine13
作業用のディレクトリにgyp・cygwin・python_26フォルダが出来ます。

20120319n_v8engine14
gypフォルダをv8\buildの中に移動させます。

20120319o_v8engine15
cygwin・python_26フォルダは少しややこしくて、
まずv8の中にthird_partyフォルダを作ります。
そしてその中に2つを移動させます。

ファイル類の準備は完了です。
ではGYPを使ってソリューションファイルを作ります。

20120319p_v8engine16
まず、コマンドプロンプトを起動します。
スタートボタン→全てのプログラム→アクセサリの中に有ります。

20120319q_v8engine17
起動しました。

20120319r_v8engine18
下記の様に打ち込んで、作業用のディレクトリのv8フォルダに移動します。
cd /d "<v8フォルダ>"

20120319s_v8engine19
移動したら、下記を打ち込みます。
third_party\python_26\python build\gyp_v8

私の環境では1秒ぐらいで終わりました。
警告が1つ出てますが、詳しく調べてないので取り敢えず放置です。

20120319t_v8engine20
これでソリューションファイルがv8\buildの中に出来てます。

ですがこのソリューションファイルはVS2005用です。
意気揚々と起動させたらVS2005が立ち上がって悲しかったです、はい…。

と言う事でVS2010立ち上げて、
ファイル→開く→プロジェクト/ソリューションと進み、
先程のVS2005用ソリューションファイルを開きます。

20120319u_v8engine21
VisualStudio変換ウィザードが立ち上がるので、そのまま完了押して下さい。
次へで1つずつ見ても良いですけど、特にオプションは無かったです。

20120319v_v8engine22
変換レポート。
警告はちらほら出てますが、変換失敗は無いです。

20120319w_v8engine23
F7でビルドしてみてもビルド失敗は無い様です。

20120319x_v8engine24
v8\build\Release\lib(v8\build\Debug\lib)にライブラリも出来てます。

v8.libが無いのが心配だけれど、取り敢えず失敗している様子が無いので良いか…と。
また近々使うので、おかしかったら追って修正しようと思います。

この記事へのコメント

  • okaka

    はじめまして。V8のビルドでググってたどり着きました。
    私も同じような手順でとりあえずビルドできたのですが、同じくv8.libが無いです。
    v8.lib無しで他のプログラムに組み込むことってできるんでしょうか? それともv8.libを生成する方法があるのでしょうか。
    もし記事を書いた後に進展があったのでしたら、ご教授いただければ幸いです。
    2012年10月30日 02:33
  • ERAL

    v8 がスナップショット有り無しでlibを分けた事から v8.lib が無くなったのでしょう。
    base.lib+nosnapshot.lib(or base.lib+snapshot.lib)を使えば問題無く使えたはずです。
    上記の2つを使用すれば preparser_lib.lib は使用しなくていけた様な気がします。

    今手元の環境が古いのですぐに試せないので記憶で書いてますが、確かそんな感じだった様に思います。
    イマイチ自身無いのでまた調査しておきますが、取り急ぎはそんな感じです。
    2012年10月30日 02:52
  • okaka

    >ERAL 様
    お早い返信をありがとうございます。
    なるほど、二つに分けられたってことなんですね。色々と試してみます。
    2012年10月30日 12:43
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/445370764

この記事へのトラックバック