Windows 10環境下V8引擎的編譯方法

先說說爲什麼我要幹這個事吧。看起來內核跟我們日常開發沒什麼關係,但是在做性能優化的時候,性能分析可能會需要深入到彙編指令的層面;可以利用d8做到這一點。比如:

./out/x64.debug/d8  --print-opt-code test.js

再扯下去就扯遠了,這次主要是記錄一下編譯方法。


先說明一下環境,我用的是Windows 10,然後電腦上已經有了之前學C++的時候裝的VS 2017 Community,也有一個anaconda的Python 3.7,以及很基礎的Git。其中VS還是很重要的,在Windows下編譯基於C++的一些東西還是挺有用的;Python 3.7是不行的,需要倒回去裝一個Python 2.7(然而今年年初的時候已經停止維護了,sigh),下面會說到。

首先的首先,建議設置一個代理,這樣能快一點。設置方法可以參考之前的一篇文章,不過代理需要自己提供。

首先按照官方的說法,把倉庫clone下來:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools

然後把clone下來的倉庫的路徑加入環境變量。比如我clone到了C盤根目錄,那就往環境變量里加一個C:\depot_tools。爲什麼要這麼做,因爲接下來需要執行一些命令,用環境變量比較方便。或者你願意的話,也可以直接到clone下來的倉庫裏去執行。

然後在命令行設置一個環境變量(因爲我已經有VS了,沒有的話建議去下一個)。有人說在環境變量裏設置,我覺得沒必要,反正就用一次,到時候還得清理,多麻煩。直接在命令行弄一個就好了:

set DEPOT_TOOLS_WIN_TOOLCHAIN = 0

因爲我電腦沒分區,只有一個C盤,所以VS默認是在C盤的。看到網上有人說如果VS不是裝在C盤的,可能需要一些額外的設置。在這裏放一下,我沒有驗證,僅供參考:

set GYP_MSVS_OVERRIDE_PATH = <path>
set GYP_MSVS_VERSION = 2017

然後執行這兩個命令(沒有代理可能會卡住):

fetch v8
gclient sync

在這裏可能會很久。fetch是把代碼拉下來,sync是下載需要的環境。如果之前沒設置DEPOT_TOOLS_WIN_TOOLCHAIN,在這裏會報錯。

同時,它可能還會有這樣一個報錯:

You must install the "Debugging Tools for Windows" feature from the Windows 10 SDK.

按理來說,Windows SDK是跟VS一起安裝的,並沒有給我配置的機會。那這個問題怎麼解決呢?還是有辦法的。打開“卸載或更改程序”,在裏面找到“Windows Software Development Kit”,然後點擊“修改”,然後選擇“Change”,在裏面把“Debugging Tools for Windows”打上勾,然後點擊“change”,就好了。如果覺得有點抽象,可以參考Stack Overflow上的這個回答,裏面有圖。

然後就是激動人心的編譯了:

cd v8
python tools/dev/v8gen.py x64.debug
ninja -C out.gn/x64.debug d8

在這個過程中,如果用的是Python 3,就會報錯……原因很簡單,他依賴於Python 2的一些庫,比如urllib2。所以要是沒裝2.7,趕緊裝一個吧……

然後就是CPU 100%的編譯過程,大概會持續半小時到一小時。

然後?然後沒然後了。編譯好的d8在out目錄下,就可以開始用了。文章開頭就寫了一個簡單的調用方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章