科普 | 编译 V8 源码

Posted 丶不知

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了科普 | 编译 V8 源码相关的知识,希望对你有一定的参考价值。

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 的优势:

 

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

参考文件:

 

 

以上是关于科普 | 编译 V8 源码的主要内容,如果未能解决你的问题,请参考以下文章

图解 Google V8 # 10:机器代码:二进制机器码究竟是如何被CPU执行的?

V8 引擎是如何工作的?

V8 引擎是如何工作的?

图解 Google V8 # 05:函数表达式的底层工作机制

V8是怎么执行JS代码的

v8字节码的编译过程