V8源码分析之Ubuntu16下编译源码(第二篇)

V8源码分析之Ubuntu16下编译源码(第二篇)0x00前言V8引擎使用Ninja进行构建源码,GN是用来辅助生成Ninja配置文件的工具

0x00 前言

V8引擎使用Ninja进行构建源码,GN是用来辅助生成Ninja配置文件的工具。

从源码构建V8需要三个步骤:

  1. 生成构建所需文件( generating build files)
  2. 编译(compiling)
  3. 运行测试用例(running tests)

官方提供两种途径构建V8

  • 一键式工作流,使用辅助脚本gm优雅的完成构建3个步骤
  • 原始工作流,手动一步一步的执行构建命令

依赖安装

安装ninja

sudo apt-get install ninja-build

depot_tools的依赖最好写入.bashrc下,否则会提示gn找不到

echo 'export PATH=$PATH:"/path/to/depot_tools"' >>~/.bashrc

0x01 通过gm工具构建V8(一键式工作流)

gm是用于生成构建文件,出发构建和可选的运行测试用例等工作的all-in-one式的一键脚本。你可以在V8中找到tools/dev/gm.py,我们推荐使用别名方便干活:

alias gm=/path/to/v8/tools/dev/gm.py

可以使用gm构建我们所熟知的V8,比如x64.release

gm x64.release

如果需要构建后运行测试,可以运行:

gm x64.release.check

gm 输出所有命令的执行过程,有了这些信息,跟踪和重建会很方便。
gm 开启构建所需要的二进制(debug版的二进制),同时运行特定的测试,使用下面这一条命令:

gm x64.debug mjsunit/foo cctest/test-bar/*

0x02 手动构建V8(原始工作流)

Step 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'

这个命令会使用arm64模拟器编译V8,生成release版,开启goma模式。

查看gn的参数列表

gn args out/foo --list
使用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

v8gen的原理是借助mb_config.pyl文件。根据master配置(-m)和builder配置(-b)来生成编译文件,我们在infra/mb/mb_config.pyl找到对应的配置:
在这里插入图片描述

Step 2:编译V8

编译V8的整个项目

ninja -C out/x64.release

执行过程

$ gm x64.debug
# gn gen out/x64.debug
Done. Made 142 targets from 82 files in 337ms
# autoninja -C out/x64.debug d8
ninja: Entering directory `out/x64.debug'
[398/1509] CXX obj/torque_generated_initializers/js-proxy-tq-csa.o

只编译特定对象,比如d8

ninja -C out/x64.release d8

Step 3:运行测试

配置测试的输出路径

tools/run-tests.py --outdir out/foo

也可以测试最近一次编译构建(在out.gn中)

tools/run-tests.py --gn

0x03 参考文献

https://v8.dev/docs/build-gn#gn

今天的文章V8源码分析之Ubuntu16下编译源码(第二篇)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/60756.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注