厨房でもできる windows VS2010 で V8 engine をビルド。
google chrome にも搭載されている V8 engine を VS2010 (VC++ 2010 / visual studio 2010) でビルドしようというお話です。
環境構築 その1 svn を導入。
svn 入れます。
windowsユーザなら、tortoisesvn(とーたす えすぶいえぬ)がオススメです。遅いけど。
ここから落とせます。
http://tortoisesvn.net/downloads.html
インストール後に PC の再起動がかかるので、注意してください。
環境構築 その2 python を導入。
python入れます。
python ってver2系とver3系で違うらしいので、とりあえず2系を入れます。
#もしかしたら 3系でもうごくかもしれんが。
http://www.python.jp/Zope/download/pythoncore
http://www.python.org/ftp/python/2.7.1/python-2.7.1.msi
インストールしたら、パスを通します。
パスを通すのは、結構大変です。
まず、以下の場所に頑張って移動します。
コントロールパネル→システムとセキュリティ→システム→システムの詳細設定→環境変数
そしたら、Path とか書いてある項目を選択して、 編集をクリックします。
入力しづらいダイアログが開くので変数値っていうやつの最後に ;pathonをインストールしたパスを書きます。
私は、C:\Program Files (x86)\python2.7 にインストールしたので、
;C:\Program Files (x86)\python2.7
と、末尾に入力しました。
入力したら、 OK ボタンをくりっく指定って、 ウィンドウを全部閉じます。
で、パスを通したら、 cmd を開いて確認します。
windowsボタンをクリックして、cmd と入力し、 コマンドプロンプトを立ち上げます。
黒い画面が出てきたら、 python --version と入力してみましょう。
python --version
うまく ver 2.7.1 などとバージョンが表示されたら成功です。
↓こんなふうにエラーが表示されたら、パスがうまく通っていません。または、インストールに失敗しています。
C:\Users\rti>python 'python' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
環境構築 余談
本家のビルド方法では、 SCons も必要と書かれていますが、なくても動くみたいです。
入れたい人は、http://www.scons.org/ から入れてください。
いれたあと、パスを通せと本家のドキュメントには書かれていました。
V8 のソースダウンロード
svn を利用してソースをダウンロードします。
適当な場所に適当なフォルダを作ります。(デスクトップのように日本語が入るフォルダがあるとダメ。)
フォルダの名前は、v8 とします。
v8 フォルダを開いて、適当な場所で右クリックします。
そうするとメニューが開いて SVN Checkout... という項目があるので、これを選択します。
すると、ダイアログが開くので、 URL of repository っていう項目に以下の内容を入れます。
http://v8.googlecode.com/svn/trunk/
あとは OK ボタンを押すと、ソースコードのダウンロードが始まります。
V8 ビルドへ ステップ1
さて、ビルドしてみましょう。
ダウンロードして v8 エンジンのソースーコードの、v8\tools\visual_studio というフォルダに移動してみます。
そしたら、v8.sln というファイルがあるので、これをダブルクリックで開きます。
VS2010 が起動して、変換するとか言ってくるので、完了をクリックして変換します。
さて、VS2010 が起動しました。
まずは、何も考えずに F7 を押してみます。
そうすると、コンパイルがはじまり、しばらく待っていると、エラーが表示されます。
1>2010/12/06 0:03:45 にビルドを開始しました。 1>InitializeBuildStatus: 1> "C:\Users\rti\Desktop\v8\tools\visual_studio\Debug\obj\v8_base\v8_base.unsuccessfulbuild" のタッチ タスクを実行しています。 1>ClCompile: 1> profile-generator.cc 1>..\..\src\profile-generator.cc(936): error C2220: 警告をエラーとして扱いました。'object' ファイルは生成されません。 1>..\..\src\profile-generator.cc(936): warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
わけがわからない警告ですね。
適当なエディタで、 v8\src\profile-generator.cc を開いて、 Unicode で保存してあげてください。
または、警告をエラーとしないとしても回避することができます。(あんまり推奨されません)
今回はサクラエディタで v8\src\profile-generator.cc を開き、 Unicode で保存しました。
V8 ビルドへ ステップ2
ステップ1の修正をしたら、また F7 を押してコンパイルします。
1>------ ビルド開始: プロジェクト: v8_base, 構成: Debug Win32 ------ 1>2010/12/06 0:07:19 にビルドを開始しました。 1>InitializeBuildStatus: 1> "C:\Users\rti\Desktop\v8\tools\visual_studio\Debug\obj\v8_base\v8_base.unsuccessfulbuild" のタッチ タスクを実行しています。 1>ClCompile: 1> profile-generator.cc 1>MakeDirsForLib: 1> ディレクトリ "C:\Users\rti\Desktop\v8\tools\visual_studio\Debug\lib" を作成しています。 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(1151,5): warning MSB8012: TargetPath(C:\Users\rti\Desktop\v8\tools\visual_studio\Debug\v8_base.lib) が Library の OutputFile プロパティ値 (C:\Users\rti\Desktop\v8\tools\visual_studio\Debug\lib\v8_base.lib) と一致しません。このため、プロジェクトが正常にビルドされない可能性があります。この問題を解決するには、$(OutDir)、$(TargetName)、および $(TargetExt) の各プロパティ値が、%(Lib.OutputFile) で指定されている値と一致することを確認してください。
また、訳の変わらないエラーですね。
VS2010 では、以下のように設定を直さないとダメらしいです。
参考: http://www.firefly-vj.net/imagery/2010/05/25/visual-studio-2010-%E3%81%A8-windows-sdk-v7-1-%E3%81%A7-baseclasses-%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%82%92%E3%81%99%E3%82%8B/
$(OutDir)lib\$(ProjectName).lib ↓ $(OutDir)$(TargetFileName)
で、それをするにためには、GUIからやると大変なのでファイルを直接書き換えます。
以下のファイルを開きます。
\v8\tools\visual_studio\common.props
<Lib> <OutputFile>$(OutDir)lib\$(ProjectName).lib</OutputFile> </Lib> ↓ <Lib> <OutputFile>$(OutDir)$(TargetFileName)</OutputFile> </Lib>
書き換えたら、もう一度 F7 でビルドしてみましょう。
こんな警告がでますが、とりあえず動くから気にしない!!
1>regexp-macro-assembler-irregexp.obj : warning LNK4221: このオブジェクト ファイルは、以前に未定義であったパブリック シンボルを定義していないため、このライブラリを使用するリンク操作では使用されません 1> v8_base.vcxproj -> C:\Users\rti\Desktop\v8\tools\visual_studio\Debug\v8_base.lib
V8 ビルドへ ステップ3
ここらへんで、pythonがねーよってエラーがでいる人は、人の話をちゃんと聞かない人です。
python 入れてくださーい。
#アイツは話を聞かないからな。
2>CustomBuild: 2> Processing js files... 2> 'python.exe' は、内部コマンドまたは外部コマンド、 2> 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5): error MSB6006: "cmd.exe" はコード 1 を伴って終了しました。
pythonのエラーは出ていないけど、↓のエラーがでちゃったーって人はここまでは正しく出来ています。
5>2010/12/06 0:31:28 にビルドを開始しました。 5>InitializeBuildStatus: 5> "C:\Users\rti\Desktop\v8\tools\visual_studio\Debug\obj\v8_snapshot\v8_snapshot.unsuccessfulbuild" のタッチ タスクを実行しています。 5>ClCompile: 5> natives-empty.cc 5>c1xx : fatal error C1083: ソース ファイルを開けません。'C:\Users\rti\Desktop\v8\tools\visual_studio\Debug\obj\v8_snapshot\\v8\DerivedSources\natives-empty.cc': No such file or directory 5> snapshot.cc 5>c1xx : fatal error C1083: ソース ファイルを開けません。'C:\Users\rti\Desktop\v8\tools\visual_studio\Debug\obj\v8_snapshot\\v8_snapshot_cc\DerivedSources\snapshot.cc': No such file or directory 5> コードを生成中...
これは、 VS2010 から(?)パスのチェックが厳しくなったために発生しています。
具体的には、 c:\\windows\ のように、 \ が二つ重なっていたパスをエラーとして弾くためです。アホですね。
仕方ないので、ファイルを修正します。
v8_snapshot.vcproj と v8_snapshot_x64.vcproj と v8_snapshot.vcxproj と v8_snapshot.vcxproj.filtersの4つを修正します。
//v8_snapshot.vcproj RelativePath="$(IntDir)\..\v8\DerivedSources\natives-empty.cc" ↓ RelativePath="$(IntDir)..\v8\DerivedSources\natives-empty.cc" //v8_snapshot_x64.vcproj RelativePath="$(IntDir)\..\v8_snapshot_cc\DerivedSources\snapshot.cc" ↓ RelativePath="$(IntDir)..\v8_snapshot_cc\DerivedSources\snapshot.cc" //v8_snapshot.vcxproj <ItemGroup> <ClCompile Include="$(IntDir)\v8\DerivedSources\natives-empty.cc"> <Filter>generated files</Filter> </ClCompile> <ClCompile Include="$(IntDir)\v8_snapshot_cc\DerivedSources\snapshot.cc"> <Filter>generated files</Filter> </ClCompile> </ItemGroup> ↓ <ItemGroup> <ClCompile Include="$(IntDir)..\v8\DerivedSources\natives-empty.cc"> <Filter>generated files</Filter> </ClCompile> <ClCompile Include="$(IntDir)..\v8_snapshot_cc\DerivedSources\snapshot.cc"> <Filter>generated files</Filter> </ClCompile> </ItemGroup> //v8_snapshot.vcxproj.filters <ItemGroup> <ClCompile Include="$(IntDir)\v8\DerivedSources\natives-empty.cc"> <Filter>generated files</Filter> </ClCompile> <ClCompile Include="$(IntDir)\v8_snapshot_cc\DerivedSources\snapshot.cc"> <Filter>generated files</Filter> </ClCompile> </ItemGroup> ↓ <ItemGroup> <ClCompile Include="$(IntDir)..\v8\DerivedSources\natives-empty.cc"> <Filter>generated files</Filter> </ClCompile> <ClCompile Include="$(IntDir)..\v8_snapshot_cc\DerivedSources\snapshot.cc"> <Filter>generated files</Filter> </ClCompile> </ItemGroup>
気をとりなおして、もう一度 F7 でビルドしてみます。
4>ビルドに成功しました。 4> 4>経過時間 00:00:02.85 ========== ビルド: 6 正常終了、0 失敗、3 更新不要、0 スキップ ==========
やった!今度は成功しました。
V8 ビルド終了
作られたバイナリは、以下のディレクトリに入っています。
v8\tools\visual_studio\Debug
v8\tools\visual_studio\Debug\d8.exe を起動すると、
対話型の javascript コンソールが立ち上がります。
とりあえずはここまで。
私たちは V8 engine を VS2010 でビルドすることができました。
お疲れさまでした。