LoginSignup
8

More than 5 years have passed since last update.

v8のソースのダウンロード&ビルド

Posted at

社内勉強会資料。

Building from Source · v8/v8 Wiki

事前準備

下記が必要

  • git
  • python
    • 2.7以上推奨

depot_tools

depot_tools とは?

depot_toolsは、ChromiumやChromium OSのソースコードのダウンロードやレビューの管理などを行うためのスクリプト集。v8もdepot_toolsを使ってソースコードのダウンロードとビルドができる。

depot_tools のインストール

Linux/macは、git cloneして、PATHに追加すればOK。

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$ export PATH=`pwd`/depot_tools:"$PATH"

Windowsは↑のチュートリアルを読んでください。

depot_toolsの中でも下記を使います

  • fetch: ソースコードのダウンロード
  • gclient: 3rd partyリポジトリのアップデート&依存関係の解決
  • gn: ビルドに使うビルドファイルの生成
  • ninja: ビルドツール

v8のソースコードのダウンロード

depot_toolsのfetchで簡単にダウンロード(チェックアウト)できる

$ fetch v8
$ cd v8

その他のプロジェクトもfetchでダウンロードできる

$ fetch chromium  # Basic checkout for desktop Chromium
$ fetch android   # Chromium checkout for Android platform
$ fetch ios       # Chromium checkout for iOS platform

依存関係の解決

v8ディレクトリでgclient syncすれば、OK。

$ gclient sync

チュートリアルには、

You will need to run this any time you update the main src checkout, including when you switch branches.

と書いており、ソースコードのチェックアウト、ブランチ変更を行った時に実行する必要があるみたい。

ビルドファイルの生成

tools/dev/v8gen.pyを実行すると、out.gn以下にビルドファイルが出力される

v8ディレクトリで
$ tools/dev/v8gen.py x64.debug

out.gn/x64.debugに出力される
$ ls -l out.gn/x64.debug
total 120
drwxr-xr-x  10 XXXX  XXXX   340B Apr 14 14:37 ./
drwxr-xr-x   4 XXXX  XXXX   136B Apr 14 14:34 ../
-rw-r--r--   1 XXXX  XXXX    16B Apr 14 14:37 .ninja_deps
-rw-r--r--   1 XXXX  XXXX    15B Apr 14 14:37 .ninja_log
-rw-r--r--   1 XXXX  XXXX   119B Apr 14 14:34 args.gn
-rw-r--r--   1 XXXX  XXXX    13K Apr 14 14:34 build.ninja
-rw-r--r--   1 XXXX  XXXX   2.9K Apr 14 14:34 build.ninja.d
-rw-r--r--   1 XXXX  XXXX     2B Apr 14 14:34 mb_type
drwx------  60 XXXX  XXXX   2.0K Apr 14 14:37 obj/
-rw-r--r--   1 XXXX  XXXX    24K Apr 14 14:34 toolchain.ninja

tools/dev/v8gen.py listで事前に用意されているプリセット一覧が出力される

$ tools/dev/v8gen.py list
arm.debug
arm.optdebug
arm.release
arm64.debug
arm64.optdebug
arm64.release
ia32.debug
ia32.optdebug
ia32.release
mips64el.debug
mips64el.optdebug
mips64el.release
mipsel.debug
mipsel.optdebug
mipsel.release
x64.debug
x64.optdebug
x64.release

v8gen.pyはdepot_toolsのラッパーで、gnを直接使う方法は下記に書いてある。

Building with GN · v8/v8 Wiki

ビルド

depot_toolsのninjaを使う。v8gen.pyで生成したビルドファイルのディレクトリを-Cに指定して、ビルドする。(結構時間が掛かる)

$ ninja -C out.gn/x64.debug

ビルドすると、out.gn/x64.debug以下に色々生成されている。out.gn/x64.debug/d8を実行するとREPLが起動する。

$ ./out.gn/x64.release/d8
V8 version 5.8.0 (candidate)
d8> 1+1
2
d8> function add(a, b) { return a + b; }
undefined
d8> add(1, 1)
2
d8>

その他

Exposing HomeObject – Hacker Noon

上記記事が結構参考になった。ソースを書き換えて再ビルドして、d8で確認したり。あと、ソースを読むだけなら、ブラウザから検索できるっぽい。

Code Search

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8