2011年8月10日 星期三

Building Webkit on Windows


圖片來源:http://www.webkit.org/


多年以前,總覺得 FreeBSD 系統的 make buildworld 很威,在 P-200 的電腦等級,編 FreeBSD 4 系列就花了 6 小時。而後隨著硬體的升級,並且在 VirtualBox 的環境中,大概都不用 30 分鐘了吧。一直以為這樣的等待只會出現在編譯 OS/Kernel 方面,如今在 Windows XP 上編譯 Webkit source code,沒想到浩浩蕩蕩地也等超過 30 分鐘 XD 看來我對 Windows 的軟體編譯經驗太弱了,殊不知很多大型程式碼,編譯時間也是很久的。


環境:


Windows XP with SP3
Visual Studio 2005 Express
Microsoft Platform SDK for Windows Server 2003 R2
Cygwin


Webkit 版本:


$ time svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit
...
Checked out revision 92660.

real    79m43.055s
user    1m24.942s
sys     5m40.208s


步驟:


$ ~/Webkit
$ get http://developer.apple.com/opensource/internet/webkit_sptlib_agree.html
$ time ./Tools/Scripts/update-webkit
Updating OpenSource
...

real    6m53.662s
user    0m7.613s
sys     0m35.927s



$ time ./Tools/Scripts/build-webkit --debug
Installing WebKitSupportLibrary...
The WebKitSupportLibrary has been sucessfully installed in /home/user/WebKit/WebKitLibraries/win
Building results into: /home/user/WebKit/WebKitBuild
WEBKITOUTPUTDIR is set to: C:\cygwin\home\user\WebKit\WebKitBuild
WEBKITLIBRARIESDIR is set to: C:\cygwin\home\user\WebKit\WebKitLibraries\win
/cygdrive/c/Program Files/Microsoft Visual Studio 8/Common7/IDE/VCExpress.exe win\WebKit.vcproj\WebKit.sln /build Debug


錯誤訊息:


===== BUILD FAILED ======
Please ensure you have run Tools/Scripts/update-webkit to install dependencies.
You can view build errors by checking the BuildLog.htm files located at:
/home/user/WebKit/WebKitBuild/obj/<project>/<config>.
接著可在 ~/WebKit/WebKitBuild/Debug/buildfailed 看到哪個項目編譯有問題,再切換到該目錄裡尋找 BuildLog.htm 查看
例如 buildfailed 顯示 XXWebCoreXX,那就到 ~/WebKit/WebKitBuild/Debug/obj/WebCore/BuildLog.htm 查看即可。


相關筆記:


請先確認官方網站 BuildBot: WebKit,在這邊可以得知各個平台目前的狀況,有時編譯失敗不是自己環境的問題。


..\platform\DefaultLocalizationStrategy.cpp(345) : error C2001: 常數中包含新行字元
..\platform\DefaultLocalizationStrategy.cpp(347) : error C2001: 常數中包含新行字元
..\platform\DefaultLocalizationStrategy.cpp(345) : fatal error C1057: 巨集展開中未預期的檔案結尾


編輯 C:\cygwin\home\user\WebKit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp
在 line 345 附近可以看到有使用全形“的地方,把他改成 \" 即可( "Look Up \"%@\"" 和 "Look Up \"<selection>\"")


error C2220: 將警告視為錯誤處理 - 沒有產生 'object' 檔案
warning C4819: 檔案含有無法在目前字碼頁 (950) 中表示的字元。請以 Unicode 格式儲存檔案以防止資料遺失


使用 VC++ 2005 Express 打開檔案後,再存檔一次即可,不需更動原始碼,即可解決問題。此 error C2220 問題可以參考 http://lists.macosforge.org/pipermail/webkit-help/2010-March/000860.html


以下是更動過得檔案
C:\cygwin\home\user\WebKit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp
c:\cygwin\home\user\WebKit\Source\WebCore\css\CSSWrapShapes.h
C:\cygwin\home\user\WebKit\Source\WebCore\css\CSSWrapShapes.cpp
C:\cygwin\home\user\WebKit\Source\WebCore\rendering\RenderFlowThread.cpp
C:\cygwin\home\user\WebKit\Source\WebCore\rendering\RenderRegion.cpp
C:\cygwin\home\user\WebKit\WebKitLibraries\win\Include\ConditionalMacros.h


error PRJ0003 : 繁衍 (Spawn) 'midl.exe' 發生錯誤


將 C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin 加入 PATH 環境變數


LINK : fatal error LNK1104: 無法開啟檔案 'WebCoreTestSupport.lib'


原先是 DumpRenderTree 沒編過,而後才想起來可以找一下 WebCoreTestSupport 的狀態,在 WebKitBuild\###\obj\WebCoreTestSupport\BuildLog.htm,所以還是上面的老問題,把 WrapShapes.h 存檔一下就行啦


fatal error C1083: 無法開啟包含檔案: 'windows.h': No such file or directory


把 VC++ 2005 Express 打開,在 [工具] -> [選項] -> [專案與方案] -> [VC++ 目錄],將 "可執行檔"、"Include 檔案" 和 "程式庫檔",分別新增 C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2 對應的 Bin、Include 和 Lib 目錄


請把 How to: Use Visual C++ Express Edition with the Microsoft Platform SDK http://msdn.microsoft.com/en-us/library/ms235626(VS.80).aspx 做完。


至於執行編譯出來的 Webkit.exe 時,會碰到找不到相關的 dll 檔案,可以在下列位置確認一下:



沒有留言:

張貼留言