科普 | 编译 V8 源码
对于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 引擎。
参考文件:
科普 | 编译 V8 源码的更多相关文章
- mac下编译node源码
看过一篇win7 64x下面编译node的文章,链接地址:编译nodejs及其源码研究 下面学习一下在mac下面如何编译node源码. 过程也挺简单. 1.下载源码. > mkdir nodes ...
- Windows编译Nginx源码
Windows下的Nginx战役,人不作就不会死!就像是拿着麦当劳的优惠券去买肯德基一样,别扭啊 Nginx是一款轻量级的Web 服务器.反向代理服务器.邮件服务器等等集一大串荣誉于一身的大牌人物!他 ...
- 重新编译jdk源码,启用debug信息
我有一个不知道是好还是不好的习惯,搞不懂的一些玩意儿,喜欢调试然后单步执行看这玩意儿到底是怎么运行的. 今天看到正则表达式的时候,appendReplacement()这个方法怎么也看不明白它是怎么工 ...
- (转载)Linux如何编译安装源码包软件
一.什么是源码包软件: 顾名思义,源码包就是源代码的可见的软件包,基于Linux和BSD系统的软件最常见:在国内源可见的软件几乎绝迹:大多开源软件都是国外出品:在国内较为出名的开源软件有fcitx;l ...
- 用VC编译lua源码,生成lua语言的解释器和编译器
用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...
- Android反编译(一)之反编译JAVA源码
Android反编译(一) 之反编译JAVA源码 [目录] 1.工具 2.反编译步骤 3.实例 4.装X技巧 1.工具 1).dex反编译JAR工具 dex2jar http://code.go ...
- [原]在win上编译 subversion 源码实践Tonyfield的专栏
(百度和网页的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。) [原]在win上编译 subversion 源码实践 2013-6-9阅读400 评论0 (参考 ...
- 在Mac mini上编译Android源码
参考文章 1.Android 6.0 源代码编译实践 2.编译Android源码致命错误解决方案 实践过程 1.Mac下安装Ubuntu双系统 (1)Ubuntu版本:Ubuntu 15.10 注:实 ...
- 用vs2013编译lua源码方法(一)
用vs2013编译lua源码方法 来源:网络 编辑:admin 1.下载lua源码:lua-5.2.3.tar.gz,解压 2.用vs2013建立一个win32工程: 1)下载后解压到一个目录下 ...
随机推荐
- memcpy函数实现中的优化
今天浏览Google面试题的时候,有看到一个memcpy的实现,以及如何去优化memcpy. 我对memcpy的实现的记忆就是,拷贝的时候需要从后往前拷贝,为何防止内存重叠. 但是如果去优化它我没有想 ...
- VS2010-MFC(常用控件:编辑框Edit Control)
转自:http://www.jizhuomi.com/software/181.html 编辑框(Edit Control)是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子 ...
- Activity详解三 启动activity并返回结果 转载 https://www.cnblogs.com/androidWuYou/p/5886991.html
首先看演示: 1 简介 .如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int ...
- 使用gulp搭建less编译环境
什么是less? 一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Fi ...
- PPM 信号解析
PWM信号 PWM信号用于控制单个电调或者单个舵机脉冲宽度调制信号. 像华科尔DEVO 10遥控接收器(RX1002)就输出10路PWM,参看下图. 舵机(电调)上用到PWM信号种类很多,我们这里对常 ...
- 7_3.springboot2.x启动配置原理_3.事件监听机制
事件监听机制配置在META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunListenerioc容器中的 ...
- springcloud Finchley 版本hystrix 和 hystrix Dashboard
hystrix的断路功能 引用上个项目,创建新的model ,cloud-hystrix pom.xml <?xml version="1.0" encoding=" ...
- unity3d入门 Demo 学习记录
闲来学习一下 unity3d 的Demo,记录如下. 官方 Demo,名字为 Roll-A-Ball,如图 场景比较简单,包含地面.玩家精灵.主摄像机.墙壁.可拾取的方块.分数为示 text.平行光源 ...
- [NOIP2019模拟赛]序列(Sequence)
题目大意 有一个序列$A_i$ • 对于 i ≥ 1,如果有$ A_i > 0.A_{i+1}> 0$ 且存在 $A_{i+2}$,那么法老可以令$ Ai$ 和 $A_{i+1}$ 减一, ...
- leetcode-86-分割链表
题目描述: 方法一: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.va ...