编译 V8

在了解 V8 的 JavaScript 编译优化的时候想瞅瞅运行时的内存布局情况,需要重新编译 V8 来提供一些调试功能,参考官方文档,具体的步骤如下(主要针对 OS X 10.10 系统,其它系统应该类似)~

前期准备

至少需要这些东东已经 ready :

推荐使用 brew 来安装这些东东,简单方便~

安装帮助工具

http://dev.chromium.org/developers/how-tos/install-depot-tools

clone 文件,然后将目录加入到环境变量 PATH

1
2
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$ export PATH=`pwd`/depot_tools:"$PATH"

下载源码与依赖包

1
2
# 获取v8的代码与依赖文件,会创建名为v8的文件夹
$ fetch v8

编译

进入 V8 文件夹,根据本机的情况选择 ia32x64arm 或者 arm64 的目标平台和构建模式 debugoptdebugrelease,另外还有一些额外的构建参数参考这里

1
$ make x64.release disassembler=on gdbjit=on

以上命令是构建 x64 平台下 release 版本的 V8,并且开启了 gdbjit 调试支持与汇编代码的生成,方便调试 V8 生成的机器代码。

编译产生的文件放在 out 目录下,可执行文件名为 d8 (百思不得其解为啥叫 d8 而不是 v8 …)

Hello World

新建一个测试文件 test.js

1
print('Hello World');

然后运行:

1
$ d8 test.js

如果能看到 Hello World 字符串,恭喜你,编译成功了 ~~

可能会 Bug 的地方 …

在获取源码代码的时候可能会悲剧,那啥,请使用 VPN