Hatena::ブログ(Diary)

お前の血は何色だ!! 4 このページをアンテナに追加 RSSフィード Twitter

2010-12-05

厨房でもできる windows VS2010 で V8 engine をビルド。

google chrome にも搭載されている V8 engine を VS2010 (VC++ 2010 / visual studio 2010) でビルドしようというお話です。



環境構築 その1 svn を導入。

f:id:rti7743:20101206013026j:image

svn 入れます。

windowsユーザなら、tortoisesvn(とーたす えすぶいえぬ)がオススメです。遅いけど。

ここから落とせます。

http://tortoisesvn.net/downloads.html

インストール後に PC の再起動がかかるので、注意してください。

環境構築 その2 python を導入。

f:id:rti7743:20101206013027j:image

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

インストールしたら、パスを通します。


パスを通すのは、結構大変です。


まず、以下の場所に頑張って移動します。

コントロールパネル→システムとセキュリティ→システム→システムの詳細設定→環境変数

f:id:rti7743:20101206013029j:image

そしたら、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 などとバージョンが表示されたら成功です。

f:id:rti7743:20101206013030j:image


↓こんなふうにエラーが表示されたら、パスがうまく通っていません。または、インストールに失敗しています。

C:\Users\rti>python
'python' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

環境構築 余談

本家のビルド方法では、 SCons も必要と書かれていますが、なくても動くみたいです。

入れたい人は、http://www.scons.org/ から入れてください。

いれたあと、パスを通せと本家のドキュメントには書かれていました。

http://code.google.com/intl/ja/apis/v8/build.html

V8 のソースダウンロード

svn を利用してソースをダウンロードします。

適当な場所に適当なフォルダを作ります。(デスクトップのように日本語が入るフォルダがあるとダメ。)

フォルダの名前は、v8 とします。

f:id:rti7743:20101206013031j:image


v8 フォルダを開いて、適当な場所で右クリックします。

そうするとメニューが開いて SVN Checkout... という項目があるので、これを選択します。

すると、ダイアログが開くので、 URL of repository っていう項目に以下の内容を入れます。

http://v8.googlecode.com/svn/trunk/ 

f:id:rti7743:20101206013032j:image

あとは OK ボタンを押すと、ソースコードダウンロードが始まります。


V8 ビルドへ ステップ1

さて、ビルドしてみましょう。

ダウンロードして v8 エンジンのソースーコードの、v8\tools\visual_studio というフォルダに移動してみます。


そしたら、v8.sln というファイルがあるので、これをダブルクリックで開きます。

f:id:rti7743:20101206013033j:image


VS2010 が起動して、変換するとか言ってくるので、完了をクリックして変換します。

f:id:rti7743:20101206013034j:image

さて、VS2010 が起動しました。

まずは、何も考えずに F7 を押してみます。

そうすると、コンパイルがはじまり、しばらく待っていると、エラーが表示されます。

f:id:rti7743:20101206013035j:image

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 で保存しました。

f:id:rti7743:20101206015239j:image

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 コンソールが立ち上がります。

f:id:rti7743:20101206014138j:image

とりあえずはここまで。

私たちは V8 engine を VS2010 でビルドすることができました。

お疲れさまでした。

ビースケビースケ 2014/02/21 17:47 V8をビルドしようといろんな記事を周り、上手くいかず、コチラの記事に戻ってきました。
「ソース ファイルを開けません」というエラーが沢山出て、それを解決できれば良さそうなのですが、コチラの記事にあるファイルを開いてみても修正ポイントが見当たりません。
エラーをどう見たらどこのファイルをどう直したら良いということがわかるのでしょうか?

rti7743rti7743 2014/02/21 19:06 なんかいろいろかわっちゃったみたい。
とりあえず最小構成をzipでやるお。

v8をライブラリ化してv8.libを作って、
それを利用して、v8testで hello world してます。

http://rtilabs.rti-giken.jp/files/2014_02_21/v8test.zip

ビースケビースケ 2014/02/22 09:48 ありがとうございます。
無事ビルドできました。

書き忘れていたのですが、ビルドしたい理由が最新機能をシェルで試したいということでして
trunkおよび3.24をビルドしようとしたのですがダメでした。

makeやsconsコマンドも試してみたのですが、
https://code.google.com/p/v8/issues/detail?id=2197
http://stackoverflow.com/questions/17374120/error-trying-to-compile-v8-on-osx-lion-scons-no-sconstruct-file-found
このようなエラーで出来ませんでした。

最新バージョンはwinでのビルドが困難になったのでしょうか?

ビースケビースケ 2014/08/18 16:51 いろいろ調べましたがVS2010はもうサポートされてなくVS2013を使う必要があるようです。
当方XPなのでどうにもならなくなりました、、、諦めます。

rti7743rti7743 2014/08/18 19:56 sconsなどのビルドツールは、所詮名は、 ビルド環境を作っているだけですから、強引にコンパイルさせることは不可能ではないかと思います。
もちろん時間はかかりますが・・・

やり方としては、まずは、適当に .cpp .h とかのファイルを VC++に追加します。
(根本的に foo.h などを ビルドツールで作っている場合は、 linux などで一度ビルドさせてファイルを作らせます。)

それでF5でコンパイル。
当然、失敗しますよね。

で、ないよって言われている関数名とかで grep して、そのファイルをVC++に追加してを繰り返します。

include に失敗していたら、 PATH を通してあげます。
これで、コンパイルが通ったて、LINKでこけても同じようにやって修正します。
どうしても、ダメだったところは、 #define とかを建てたりします。

これで大抵のソフトウェアは動作すると思います。
しょせんは、たかがプログラムです。魔法ではないです。

もちろん、C++0x 依存とか、 templateマジックとかの、このコンパイラではどうしようもない問題等は別ですが・・・
もし、暇があったら試してみてください。そして、出来た成果を世界に公開すると、世の中はもっと良くなると思います。頑張ってくださいw

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証