博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webkit在win32下的编译规则(三)
阅读量:2401 次
发布时间:2019-05-10

本文共 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/

你可能感兴趣的文章
MySQL InnoDB Update和Crash Recovery流程
查看>>
Oracle RushQL勒索病毒恢复方法
查看>>
Oracle RAC Cache Fusion 系列十:Oracle RAC Enqueues And Lock Part 1
查看>>
MySQL问题两则
查看>>
MySQL执行计划explain的key_len解析
查看>>
基于Oracle的私有云架构探析(连载一)
查看>>
ASM 翻译系列第十弹:ASM Internal ASM DISK header
查看>>
ASM 翻译系列第一弹:基础知识 ASM AU,Extents,Mirroring 和 Failgroups
查看>>
MySQL排序内部原理探秘
查看>>
ASM 翻译系列第八弹:ASM Internal ASM file extent map
查看>>
利用sys schema解决一次诡异的语句hang问题
查看>>
数据库容器化|未来已来
查看>>
容器化RDS|计算存储分离架构下的 IO 优化
查看>>
MySQL 5.7复制配置不规范修改导致的坑(一)
查看>>
MySQL8.0——Resource Group(资源组)
查看>>
基于Oracle的私有云架构探析(连载二)
查看>>
MySQL分区如何迁移
查看>>
Oracle压缩黑科技(一)—基础表压缩
查看>>
容器化RDS—计算存储分离架构下的“Split-Brain”
查看>>
挽救DG中主库的nologging操作的块
查看>>