使用 GN 构建 V8

V8 在 GN 的帮助下构建。GN 是一种元构建系统,因为它为许多其他构建系统生成构建文件。因此,您的构建方式取决于您使用的“后端”构建系统和编译器。
以下说明假设您已经拥有 V8 的检出 并且您已经 安装了构建依赖项

有关 GN 的更多信息,请参阅 Chromium 的文档GN 自身的文档

从源代码构建 V8 包括三个步骤

  1. 生成构建文件
  2. 编译
  3. 运行测试

有两种构建 V8 的工作流程

使用 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:生成构建文件 #

有几种方法可以生成构建文件

  1. 原始的手动工作流程涉及直接使用 gn
  2. 名为 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'

这将生成构建文件,用于使用 goma 进行编译,以在发布模式下使用 arm64 模拟器编译 V8。

要概述所有可用的 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] 上寻求帮助。