在 Arm64 Linux 上編譯

如果您已閱讀有關如何在非 x86 或 Apple Silicon Mac 的機器上查看建置V8 的說明,您可能會遇到一些問題,因為建置系統會下載原生二進位檔,然後無法執行它們。但是,即使使用 Arm64 Linux 機器來處理 V8 並未獲得官方支援,但克服這些障礙非常簡單。

繞過 vpython #

fetch v8gclient sync 和其他 depot_tools 命令使用稱為「vpython」的 python 封裝器。如果您看到與之相關的錯誤,您可以定義下列變數,以改用系統的 python 安裝

export VPYTHON_BYPASS="manually managed python not supported by chrome operations"

相容的 ninja 二進位檔 #

首先要確保我們使用 ninja 的原生二進位檔,我們選擇它而不是 depot_tools 中的二進位檔。執行此操作的簡單方法是在安裝 depot_tools 時調整您的 PATH,如下所示

export PATH=$PATH:/path/to/depot_tools

這樣,您就能夠使用系統的 ninja 安裝,因為它很可能可用。不過,如果它不可用,您可以從原始碼建置

編譯 clang #

預設情況下,V8 會想要使用它自己的 clang 建置,而此建置可能無法在您的機器上執行。您可以調整 GN 引數,以使用系統的 clang 或 GCC,但是,您可能想要使用與上游相同的 clang,因為它將是最受支援的版本。

您可以直接從 V8 簽出中,在本地建置它

./tools/clang/scripts/build.py --without-android --without-fuchsia \
--host-cc=gcc --host-cxx=g++ \
--gcc-toolchain=/usr \
--use-system-cmake --disable-asserts

手動設定 GN 引數 #

便利指令碼可能無法在預設情況下執行,您必須按照手動工作流程手動設定 GN 引數。您可以使用下列引數取得常見的「發行版」、「最佳化偵錯」和「偵錯」組態

is_debug=false
is_debug=true
v8_enable_backtrace=true
v8_enable_slow_dchecks=true
is_debug=true
v8_enable_backtrace=true
v8_enable_slow_dchecks=true
v8_optimized_debug=false

使用系統的 clang 或 GCC #

使用 GCC 建置僅是停用使用 clang 編譯的情況

is_clang=false

請注意,預設情況下,V8 會使用 lld 連結,這需要較新版本的 GCC。你可以使用 use_lld=false 切換到 gold 連結器,或另外使用 use_gold=false 來使用 ld

如果你想使用系統安裝的 clang,例如在 /usr 中,你可以使用下列引數

clang_base_path="/usr"
clang_use_chrome_plugins=false

但是,由於系統的 clang 版本可能支援不佳,因此你可能會遇到警告,例如未知的編譯器旗標。在這種情況下,使用以下方法將警告視為錯誤會很有用

treat_warnings_as_errors=false