GNを使用してV8をビルドする
V8はGNを使用して構築されます。GNは他の多くのビルドシステムのためのビルドファイルを生成するためのメタビルドシステムです。そのため、どの”バックエンド”のビルドシステムやコンパイラを使用するかによって、ビルド手順が変わります。 以下の手順は、既にV8のチェックアウトを行い、ビルド依存関係をインストールしていることを前提としています。
GNに関する追加情報は、ChromiumのドキュメントやGN自身のドキュメントに記載されています。
V8をソースからビルドするには、3つのステップが必要です:
- ビルドファイルの生成
- コンパイル
- テストの実行
V8をビルドするには2つのワークフローがあります:
- 3つのステップを便利に組み合わせたヘルパースクリプト
gm
を使用する便利なワークフロー - 各ステップを手動で実行する低レベルのコマンドを使用する生のワークフロー
gm
を使用してV8をビルドする(便利なワークフロー)
gm
は、ビルドファイルの生成、ビルドのトリガー、およびオプションでテストの実行を行う便利なオールインワンスクリプトです。このスクリプトは、V8のチェックアウト中のtools/dev/gm.py
にあります。シェル設定にエイリアスを追加することをお勧めします:
alias gm=/path/to/v8/tools/dev/gm.py
その後、gm
を使用して、x64.release
のような既知の設定でV8をビルドできます:
gm x64.release
ビルド直後にテストを実行するには、以下を実行します:
gm x64.release.check
gm
は実行中のすべてのコマンドを出力するため、必要に応じてそれを追跡し再実行することが容易です。
gm
を使用すると、必要なバイナリをビルドし、特定のテストを1つのコマンドで実行できます:
gm x64.debug mjsunit/foo cctest/test-bar/*
V8をビルドする: 生の、手動のワークフロー
ステップ 1: ビルドファイルを生成する
ビルドファイルを生成するにはいくつかの方法があります:
- 生の手動ワークフローでは、直接
gn
を使用します。 v8gen
というヘルパースクリプトが、一般的な設定用にプロセスを簡素化します。
gn
を使用してビルドファイルを生成する
gn
を使用して、ディレクトリout/foo
用のビルドファイルを生成します:
gn args out/foo
これによりエディタウィンドウが開き、gn
の引数を指定できます。また、引数をコマンドラインで渡すこともできます:
gn gen out/foo --args='is_debug=false target_cpu="x64" v8_target_cpu="arm64" use_goma=true'
これにより、arm64シミュレータを使用したリリースモードでgoma
を使用してV8をコンパイルするためのビルドファイルが生成されます。
利用可能なすべてのgn
引数の概要を表示するには、以下を実行します:
gn args out/foo --list
v8gen
を使用してビルドファイルを生成する
V8リポジトリには、一般的な設定用のビルドファイルをより簡単に生成するための便利なスクリプトv8gen
が含まれています。シェル設定にエイリアスを追加することをお勧めします:
alias v8gen=/path/to/v8/tools/dev/v8gen.py
v8gen --help
を実行して、詳細情報を確認してください。
利用可能な設定(またはマスターのボット)を一覧表示します:
v8gen list
v8gen list -m client.v8
client.v8
ウォーターフォールの特定のボットのようにフォルダfoo
でビルドする:
v8gen -b 'V8 Linux64 - debug builder' -m client.v8 foo
ステップ 2: V8をコンパイルする
gn
がx64.release
フォルダに生成されたと仮定して、V8全体をビルドするには、以下を実行します:
ninja -C out/x64.release
d8
のような特定のターゲットをビルドするには、それらをコマンドに追加します:
ninja -C out/x64.release d8
ステップ 3: テストを実行する
テストドライバに出力ディレクトリを渡すことができます。他の関連するフラグはビルドから推測されます:
tools/run-tests.py --outdir out/foo
out.gn
にある最新のビルドをテストすることもできます:
tools/run-tests.py --gn
ビルドの問題がありますか?v8.dev/bugでバグを報告するか、[email protected]で助けを求めてください。