0x00 前言
V8引擎使用Ninja进行构建源码,GN是用来辅助生成Ninja配置文件的工具。
从源码构建V8需要三个步骤:
- 生成构建所需文件( generating build files)
- 编译(compiling)
- 运行测试用例(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:生成构建文件
有两种方法生成构建文件
- 使用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,生成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