科普 | 编译 V8 源码

1,689 阅读2分钟
原文链接: mp.weixin.qq.com

对于JavaScript程序员来说,可以瞧一瞧justjavac给大家写的科普类读物,V8引擎的分析,“也许你不懂C++”,但是你可以了解一下,总是好的。


本系列得到了justjavac的授权,同意我在公众号中转载,来源于知乎专栏: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 的优势:


  1. 生成的 GYP 文件可读性高。

  2. 速度快(Chromium 团队说 GN 比 GYP 快 20 倍)

  3. 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 引擎。

参考文件:


更多精彩内容可关注我的个人微信公众号:搜索fed-talk或者扫描下列二维码,也欢迎您将它分享给自己的朋友。