本文共 26380 字,大约阅读时间需要 87 分钟。
首先来看WTF这个project,这个project的Pre-build event如下:
1: REM Do not edit from the Visual Studio IDE! Customize via a $(ProjectName)PreBuild.cmd file.
2: if not exist "$(ProjectDir)$(ProjectName)PreBuild.cmd" exit /b
3:
4: set CONFIGURATIONBUILDDIR=$(ConfigurationBuildDir)
5: set CONFIGURATIONNAME=$(ConfigurationName)
6: set INPUTDIR=$(InputDir)
7: set INPUTFILENAME=$(InputFileName)
8: set INPUTPATH=$(InputPath)
9: set INTDIR=$(IntDir)
10: set LIBRARYCONFIGSUFFIX=$(LibraryConfigSuffix)
11: set OUTDIR=$(OutDir)
12: set PLATFORMNAME=$(PlatformName)
13: set PROJECTDIR=$(ProjectDir)
14: set PROJECTFILENAME=$(ProjectFileName)
15: set PROJECTNAME=$(ProjectName)
16: set PROJECTPATH=$(ProjectPath)
17: set SOLUTIONDIR=$(SolutionDir)
18: set SOLUTIONFILENAME=$(SolutionFileName)
19: set SOLUTIONNAME=$(SolutionName)
20: set SOLUTIONPATH=$(SolutionPath)
21: set TARGETDIR=$(TargetDir)
22: set TARGETEXT=$(TargetExt)
23: set TARGETFILENAME=$(TargetFileName)
24: set TARGETPATH=$(TargetPath)
25: set WEBKITCONFIGSUFFIX=$(WebKitConfigSuffix)
26: set WEBKITDLLCONFIGSUFFIX=$(WebKitDLLConfigSuffix)
27:
28: REM If any of the above variables didn't exist previously and
29: REM were set to an empty string, set will set the errorlevel to 1,
30: REM which will cause the project-specific script to think the build
31: REM has failed. This cmd /c call will clear the errorlevel.
32: cmd /c
33:
34: "$(ProjectDir)$(ProjectName)PreBuild.cmd"
这些脚本首先利用vs自带的一些内置变量来设置环境变量,然后调用"$(ProjectDir)$(ProjectName)PreBuild.cmd"这个脚本,展开后的路径是D:/tools/cygwin/home/xufan/WebKit/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd。从上面的28-31行可以看出,cmd /c的主要作用是为了清除errorlevel。JavaScriptCorePreBuild.cmd这个脚本的内容如下:
1: %SystemDrive%/cygwin/bin/which.exe bash
2: if errorlevel 1 set PATH=%SystemDrive%/cygwin/bin;%PATH%
3: cmd /c
4: if exist "%CONFIGURATIONBUILDDIR%/buildfailed" grep XX%PROJECTNAME%XX "%CONFIGURATIONBUILDDIR%/buildfailed"
5: if errorlevel 1 exit 1
6: echo XX%PROJECTNAME%XX > "%CONFIGURATIONBUILDDIR%/buildfailed"
7:
8: bash "%WEBKITLIBRARIESDIR%/tools/scripts/auto-version.sh" "%INTDIR%"
JavaScriptCorePreBuild.cmd首先检查前面的编译有没有问题,如果没有问题,就会调用D:/tools/cygwin/home/xufan/WebKit/WebKitLibraries/win/tools/scripts/auto-version.sh这个perl脚本,内容如下:
1: #!/usr/bin/bash
2:
3: # Copyright (C) 2007, 2009 Apple Inc. All rights reserved.
4: #
5: # Redistribution and use in source and binary forms, with or without
6: # modification, are permitted provided that the following conditions
7: # are met:
8: # 1. Redistributions of source code must retain the above copyright
9: # notice, this list of conditions and the following disclaimer.
10: # 2. Redistributions in binary form must reproduce the above copyright
11: # notice, this list of conditions and the following disclaimer in the
12: # documentation and/or other materials provided with the distribution.
13: #
14: # THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15: # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16: # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17: # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18: # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19: # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20: # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21: # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22: # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23: # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24: # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25:
26:
27: # Trim any trailing /r or /n from the given variable.
28: chomp()
29: {
30: local old_value=$(eval echo "/$$1");
31: local value=$(echo "$old_value" | sed 's/[/r/n]*$//')
32: eval $1=/$value;
33: }
34:
35: if [[ -n "$WEBKITLIBRARIESDIR" ]]; then
36: FALLBACK_VERSION_PATH=`cygpath -u "$WEBKITLIBRARIESDIR//tools//scripts//VERSION"`
37: FALLBACK_VERSION=$(cat "$FALLBACK_VERSION_PATH");
38:
39: COPYRIGHT_END_YEAR_PATH=`cygpath -u "$WEBKITLIBRARIESDIR//tools//scripts//COPYRIGHT-END-YEAR"`
40: COPYRIGHT_END_YEAR=$(cat "$COPYRIGHT_END_YEAR_PATH");
41: chomp COPYRIGHT_END_YEAR
42: fi
43:
44: OUTPUT_FILE=$(cygpath -u "$1")/include/autoversion.h
45: mkdir -p "$(dirname "$OUTPUT_FILE")"
46:
47: # Take the initial version number from RC_PROJECTSOURCEVERSION if it
48: # exists, otherwise fall back to the version number stored in the source.
49: ENVIRONMENT_VERSION="$RC_PROJECTSOURCEVERSION";
50: PROPOSED_VERSION=${ENVIRONMENT_VERSION:-$FALLBACK_VERSION}
51: chomp PROPOSED_VERSION
52:
53: # Split out the three components of the dotted version number. We pad
54: # the input with trailing dots to handle the case where the input version
55: # has fewer components than we expect.
56: BUILD_MAJOR_VERSION=$(echo "$PROPOSED_VERSION.." | cut -d '.' -f 1)
57: BUILD_MINOR_VERSION=$(echo "$PROPOSED_VERSION.." | cut -d '.' -f 2)
58: BUILD_TINY_VERSION=$(echo "$PROPOSED_VERSION.." | cut -d '.' -f 3)
59:
60: # Cut the major component down to three characters by dropping any
61: # extra leading digits, then adjust the major version portion of the
62: # version string to match.
63: CHARACTERS_TO_DROP=$(( ${#BUILD_MAJOR_VERSION} > 3 ? ${#BUILD_MAJOR_VERSION} - 3 : 0 ))
64: BUILD_MAJOR_VERSION=${BUILD_MAJOR_VERSION:$CHARACTERS_TO_DROP}
65: PROPOSED_VERSION=${PROPOSED_VERSION:$CHARACTERS_TO_DROP}
66:
67: # Have the minor and tiny components default to zero if not present.
68: BUILD_MINOR_VERSION=${BUILD_MINOR_VERSION:-0}
69: BUILD_TINY_VERSION=${BUILD_TINY_VERSION:-0}
70:
71: # Split the first component further by using the first digit for the
72: # major version and the remaining two characters as the minor version.
73: # The minor version is shifted down to the tiny version, with the tiny
74: # version becoming the variant version.
75: MAJOR_VERSION=${BUILD_MAJOR_VERSION:0:1}
76: MINOR_VERSION=${BUILD_MAJOR_VERSION:1}
77: TINY_VERSION=${BUILD_MINOR_VERSION}
78: VARIANT_VERSION=${BUILD_TINY_VERSION}
79:
80: VERSION_TEXT=${PROPOSED_VERSION}
81: VERSION_TEXT_SHORT=${VERSION_TEXT}
82:
83: if [ -z ${ENVIRONMENT_VERSION} ]; then
84: # If we didn't pull the version number from the environment then we're doing
85: # an engineering build and we'll stamp the build with some more information.
86:
87: BUILD_DATE=$(date)
88: SVN_REVISION=$(svn info | grep '^Revision' | sed 's/^Revision: //')
89:
90: chomp BUILD_DATE
91: chomp SVN_REVISION
92:
93: VERSION_TEXT_SHORT="${VERSION_TEXT_SHORT}+"
94: VERSION_TEXT="${VERSION_TEXT_SHORT} ${USER} - ${BUILD_DATE} - r${SVN_REVISION}"
95: fi
96:
97: cat > "$OUTPUT_FILE" < 98: #define __VERSION_TEXT__ "${VERSION_TEXT}" 99: #define __BUILD_NUMBER__ "${VERSION_TEXT}" 100: #define __BUILD_NUMBER_SHORT__ "${VERSION_TEXT_SHORT}" 101: #define __VERSION_MAJOR__ ${MAJOR_VERSION} 102: #define __VERSION_MINOR__ ${MINOR_VERSION} 103: #define __VERSION_TINY__ ${TINY_VERSION} 104: #define __VERSION_BUILD__ ${VARIANT_VERSION} 105: #define __BUILD_NUMBER_MAJOR__ ${BUILD_MAJOR_VERSION} 106: #define __BUILD_NUMBER_MINOR__ ${BUILD_MINOR_VERSION} 107: #define __BUILD_NUMBER_VARIANT__ ${BUILD_TINY_VERSION} 108: #define __SVN_REVISION__ ${SVN_REVISION} 109: EOF 110: 111: if [[ -n "${COPYRIGHT_END_YEAR}" ]]; then 112: cat >> "$OUTPUT_FILE" < 113: #define __COPYRIGHT_YEAR_END_TEXT__ "${COPYRIGHT_END_YEAR}" 114: EOF 115: fi
auto-version.sh这个脚本主要是根据D:/tools/cygwin/home/xufan/WebKit/WebKitLibraries/win/tools/scripts/VERSION,D:/tools/cygwin/home/xufan/WebKit/WebKitLibraries/win/tools/scripts/COPYRIGHT-END-YEAR以及当前时间等生成D:/tools/cygwin/home/xufan/WebKit/WebKitBuild/Debug_Cairo_CFLite/obj/JavaScriptCore/include/autoversion.h这个描述版本信息的头文件,这个头文件在生成后的格式如下:
1: #define __VERSION_TEXT__ "533+ - Mon Jan 31 12:26:06 2011 - r77102"
2: #define __BUILD_NUMBER__ "533+ - Mon Jan 31 12:26:06 2011 - r77102"
3: #define __BUILD_NUMBER_SHORT__ "533+"
4: #define __VERSION_MAJOR__ 5
5: #define __VERSION_MINOR__ 33
6: #define __VERSION_TINY__ 0
7: #define __VERSION_BUILD__ 0
8: #define __BUILD_NUMBER_MAJOR__ 533
9: #define __BUILD_NUMBER_MINOR__ 0
10: #define __BUILD_NUMBER_VARIANT__ 0
11: #define __SVN_REVISION__ 77102
12: #define __COPYRIGHT_YEAR_END_TEXT__ "2011"
这些信息会体现在javascriptcore.dll这个文件的版本信息里面,如下图:
执行完prebuild脚本后,就要开始编译了。wtf这个project有一些属性是从别的vsprops文件集成来的,如下图:
这些vsprops文件包含:
../../../../WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops
../../../../WebKitLibraries/win/tools/vsprops/common.vsprops ../../../../WebKitLibraries/win/tools/vsprops/release.vsprops ../../../../WebKitLibraries/win/tools/vsprops/WinCairo.vsprops ./WTFCommon.vsprops首先看D:/tools/cygwin/home/xufan/WebKit/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops这个文件:
1: xml version="1.0" encoding="Windows-1252"?>
2:
3:
4:
5:
6: ProjectType="Visual C++"
7: Version="8.00"
8: Name="FeatureDefinesCairo"
9: >
10:
11: Name="VCCLCompilerTool"
12: PreprocessorDefinitions="$(ENABLE_3D_CANVAS);$(ENABLE_3D_RENDERING);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_BLOB);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CLIENT_BASED_GEOLOCATION);$(ENABLE_DATABASE);$(ENABLE_DATAGRID);$(ENABLE_DATALIST);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM_STORAGE);$(ENABLE_EVENTSOURCE);$(ENABLE_FILTERS);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GEOLOCATION);$(ENABLE_ICONDATABASE);$(ENABLE_IMAGE_RESIZER);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_SPEECH);$(ENABLE_JAVASCRIPT_DEBUGGER);$(ENABLE_LINK_PREFETCH);$(ENABLE_MATHML);$(ENABLE_METER_TAG);$(ENABLE_NOTIFICATIONS);$(ENABLE_OFFLINE_WEB_APPLICATIONS);$(ENABLE_PROGRESS_TAG);$(ENABLE_REGISTER_PROTOCOL_HANDLER);$(ENABLE_SHARED_WORKERS);$(ENABLE_SVG);$(ENABLE_SVG_ANIMATION);$(ENABLE_SVG_AS_IMAGE);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_FOREIGN_OBJECT);$(ENABLE_SVG_USE);$(ENABLE_VIDEO);$(ENABLE_MEDIA_STATISTICS);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WML);$(ENABLE_WORKERS);$(ENABLE_XHTMLMP);$(ENABLE_XPATH);$(ENABLE_XSLT)"
13: />
14:
15: Name="ENABLE_3D_CANVAS"
16: Value=""
17: PerformEnvironmentSet="true"
18: />
19:
20: Name="ENABLE_3D_RENDERING"
21: Value=""
22: PerformEnvironmentSet="true"
23: />
24:
25: Name="ENABLE_ACCELERATED_2D_CANVAS"
26: Value=""
27: PerformEnvironmentSet="true"
28: />
29:
30: Name="ENABLE_BLOB"
31: Value=""
32: PerformEnvironmentSet="true"
33: />
34:
35: Name="ENABLE_CHANNEL_MESSAGING"
36: Value="ENABLE_CHANNEL_MESSAGING"
37: PerformEnvironmentSet="true"
38: />
39:
40: Name="ENABLE_CLIENT_BASED_GEOLOCATION"
41: Value=""
42: PerformEnvironmentSet="true"
43: />
44:
45: Name="ENABLE_DATABASE"
46: Value="ENABLE_DATABASE"
47: PerformEnvironmentSet="true"
48: />
49:
50: Name="ENABLE_DATAGRID"
51: Value=""
52: PerformEnvironmentSet="true"
53: />
54:
55: Name="ENABLE_DATALIST"
56: Value="ENABLE_DATALIST"
57: PerformEnvironmentSet="true"
58: />
59:
60: Name="ENABLE_DEVICE_ORIENTATION"
61: Value=""
62: PerformEnvironmentSet="true"
63: />
64:
65: Name="ENABLE_DIRECTORY_UPLOAD"
66: Value=""
67: PerformEnvironmentSet="true"
68: />
69:
70: Name="ENABLE_DOM_STORAGE"
71: Value="ENABLE_DOM_STORAGE"
72: PerformEnvironmentSet="true"
73: />
74:
75: Name="ENABLE_EVENTSOURCE"
76: Value="ENABLE_EVENTSOURCE"
77: PerformEnvironmentSet="true"
78: />
79:
80: Name="ENABLE_FILTERS"
81: Value="ENABLE_FILTERS"
82: PerformEnvironmentSet="true"
83: />
84:
85: Name="ENABLE_FILE_SYSTEM"
86: Value=""
87: PerformEnvironmentSet="true"
88: />
89:
90: Name="ENABLE_FULLSCREEN_API"
91: Value=""
92: PerformEnvironmentSet="true"
93: />
94:
95: Name="ENABLE_GEOLOCATION"
96: Value=""
97: PerformEnvironmentSet="true"
98: />
99:
100: Name="ENABLE_ICONDATABASE"
101: Value="ENABLE_ICONDATABASE"
102: PerformEnvironmentSet="true"
103: />
104:
105: Name="ENABLE_IMAGE_RESIZER"
106: Value=""
107: PerformEnvironmentSet="true"
108: />
109:
110: Name="ENABLE_INDEXED_DATABASE"
111: Value=""
112: PerformEnvironmentSet="true"
113: />
114:
115: Name="ENABLE_INPUT_SPEECH"
116: Value=""
117: PerformEnvironmentSet="true"
118: />
119:
120: Name="ENABLE_JAVASCRIPT_DEBUGGER"
121: Value="ENABLE_JAVASCRIPT_DEBUGGER"
122: PerformEnvironmentSet="true"
123: />
124:
125: Name="ENABLE_LINK_PREFETCH"
126: Value=""
127: PerformEnvironmentSet="true"
128: />
129:
130: Name="ENABLE_MATHML"
131: Value=""
132: PerformEnvironmentSet="true"
133: />
134:
135: Name="ENABLE_METER_TAG"
136: Value="ENABLE_METER_TAG"
137: PerformEnvironmentSet="true"
138: />
139:
140: Name="ENABLE_NOTIFICATIONS"
141: Value=""
142: PerformEnvironmentSet="true"
143: />
144:
145: Name="ENABLE_OFFLINE_WEB_APPLICATIONS"
146: Value="ENABLE_OFFLINE_WEB_APPLICATIONS"
147: PerformEnvironmentSet="true"
148: />
149:
150: Name="ENABLE_PROGRESS_TAG"
151: Value=""
152: PerformEnvironmentSet="true"
153: />
154:
155: Name="ENABLE_REGISTER_PROTOCOL_HANDLER"
156: Value=""
157: PerformEnvironmentSet="true"
158: />
159:
160: Name="ENABLE_SHARED_WORKERS"
161: Value="ENABLE_SHARED_WORKERS"
162: PerformEnvironmentSet="true"
163: />
164:
165: Name="ENABLE_SVG"
166: Value="ENABLE_SVG"
167: PerformEnvironmentSet="true"
168: />
169:
170: Name="ENABLE_SVG_ANIMATION"
171: Value="ENABLE_SVG_ANIMATION"
172: PerformEnvironmentSet="true"
173: />
174:
175: Name="ENABLE_SVG_AS_IMAGE"
176: Value="ENABLE_SVG_AS_IMAGE"
177: PerformEnvironmentSet="true"
178: />
179:
180: Name="ENABLE_SVG_DOM_OBJC_BINDINGS"
181: Value=""
182: PerformEnvironmentSet="true"
183: />
184:
185: Name="ENABLE_SVG_FONTS"
186: Value="ENABLE_SVG_FONTS"
187: PerformEnvironmentSet="true"
188: />
189:
190: Name="ENABLE_SVG_FOREIGN_OBJECT"
191: Value="ENABLE_SVG_FOREIGN_OBJECT"
192: PerformEnvironmentSet="true"
193: />
194:
195: Name="ENABLE_SVG_USE"
196: Value="ENABLE_SVG_USE"
197: PerformEnvironmentSet="true"
198: />
199:
200: Name="ENABLE_VIDEO"
201: Value=""
202: PerformEnvironmentSet="true"
203: />
204:
205: Name="ENABLE_MEDIA_STATISTICS"
206: Value=""
207: PerformEnvironmentSet="true"
208: />
209:
210: Name="ENABLE_WEB_AUDIO"
211: Value=""
212: PerformEnvironmentSet="true"
213: />
214:
215: Name="ENABLE_WEB_SOCKETS"
216: Value="ENABLE_WEB_SOCKETS"
217: PerformEnvironmentSet="true"
218: />
219:
220: Name="ENABLE_WEB_TIMING"
221: Value=""
222: PerformEnvironmentSet="true"
223: />
224:
225: Name="ENABLE_WML"
226: Value=""
227: PerformEnvironmentSet="true"
228: />
229:
230: Name="ENABLE_WORKERS"
231: Value="ENABLE_WORKERS"
232: PerformEnvironmentSet="true"
233: />
234:
235: Name="ENABLE_XHTMLMP"
236: Value=""
237: PerformEnvironmentSet="true"
238: />
239:
240: Name="ENABLE_XPATH"
241: Value="ENABLE_XPATH"
242: PerformEnvironmentSet="true"
243: />
244:
245: Name="ENABLE_XSLT"
246: Value="ENABLE_XSLT"
247: PerformEnvironmentSet="true"
248: />
249: VisualStudioPropertySheet>
FeatureDefinesCairo.vsprops这个文件主要是用来定义一些宏,这些宏用来开启和关闭webkit的特性,例如3D_CANVAS,BLOB,DATABASE,DATAGRID,SVG等。如果要开启对应的属性,只需要修改UserMacro里面的Value属性即可。
D:/tools/cygwin/home/xufan/WebKit/WebKitLibraries/win/tools/vsprops/common.vsprops这个文件的内容如下:
1: xml version="1.0" encoding="Windows-1252"?>
2:
3: ProjectType="Visual C++"
4: Version="8.00"
5: Name="common"
6: OutputDirectory="$(ConfigurationBuildDir)/bin"
7: IntermediateDirectory="$(ConfigurationBuildDir)/obj/$(ProjectName)"
8: >
9:
10: Name="VCCLCompilerTool"
11: AdditionalOptions="/GS"
12: PreprocessorDefinitions="WIN32;_WINDOWS;WINVER=0x502;_WIN32_WINNT=0x502;_WIN32_IE=0x603;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1;__PRODUCTION__=0$(ProductionBuild);_HAS_EXCEPTIONS=0;BUILDING_$(ProjectName)"
13: ExceptionHandling="0"
14: RuntimeTypeInfo="false"
15: WarningLevel="4"
16: WarnAsError="true"
17: DebugInformationFormat="3"
18: DisableSpecificWarnings="4018;4068;4099;4100;4127;4138;4180;4189;4201;4244;4251;4275;4288;4291;4305;4344;4355;4389;4503;4505;4510;4512;4610;4706;4800;4951;4952;4996;6011;6031;6211;6246;6255;6387"
19: />
20:
21: Name="VCLibrarianTool"
22: AdditionalOptions="/ignore:4221"
23: OutputFile="$(OutDir)/$(ProjectName)$(WebKitConfigSuffix).lib"
24: />
25:
26: Name="VCLinkerTool"
27: LinkLibraryDependencies="false"
28: AdditionalOptions="/SAFESEH /FIXED:NO /dynamicbase /ignore:4221"
29: OutputFile="$(OutDir)/$(ProjectName)$(WebKitConfigSuffix).exe"
30: AdditionalLibraryDirectories=""$(ConfigurationBuildDir)/lib";"$(WebKitLibrariesDir)/lib""
31: GenerateDebugInformation="true"
32: SubSystem="2"
33: ImportLibrary="$(ConfigurationBuildDir)/lib/$(TargetName).lib"
34: TargetMachine="1"
35: />
36:
37: Name="VCMIDLTool"
38: PreprocessorDefinitions="__PRODUCTION__=0$(ProductionBuild)"
39: WarnAsError="true"
40: HeaderFileName="$(OutDir)/$(InputName).h"
41: />
42:
43: Name="VCPostBuildEventTool"
44: CommandLine="REM Do not edit from the Visual Studio IDE! Customize via a $(ProjectName)PostBuild.cmd fileif not exist "$(ProjectDir)$(ProjectName)PostBuild.cmd" exit /bset CONFIGURATIONBUILDDIR=$(ConfigurationBuildDir)set CONFIGURATIONNAME=$(ConfigurationName)set INPUTDIR=$(InputDir)set INPUTFILENAME=$(InputFileName)set INPUTPATH=$(InputPath)set INTDIR=$(IntDir)set LIBRARYCONFIGSUFFIX=$(LibraryConfigSuffix)set OUTDIR=$(OutDir)set PLATFORMNAME=$(PlatformName)set PROJECTDIR=$(ProjectDir)set PROJECTFILENAME=$(ProjectFileName)set PROJECTNAME=$(ProjectName)set PROJECTPATH=$(ProjectPath)set SOLUTIONDIR=$(SolutionDir)set SOLUTIONFILENAME=$(SolutionFileName)set SOLUTIONNAME=$(SolutionName)set SOLUTIONPATH=$(SolutionPath)set TARGETDIR=$(TargetDir)set TARGETEXT=$(TargetExt)set TARGETFILENAME=$(TargetFileName)set TARGETPATH=$(TargetPath)set WEBKITCONFIGSUFFIX=$(WebKitConfigSuffix)set WEBKITDLLCONFIGSUFFIX=$(WebKitDLLConfigSuffix)REM If any of the above variables didn't exist previously andREM were set to an empty string, set will set the errorlevel to 1,REM which will cause the project-specific script to think the buildREM has failed. This cmd /c call will clear the errorlevel.cmd /c"$(ProjectDir)$(ProjectName)PostBuild.cmd""
45: />
46:
47: Name="VCPreBuildEventTool"
48: CommandLine="REM Do not edit from the Visual Studio IDE! Customize via a $(ProjectName)PreBuild.cmd file.if not exist "$(ProjectDir)$(ProjectName)PreBuild.cmd" exit /bset CONFIGURATIONBUILDDIR=$(ConfigurationBuildDir)set CONFIGURATIONNAME=$(ConfigurationName)set INPUTDIR=$(InputDir)set INPUTFILENAME=$(InputFileName)set INPUTPATH=$(InputPath)set INTDIR=$(IntDir)set LIBRARYCONFIGSUFFIX=$(LibraryConfigSuffix)set OUTDIR=$(OutDir)set PLATFORMNAME=$(PlatformName)set PROJECTDIR=$(ProjectDir)set PROJECTFILENAME=$(ProjectFileName)set PROJECTNAME=$(ProjectName)set PROJECTPATH=$(ProjectPath)set SOLUTIONDIR=$(SolutionDir)set SOLUTIONFILENAME=$(SolutionFileName)set SOLUTIONNAME=$(SolutionName)set SOLUTIONPATH=$(SolutionPath)set TARGETDIR=$(TargetDir)set TARGETEXT=$(TargetExt)set TARGETFILENAME=$(TargetFileName)set TARGETPATH=$(TargetPath)set WEBKITCONFIGSUFFIX=$(WebKitConfigSuffix)set WEBKITDLLCONFIGSUFFIX=$(WebKitDLLConfigSuffix)REM If any of the above variables didn't exist previously andREM were set to an empty string, set will set the errorlevel to 1,REM which will cause the project-specific script to think the buildREM has failed. This cmd /c call will clear the errorlevel.cmd /c"$(ProjectDir)$(ProjectName)PreBuild.cmd""
49: />
50:
51: Name="VCPreLinkEventTool"
52: CommandLine="REM Do not edit from the Visual Studio IDE! Customize via a $(ProjectName)PreLink.cmd file.if not exist "$(ProjectDir)$(ProjectName)PreLink.cmd" exit /bset CONFIGURATIONBUILDDIR=$(ConfigurationBuildDir)set CONFIGURATIONNAME=$(ConfigurationName)set INPUTDIR=$(InputDir)set INPUTFILENAME=$(InputFileName)set INPUTPATH=$(InputPath)set INTDIR=$(IntDir)set LIBRARYCONFIGSUFFIX=$(LibraryConfigSuffix)set OUTDIR=$(OutDir)set PLATFORMNAME=$(PlatformName)set PROJECTDIR=$(ProjectDir)set PROJECTFILENAME=$(ProjectFileName)set PROJECTNAME=$(ProjectName)set PROJECTPATH=$(ProjectPath)set SOLUTIONDIR=$(SolutionDir)set SOLUTIONFILENAME=$(SolutionFileName)set SOLUTIONNAME=$(SolutionName)set SOLUTIONPATH=$(SolutionPath)set TARGETDIR=$(TargetDir)set TARGETEXT=$(TargetExt)set TARGETFILENAME=$(TargetFileName)set TARGETPATH=$(TargetPath)set WEBKITCONFIGSUFFIX=$(WebKitConfigSuffix)set WEBKITDLLCONFIGSUFFIX=$(WebKitDLLConfigSuffix)REM If any of the above variables didn't exist previously andREM were set to an empty string, set will set the errorlevel to 1,REM which will cause the project-specific script to think the buildREM has failed. This cmd /c call will clear the errorlevel.cmd /c"$(ProjectDir)$(ProjectName)PreLink.cmd""
53: />
54:
55: Name="VCResourceCompilerTool"
56: Culture="1033"
57: AdditionalIncludeDirectories=""$(IntDir)/include""
58: />
59:
60: Name="ProductionBuild"
61: Value="$(PRODUCTION)"
62: />
63:
64: Name="ConfigurationBuildDir"
65: Value="$(WebKitOutputDir)/$(ConfigurationName)"
66: />
67:
68: Name="AnalyzeWithLargeStack"
69: Value=""
70: />
71: VisualStudioPropertySheet>
这个文件包含了定义了公用的宏,PreBuildEvent,PostBuildEvent等,例如上面讲到的PreBuildEvent就是在这里定义的。
D:/tools/cygwin/home/xufan/WebKit/WebKitLibraries/win/tools/vsprops/release.vsprops这个文件的内容如下:
1: xml version="1.0" encoding="Windows-1252"?>
2:
3: ProjectType="Visual C++"
4: Version="8.00"
5: Name="release"
6: >
7:
8: Name="VCCLCompilerTool"
9: Optimization="2"
10: PreprocessorDefinitions="NDEBUG"
11: RuntimeLibrary="0"
12: WarnAsError="false"
13: />
14:
15: Name="VCLinkerTool"
16: LinkIncremental="1"
17: OptimizeReferences="2"
18: EnableCOMDATFolding="2"
19: OptimizeForWindows98="1"
20: />
21:
22: Name="VCResourceCompilerTool"
23: PreprocessorDefinitions="NDEBUG"
24: />
25:
26: Name="WebKitConfigSuffix"
27: Value=""
28: PerformEnvironmentSet="true"
29: />
30:
31: Name="LibraryConfigSuffix"
32: Value=""
33: PerformEnvironmentSet="true"
34: />
35:
36: Name="WebKitDLLConfigSuffix"
37: Value=""
38: />
39: VisualStudioPropertySheet>
release.vsprops这个文件主要定义编译的一些选项,例如使用的crt版本,优化选项等。
D:/tools/cygwin/home/xufan/WebKit/WebKitLibraries/win/tools/vsprops/WinCairo.vsprops这个文件的内容如下:
1: xml version="1.0" encoding="Windows-1252"?>
2:
3: ProjectType="Visual C++"
4: Version="8.00"
5: Name="WinCairo"
6: >
7:
8: Name="VCCLCompilerTool"
9: AdditionalIncludeDirectories=""$(WebKitLibrariesDir)/include/cairo";"$(SolutionDir)/../../../JavaScriptCore/os-win32""
10: PreprocessorDefinitions="WIN_CAIRO=1"
11: />
12:
13: Name="VCLinkerTool"
14: AdditionalDependencies="cairo.lib libjpeg.lib zlib.lib libpng.lib"
15: AdditionalLibraryDirectories=""$(WebKitLibrariesDir)/lib""
16: />
17: VisualStudioPropertySheet>
WinCairo.vsprops定义了cairo这个版本的wenkit编译需要依赖的头文件目录和库文件。
D:/tools/cygwin/home/xufan/WebKit/Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops的内容如下:
1: xml version="1.0" encoding="Windows-1252"?>
2:
3: ProjectType="Visual C++"
4: Version="8.00"
5: Name="WTFCommon"
6: OutputDirectory="$(ConfigurationBuildDir)/lib"
7: >
8:
9: Name="VCCLCompilerTool"
10: AdditionalIncludeDirectories=""$(ConfigurationBuildDir)/obj/JavaScriptCore/DerivedSources/";../../;"../../os-win32/";../../pcre/;../../parser/;../../wtf/;../../wtf/unicode/;"$(ConfigurationBuildDir)/include/private";"$(WebKitLibrariesDir)/include";../../../icu/include;../../bindings;../../bindings/c;../../bindings/jni;"$(ConfigurationBuildDir)/include/JavaScriptCore";"$(WebKitLibrariesDir)/include/pthreads""
11: PreprocessorDefinitions="__STD_C"
12: ForcedIncludeFiles="ICUVersion.h"
13: ProgramDataBaseFileName="$(OutDir)/$(TargetName).vc80.pdb"
14: />
15:
16: Name="VCLibrarianTool"
17: AdditionalDependencies="user32.lib"
18: OutputFile="$(OutDir)/$(ProjectName)$(WebKitConfigSuffix).lib"
19: />
20: VisualStudioPropertySheet>
WTFCommon.vsprops这个文件定义了wtf这个工程依赖的头文件目录和库等。
需要注意的是,FeatureDefinesCairo.vsprops,common.vsprops,release.vsprops,WinCairo.vsprops是大部分webkit工程都会继承的,因此修改后会一些所有继承这几个文件的工程。例如如果你想将webkit编译依赖的crt由Multi-threaded DLL(/MD)改为Multi-threaded (/MT),只需要修改release.vsprops这个文件的RuntimeLibrary这个属性即可。
WTF这个工程的编译过程就和普遍的vc工程一样了,这里就不介绍了。
WTF这个工程的PreLink Event和PostBuild Event主要是调用WTFPreLink.cmd和WTFPostBuild.cmd,这两个bat都比较简单,就不介绍了。
转载地址:http://dmiob.baihongyu.com/