在 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 参数。您可以使用以下参数获得通常的“release”、“optdebug”和“debug”配置。

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