webkit在win32下的編譯規則(六)

WebCore Folder下面的有3個工程:QTMovieWin,WebCore,WebCoreGenerated,編譯的順序是:WebCoreGenerated-》QTMovieWin-》QTMovieWin。

首先來看WebCoreGenerated這個工程,這個工程的NMake Build Comand Line如下:

%SystemDrive%/cygwin/bin/which.exe bash
if errorlevel 1 set PATH=%SystemDrive%/cygwin/bin;%PATH%
cmd /c
if exist "$(ConfigurationBuildDir)/buildfailed" grep XX$(ProjectName)XX "$(ConfigurationBuildDir)/buildfailed"
if errorlevel 1 exit 1
echo XX$(ProjectName)XX > "$(ConfigurationBuildDir)/buildfailed"

set CONFIGURATIONBUILDDIR=$(ConfigurationBuildDir)
bash build-generated-files.sh "$(ConfigurationBuildDir)" "$(WebKitLibrariesDir)" "$(WebKitVSPropsRedirectionDir)../../../WebKitLibraries/win" cairo
bash migrate-scripts.sh "$(ConfigurationBuildDir)/obj/WebCore/scripts"
cmd /C copyForwardingHeaders.cmd cairo curl
cmd /C copyInspectorFiles.cmd

if exist "$(ConfigurationBuildDir)/buildfailed" del "$(ConfigurationBuildDir)/buildfailed"

比較重要的是下面四句:

bash build-generated-files.sh "$(ConfigurationBuildDir)" "$(WebKitLibrariesDir)" "$(WebKitVSPropsRedirectionDir)../../../WebKitLibraries/win" cairo
bash migrate-scripts.sh "$(ConfigurationBuildDir)/obj/WebCore/scripts"
cmd /C copyForwardingHeaders.cmd cairo curl
cmd /C copyInspectorFiles.cmd

首先來看build-generated-files.sh

build-generated-files.sh

這個腳本比較重要的是倒數兩句。倒數第二句將vsprops裏面的值轉換爲FEATURE_DEFINES這個環境變量。倒數第一句調用make來編譯$WebCore/DerivedSources.make (D:/tools/cygwin/home/xufan/WebKit/Source/WebCore/DerivedSources.make)這個文件,-j選項同時進行編譯的任務數(多核很有優勢)。DerivedSources.make的文件內容如下:

DerivedSources.make

VPATH這個變量定義了Make在哪裏尋找文件,使用VPATH有一個隱患: VPATH在每個目錄中搜索所有的source文件,如果一個相同的文件名出現在不同的目錄中, VPATH將第一個搜索到的文件作爲結果,使用vpath就比VPATH更靈活些。不夠webkit暫時沒出這個問題,所以VPATH已經夠用。後面很多規則沒有指定路徑,靠的就是這個VPATH,將路徑展開交給了make工具。

DOM_CLASSES定義了一大堆要根據IDL文件生成的h和cpp文件列表,大概有450個,生成的文件在D:/tools/cygwin/home/xufan/WebKit/WebKitBuild/Debug_Cairo_CFLite/obj/WebCore/DerivedSources目錄下。

JS_DOM_HEADERS將所有的DOM_CLASSES值加了JS前綴,並去除了其中的JSMediaQueryListListener.h JSEventListener.h JSEventTarget.h這幾個文件。

WEB_DOM_HEADERS在編譯選項中包括BUILDING_WX時,將所有的DOM_CLASSES值加了WebDOM前綴,並去除了其中的WebDOMXSLTProcessor.h WebDOMEventTarget.h。在cairo win32編譯環境下,這個變量爲空。

makefile的入口是all這條規則,all依賴於$(JS_DOM_HEADERS),$(WEB_DOM_HEADERS),JSJavaScriptCallFrame.h,CSSGrammar.cpp,CSSPropertyNames.h,CSSValueKeywords.h,ColorData.cpp,DocTypeStrings.cpp,HTMLElementFactory.cpp,HTMLEntityTable.cpp,HTMLNames.cpp,WMLElementFactory.cpp,WMLNames.cpp,JSSVGElementWrapperFactory.cpp,SVGElementFactory.cpp,SVGNames.cpp,UserAgentStyleSheets.h,XLinkNames.cpp,XMLNSNames.cpp,XMLNames.cpp,MathMLElementFactory.cpp,MathMLNames.cpp,XPathGrammar.cpp,tokenizer.cpp,HeaderDetection.h,下面就介紹makefile如何對這些文件進行處理。

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