先說說爲什麼我要幹這個事吧。看起來內核跟我們日常開發沒什麼關係,但是在做性能優化的時候,性能分析可能會需要深入到彙編指令的層面;可以利用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目錄下,就可以開始用了。文章開頭就寫了一個簡單的調用方法。