WebKit 是世界公認的優秀的開源瀏覽器核心。具有渲染速度快,靈活可定制,多平台支援等優點。國內知名的Maxthon 和UCWeb 都將WebKit選用瀏覽器核心。谷歌公司和蘋果也分別在WebKit 基礎上只做了Chrome 瀏覽器和Safari 瀏覽器。
雖然WebKit 已經越來越多的被廣大程式設計師接受,但其編譯過程卻非常痛苦。下面將我編譯WebKit 程式碼的經驗與大家分享。
1) 取得WebKit 原始碼
WebKit 原始碼是使用Subversion 工具做管理的。因此,只要具備Subversion 用戶端就可以從http://svn.webkit.org/repository/webkit/trunk取得原始碼。但是,這並不是最好的方式。在實際編譯過程中透過svn拿下來的程式碼有可能為你帶來許多的煩惱。因此,我推薦從WebKit的Nightly build 直接下載WebKit 原始碼壓縮包。具體地址是: http://nightly.webkit.org/builds/trunk/src/1像WebKit 這麼大的專案仍然遵循Daily Build 的原則,真是挺了不起的。
WebKit 原始碼在本文寫作時,版本是r52221 但我最近兩天都沒有將該版本的WebKit編譯成功。原因是,使用Visual Studio 2005 開啟專案幾分鐘後,Visual Studio 2005 會停止回應。我測試過r50006版,也就是5字頭的第一版,就沒有這個問題。版本號越大說明原始碼越新,反之就越古老。
2) WebKit 編譯環境的搭建
WebKit 網站上有一篇文章說明了一下WebKit 在Windows 平台下的環境建構:http://webkit.org/building/tools.html 但這篇文章寫得也太簡單了。這也是WebKit 最蹂躪人的地方。在我經過十幾次失敗之後,我終於找到了通往目標的捷徑。
硬體方面
記憶體最好找一台記憶體大於2G的計算機。 因為WebKit 專案太過龐大了,會產生數以百計的.obj 檔案。在執行連結操作時,記憶體會需要大概1.6G記憶體。如果你機器安裝的又是Vista 之類的吃內存作業系統,那就等著看link.exe 告訴你"Out of memory"吧。 我安裝了Vista的機器的記憶體只有區區2G,連結了數次都沒有成功,最後逼得我在安全模式下(連網卡驅動都沒敢載入)編譯,終於在記憶體峰值到達1.99G 時涉險過關,真是太刺激了,太刺激了。
硬碟當然越大越好,因為WebKit 原始碼展開後需要佔用160M-190M磁碟空間,編譯過程產生的中間檔案需要大約4G的儲存空間。外加上Cygwin Visual Studio 等佔據的磁碟空間,這些還是挺大的。 最重要的是系統盤最好預留4G左右的空間。
其實使用多核心的CPU對編譯WebKit 也是有好處的,編譯腳本可以同時並行的呼叫cl.exe 編譯WebKit,大大縮短了編譯時間。
軟體方面
首先你要安裝Visual Studio 2005 SP1 如果是Vista 或Window 7 需要安裝SP1 update for vista。 Visual C++ 2005 Express 也是可以編譯WebKit的,但是需要單獨安裝Platform SDK。 實作證明WebKit 在Platform 5.0 6.0 上都可以編譯通過。
這裡也會引申一個問題,如果你的機器上已經安裝了Visual Studio 2008 怎麼辦? 別擔心,Visual Studio 2005 和Visual Studio 2008 是可以共存的,Visual Studio 2005 可以在Viusal Studio 2008 之後安裝。但是,要注意的是,當Visual Studio 2005 在Visual Studio 2008 之後安裝後,WebKit 的perl腳本只會到「系統磁碟Program FilesMicrosoft Visual Studio」 下面去找VC 的bin資料夾(也就是cl .exe 所在資料夾)。如果你安裝的VS 2005 不在系統盤,需要將VC的bin資料夾拷貝到系統盤的那個目錄中去。
在安裝完Visual Studio 2005 之後,需要安裝另一個大塊頭Cygwin。 Cygwin其實是在Windows 上模擬了一個Unix 環境。 安裝Cygwin最好不要直接使用Cygwin網站上給的setup.exe 檔案。而是使用WebKit.org網站上給的cygwin-downloader 工具。 cygwin-downloader 會下載編譯WebKit 所需的101 個工具(現在可能又多了幾個),諸如perl、zlib、bash 等等。待下載完成後,再執行Cygwin的安裝工具Setup.exe 選擇從本機目錄安裝。請注意! Cygwin 要安裝到系統盤分割區下,如C盤是系統盤,那麼Cygwin就必須安裝在C:cygwin 下。安裝完成後,大約會佔據幾百兆的空間。
下一步,仍需要安裝的是QuickTime SDK。 據有人說可以不安裝這個QuickTime SDK,但我發現如果不安裝的話WebKit 解決方案中的QTMovie 專案一定是無法編譯成功的。 QuickTime 一定要安裝在系統碟:Program FilesQucikTime SDK 下面,千萬別改動安裝路徑。
最後,在解壓縮WebKit 原始碼檔案之後,還需要到webKit.org 網站下載WebKitSupportLibrary.zip 文件,這個檔案是一些第三方函式庫在Windows 平台上預先編譯好的版本。供WebKit 連結時使用。下載後,zip檔案無須解壓縮,直接放在WebKit的根目錄下即可。
編譯步驟
1) 設定環境變數。將WEBKITLIBRARIESDIR設定為WebKit 原始碼目錄WebKitLibrarieswin 路徑; 將WEBKITOUTPUTDIR 設為你打算要存放obj和dll 的輸出資料夾,當然這個資料夾所在的分割區至少要有4G的剩餘空間。
2) 執行更新腳本。 請在桌面上執行cygwin 的命令列窗口,然後透過CD 指令(和DOS的CD指令一樣) 跳轉至WebKit 原始碼目錄WebKitToolsScripts 資料夾下。例如,我的WebKit 原始碼放在F盤,就是cd F:/WebKit/WebKitTools/Scripts/ 運行該目錄下的Update-WebKit 和Update-WebKit-Support-libs 兩個腳本。 很多部落格都沒有提到這個步驟,實際上這個步驟是能否成功編譯的關鍵。
3) 成功執行完上面兩個步驟後,就可以使用Visual Studio 2005 開啟位於WebKit 原始碼目錄WebKitwinWebKit.vcproj 目錄下的WebKit.sln 解決方案了。這個sln預設帶有六個編譯配置Debug、Debug_all、Debug_Cairo、Release、Debug_Internal、Release_Cairo。用Release 編譯出來的就是用蘋果自己的渲染引擎的版本,和Safari 的一致。 用Release_Cairo 編譯出來的是支援Cairo渲染引擎的版本,這個版本可以脫離蘋果的環境單獨跑,但同時也無法放到蘋果的Safari 環境中運作。若要監測編譯是否成功,可使用WinLauncher.exe 這個應用程式載入WebKit 進行測試。
先寫到這裡,以後想起什麼來再補充吧。