科普 | 编译 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)下载后解压到一个目录下 ...
随机推荐
- 二分查找总结及部分Lintcode题目分析 2
Search in a big sorted array,这个比之前的二分法模板多了一个很不同的特性,就是无法知道一个重要的条件end值,也是题目中强调的重点 The array is so big ...
- H2数据库的基本使用
文章目录 下载jar包 启动服务 下载jar包 下载h2-1.3.176.jar 这个包(部分服务版本不一致,请自行更换版本) 启动服务 从终端定位到刚才jar包下载的位置,比如我这里是Downloa ...
- hdu-4893
http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意: 给定一个数组a,一开始数组里面的元素都是0,现在有三个操作: 操作1:给第k个数字加上d. 操作2 ...
- C++开发系列-C语言的malloc与C++的new分配空间
概述 在软件开发过程中,常常需要动态地分配和撤销存储空间,例如对动态链表中结点的插入与删除.在C语言中是利用库函数malloc和free来分配和撤销内存空间的.C++提供了较简便而功能较强的运算符ne ...
- StringUtils工具
ppublic class StringUtils { private StringUtils() { } /** * 文本左边补零 * * @param maxLength 文本长度 * @para ...
- 2018-8-10-win10-uwp-使用资源在后台创建控件
title author date CreateTime categories win10 uwp 使用资源在后台创建控件 lindexi 2018-08-10 19:17:19 +0800 2018 ...
- 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法。元素、属性和文本的树结构(节点树)。
认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...
- 算法系列:Shell 排序
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- soj97 旅行
题意:给你一棵n个点的树.m个操作,op 1:在点i上建立银行.op 2:询问从点x开始可以经过至少一个银行走到的点中编号第二大的点. n,m<=1e5. 标程: #include<bit ...
- idea-----使用相关快捷键
1.快速格式化代码:Ctrl+Alt+L 2.快速引入get.set方法:ALT+insert 3.win 10锁屏:win+L 4.查找接口实现类的快捷键:ctrl+alt+b