2017-02-13 justjavac 象尘说
对于JavaScript程序员来说,可以瞧一瞧justjavac给大家写的科普类读物,V8引擎的分析,“也许你不懂C++”,但是你可以了解一下,总是好的。
本系列得到了justjavac的授权,同意我在公众号中转载,来源于知乎专栏:https://zhuanlan.zhihu.com/v8core
V8 的源码已经从 google code 迁移到了 github,而版本控制工具也从 svn 换成了 git。V8 源码地址 v8/v8。
网上大部分讲解 V8 编译的文章基本都是使用的 GYP。而 V8 的 wiki 也已经写明了:
GYP has been deprecated in favor of GN.
V8 团队已经使用 GN 替代了 GYP。GYP 和 GN 并不是构建系统,V8 使用的构建系统使用的是 Ninja,而 GN 是用来生产 Ninja 构建文件的工具。
GN 相比 GYP 的优势:
- 生成的 GYP 文件可读性高。
- 速度快(Chromium 团队说 GN 比 GYP 快 20 倍)
- GN 提供了更加丰富实用的工具和配置依赖,比如 gn check、public_deps、data_deps 等
从去年十月(2016年10月)开始,Chromium 已经不提供对 GYP 的支持,但是 Chromium 文档中说 Chromium 使用的相关项目(例如 V8)依然支持 GYP 工具。
我们不需要手动安装 GN,GN 被包含在 depot_tools 中。depot_tools 提供了很多实用工具:gclient、gcl、git-cl、cpplint.py、pylint 等。安装 depot_tools 需要先安装 git 和 python。
先 clone depot_tools 文件
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
将 depot_tools 添加到系统环境变量 PATH:
export PATH=`pwd`/depot_tools:"$PATH"
如果是 windows 系统,需要使用 Msys (Git for Windows),暂不支持 Cygwin。
安装 depot_tools 构建系统的所有依赖,运行:
gclient sync
获取 V8 源码(包含了所有分支和依赖):
fetch v8
cd v8
进入 V8 目录,v8gen 生成 ninja 构建文件:
tools/dev/v8gen.py x64.release
编译源码,生成可执行文件,目标系统 x64:
ninja -C out.gn/x64.release
编译完的文件名不是 V8,而是 D8。
运行测试(非必需):
tools/run-tests.py --gn
注意:如果仅仅是下载了 V8 的源码,是无法编译成功的,必须使用 depot_tools。
如果想自定义编译 V8,可以阅读 Building with GN。通过自定义编译参数,可以更好的调试 javascript 以及 V8 引擎。
参考文件: