2010/08/02

V8のMinGWでのコンパイル

V8はGoogle Chromeに搭載されたIA-32かARM上で動作するJavaScriptエンジンです。ソースコードはC++で書かれており、新BSDライセンスで提供されています。

Chromeに使用されていますが、スタンドアロンでの実行や組み込みでの実行が簡単に実現できるようになっています。使用ユーザが多いJavaScriptであり実行速度が速いため、今後組み込み用に使えるのではないかと思います。

この記事では、V8のコンパイルを行います。ただし、コンパイルを通すためにMemoryBarrierをコメントアウトしているので完全な動作を保証するものではありません。(よい対処法があればお知らせください)

下準備

サーバサイドJavaScriptを実現したnode.jsがV8を使用しており、そのソースに付属のV8を使うとよいでしょう。

今回はnode.jsのサイトからnode-v0.1.100.tar.gzをダウンロードしました。

コンパイル

ダウンロードしたファイルからdeps/v8/以下を解凍します。そして、SConstructを680行目を修正します。

  'arch': {
         'values':['arm', 'ia32', 'x64', 'mips'],
         'default': ARCH_GUESS,
+        'help': 'the architecture to build for (' + ARCH_GUESS + ')'
- #      'help': 'the architecture to build for (' + ARCH_GUESS + ')'
  },

次に、/src/platform-win32.cc内のOS::ReleaseStoreでMemoryBarrierをコメントアウトします。

  void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
-    MemoryBarrier();
+    //MemoryBarrier();
     *ptr = value;
  }

あとはコンパイルするだけです。

scons arch=ia32 os=cygwinscons arch=ia32 os=cygwin d8

実行

v8直下にスタンドアロン版のd8.exeが作成されているので、それでJavaScriptを実行します。

まとめ

MingwでのV8のコンパイルの仕方について述べました。

リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。