使用 GN 編譯 V8
V8 使用 GN 進行編譯。GN 是一種元構建系統,能為多種其他構建系統生成構建文件。因此,如何進行構建依賴於所使用的“後端”構建系統及編譯器。 以下指引假定您已擁有 V8 的源代碼檢出 且已 安裝構建依賴項。
更多有關 GN 的資訊可參考 Chromium 的文檔 或 GN 的官方文檔。
從源代碼編譯 V8 需經過三個步驟:
- 生成構建文件
- 編譯
- 運行測試
編譯 V8 有兩種工作流程:
- 使用名為
gm
的幫助腳本進行便捷工作流程,該腳本結合了以上三步驟 - 原始工作流程,手動為每個步驟分別執行低層級指令
使用 gm
編譯 V8(便捷工作流程)
gm
是一個方便的多合一腳本,能生成構建文件、觸發構建並可選擇性地運行測試。它位於您 V8 源碼檢出目錄的 tools/dev/gm.py
。建議您將別名添加到 shell 配置中:
alias gm=/path/to/v8/tools/dev/gm.py
然後可以使用 gm
為已知的配置編譯 V8,例如 x64.release
:
gm x64.release
若需要在編譯後直接運行測試,請執行:
gm x64.release.check
gm
輸出其執行的所有指令,使得可以方便地追蹤及重新執行它們(如有需要)。
gm
允許通過單一指令生成所需的二進制文件並運行特定的測試:
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 模擬器在釋放模式下編譯 V8,并使用 goma
進行編譯。
了解所有可用的 gn
參數,請執行:
gn args out/foo --list
使用 v8gen
生成構建文件
V8 存儲庫包括了一個方便的 v8gen
腳本,用於更輕鬆地為常見配置生成構建文件。建議您將別名添加到 shell 配置中:
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
若要編譯整個 V8(假設 gn
已生成至 x64.release
資料夾),請執行:
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] 尋求幫助。