對於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 引擎。
參考文件:
