科普 | 編譯 V8 源碼


2017-02-13 justjavac 象塵說

對於JavaScript程序員來說,可以瞧一瞧justjavac給大家寫的科普類讀物,V8引擎的分析,“也許你不懂C++”,但是你可以了解一下,總是好的。

 

本系列得到了justjavac的授權,同意我在公眾號中轉載,來源於知乎專欄:https://zhuanlan.zhihu.com/v8core

編譯 V8 源碼

 


 

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

參考文件:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM