forked from microsoft/Win2D
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Win2D.proj
258 lines (202 loc) · 12.4 KB
/
Win2D.proj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
<?xml version="1.0" encoding="utf-8"?>
<!--
Master script for building all permutations of project * platform * configuration.
For best performance, enable parallel builds:
msbuild Win2D.proj /maxcpucount
-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0" DefaultTargets="Build">
<!-- Parameters that can be configured by the caller, eg. "msbuild Win2D.proj /p:BuildPhone=false" -->
<PropertyGroup>
<BuildPlatforms>Win32;x64;ARM;AnyCPU</BuildPlatforms>
<BuildConfigurations>Debug;Release</BuildConfigurations>
<BuildWindows>true</BuildWindows>
<BuildPhone>true</BuildPhone>
<BuildTests>true</BuildTests>
<BuildTools>true</BuildTools>
<BuildDocs>true</BuildDocs>
<RunTests>true</RunTests>
</PropertyGroup>
<!-- Set default platforms for each project type -->
<ItemDefinitionGroup>
<WindowsProject>
<Platforms>Win32;x64;ARM</Platforms>
</WindowsProject>
<PhoneProject>
<Platforms>Win32;ARM</Platforms>
</PhoneProject>
<AnyCPUProject>
<Platforms>AnyCPU</Platforms>
</AnyCPUProject>
</ItemDefinitionGroup>
<!-- Windows projects implementing the Canvas API -->
<ItemGroup Condition="$(BuildWindows)">
<WindowsProject Include="winrt\lib\winrt.lib.Windows.vcxproj" />
<WindowsProject Include="winrt\dll\winrt.dll.Windows.vcxproj" />
<WindowsProject Include="numerics\DotNet\DotNetNumerics.Windows.csproj" />
</ItemGroup>
<!-- Windows Phone projects implementing the Canvas API -->
<ItemGroup Condition="$(BuildPhone)">
<PhoneProject Include="winrt\lib\winrt.lib.WindowsPhone.vcxproj" />
<PhoneProject Include="winrt\dll\winrt.dll.WindowsPhone.vcxproj" />
<PhoneProject Include="numerics\DotNet\DotNetNumerics.WindowsPhone.csproj" />
</ItemGroup>
<!-- Windows test projects -->
<ItemGroup Condition="$(BuildWindows) and $(BuildTests)">
<WindowsProject Include="winrt\test.internal\winrt.test.internal.vcxproj">
<Platforms>Win32;x64</Platforms>
<AutomatedTests>desktop</AutomatedTests>
</WindowsProject>
<WindowsProject Include="winrt\test.external\winrt.test.external.Windows.vcxproj">
<AutomatedTests>store</AutomatedTests>
</WindowsProject>
<WindowsProject Include="winrt\test.nativecomponent\winrt.test.nativecomponent.Windows.vcxproj" />
<WindowsProject Include="winrt\test.managed\Windows\winrt.test.managed.Windows.csproj">
<AutomatedTests>store</AutomatedTests>
</WindowsProject>
<WindowsProject Include="tests\CsConsumer\Windows\CsConsumer.Windows.csproj" />
<WindowsProject Include="tests\ExampleGallery\Windows\ExampleGallery.Windows.csproj" />
<WindowsProject Include="numerics\Cpp\tests\CppNumericsTests.Windows.vcxproj">
<AutomatedTests>store</AutomatedTests>
</WindowsProject>
<WindowsProject Include="numerics\DotNet\tests\Windows\DotNetNumericsTests.Windows.csproj">
<AutomatedTests>store</AutomatedTests>
</WindowsProject>
</ItemGroup>
<!-- Windows Phone test projects -->
<ItemGroup Condition="$(BuildPhone) and $(BuildTests)">
<PhoneProject Include="winrt\test.external\winrt.test.external.WindowsPhone.vcxproj" />
<PhoneProject Include="winrt\test.nativecomponent\winrt.test.nativecomponent.WindowsPhone.vcxproj" />
<PhoneProject Include="winrt\test.managed\WindowsPhone\winrt.test.managed.WindowsPhone.csproj" />
<PhoneProject Include="tests\CsConsumer\WindowsPhone\CsConsumer.WindowsPhone.csproj" />
<PhoneProject Include="tests\ExampleGallery\WindowsPhone\ExampleGallery.WindowsPhone.csproj"/>
<PhoneProject Include="numerics\Cpp\tests\CppNumericsTests.WindowsPhone.vcxproj" />
<PhoneProject Include="numerics\DotNet\tests\WindowsPhone\DotNetNumericsTests.WindowsPhone.csproj" />
</ItemGroup>
<!-- Tools projects -->
<ItemGroup Condition="$(BuildTools)">
<AnyCPUProject Include="tools\copyright\copyright.csproj" />
<AnyCPUProject Include="tools\codegen\exe\codegen.exe.csproj" />
<AnyCPUProject Include="tools\codegen\test\codegen.test.csproj" Condition="$(BuildTests)">
<AutomatedTests>desktop</AutomatedTests>
</AnyCPUProject>
<AnyCPUProject Include="tools\docs\DocDiff\DocDiff.csproj" />
<AnyCPUProject Include="tools\docs\ExtractAPISurface\ExtractAPISurface.csproj" />
<AnyCPUProject Include="tools\docs\MergeIntellisense\MergeIntellisense.csproj" />
</ItemGroup>
<!-- Master target just chains to a bunch of workers -->
<Target Name="Build"
DependsOnTargets="BuildProjects; CheckCopyrightBanners; BuildDocs; RunTests" />
<!-- Use batching to build each project in turn -->
<Target Name="BuildProjects"
DependsOnTargets="PrepareVersionInfo; ChooseProjectsToBuild"
Inputs="@(ProjectsToBuild)"
Outputs="%(PlatformIndependentName)">
<Message Importance="High" Text="Building all variants of project %(ProjectsToBuild.PlatformIndependentName):" />
<Message Importance="High" Text=" %(ProjectsToBuild.Filename) (%(ProjectsToBuild.Configuration)|%(ProjectsToBuild.Platform))" />
<!-- All the variants (platform and configuration) of a project can be built in parallel -->
<MSBuild Projects="@(ProjectsToBuild)" BuildInParallel="true" Properties="IncludeVersionInfo=true" />
</Target>
<Target Name="ChooseProjectsToBuild">
<ItemGroup>
<!-- Expand parameter properties into item groups, so we can batch over them -->
<BuildPlatform Include="$(BuildPlatforms)" />
<BuildConfiguration Include="$(BuildConfigurations)" />
<!-- Generate the cartesian product of all projects * all platforms we are building -->
<CandidateProjects Include="@(WindowsProject);@(PhoneProject);@(AnyCPUProject)">
<Platform>%(BuildPlatform.Identity)</Platform>
</CandidateProjects>
<!-- Filter the list to include only project/platform pairs where the project actually supports that platform -->
<FilteredProjects Include="@(CandidateProjects)" Condition="$([System.String]::new('%(CandidateProjects.Platforms)').Contains('%(CandidateProjects.Platform)'))" />
<!-- Generate the cartesian product of our filtered project list * the configurations we are building -->
<ProjectsPerConfig Include="@(FilteredProjects)">
<Configuration>%(BuildConfiguration.Identity)</Configuration>
</ProjectsPerConfig>
<!-- Move platform and configuration into the AdditionalProperties metadata, and generate a
platform independent name that will be the same for Windows and Phone project variants -->
<ProjectsToBuild Include="@(ProjectsPerConfig)">
<AdditionalProperties>Platform=%(ProjectsPerConfig.Platform);Configuration=%(ProjectsPerConfig.Configuration)</AdditionalProperties>
<PlatformIndependentName>$([System.String]::new('%(ProjectsPerConfig.Filename)').Replace('Windows', '').Replace('Phone', '').TrimEnd('.'))</PlatformIndependentName>
</ProjectsToBuild>
</ItemGroup>
</Target>
<Target Name="PrepareVersionInfo">
<MakeDir Directories="obj" />
<!-- Read the current Win2D version number -->
<ReadLinesFromFile File="build\nuget\VERSION">
<Output TaskParameter="Lines" PropertyName="Win2DVersion" />
</ReadLinesFromFile>
<!-- Read the SHA-1 hash for git HEAD, so we can later identify exactly what code went into this build -->
<Exec Command="git rev-parse --verify HEAD > obj\Win2D.githash.txt" IgnoreExitCode="true">
<Output TaskParameter="ExitCode" PropertyName="GitExitCode" />
</Exec>
<WriteLinesToFile Condition="$(GitExitCode) != 0" File ="obj\Win2D.githash.txt" Lines="unknown git hash" />
<ReadLinesFromFile File="obj\Win2D.githash.txt">
<Output TaskParameter="Lines" PropertyName="GitHash" />
</ReadLinesFromFile>
<!-- Generate AssemblyVersion.cs, which adds the latest version info to managed assembly outputs -->
<ItemGroup>
<AssemblyVersionCode Include="[assembly: System.Reflection.AssemblyVersion("$(Win2DVersion)")]" />
<AssemblyVersionCode Include="[assembly: System.Reflection.AssemblyFileVersion("$(Win2DVersion)")]" />
<AssemblyVersionCode Include="[assembly: System.Reflection.AssemblyInformationalVersionAttribute("$(Win2DVersion) ($(GitHash))")]" />
</ItemGroup>
<ReadLinesFromFile File="obj\AssemblyVersion.cs">
<Output TaskParameter="Lines" ItemName="ExistingAssemblyVersion" />
</ReadLinesFromFile>
<WriteLinesToFile Condition="@(AssemblyVersionCode) != @(ExistingAssemblyVersion)" File="obj\AssemblyVersion.cs" Lines="@(AssemblyVersionCode)" Overwrite="true" />
<!-- Also generate DllVersion.h, which adds version info to native DLLs -->
<ItemGroup>
<DllVersionCode Include="#define DLL_VERSION $(Win2DVersion.Replace('.', ','))" />
<DllVersionCode Include="#define DLL_VERSION_STRING "$(Win2DVersion)"" />
<DllVersionCode Include="#define DLL_VERSION_STRING_LONG "$(Win2DVersion) ($(GitHash))"" />
</ItemGroup>
<ReadLinesFromFile File="obj\DllVersion.h">
<Output TaskParameter="Lines" ItemName="ExistingDllVersion" />
</ReadLinesFromFile>
<WriteLinesToFile Condition="@(DllVersionCode) != @(ExistingDllVersion)" File="obj\DllVersion.h" Lines="@(DllVersionCode)" Overwrite="true" />
</Target>
<!-- Make sure all our source files have the right copyright -->
<Target Name="CheckCopyrightBanners"
Condition="$(BuildTools) and $(BuildPlatforms.Contains('AnyCPU')) and $(BuildConfigurations.Contains('Release'))">
<Message Importance="High" Text="Checking copyright banners" />
<MSBuild Projects="tools\copyright\CheckCopyrightBanners.proj" />
</Target>
<!-- Build the reference documentation -->
<Target Name="BuildDocs"
Condition="$(BuildDocs) and
$(BuildTools) and
$(BuildWindows) and
$(BuildPlatforms.Contains('AnyCPU')) and
$(BuildPlatforms.Contains('Win32')) and
$(BuildConfigurations.Contains('Release'))">
<Message Importance="High" Text="Building documentation" />
<MSBuild Projects="tools\docs\BuildDocs.proj" />
</Target>
<!-- Run the automated tests -->
<Target Name="RunTests"
Condition="$(BuildTests) and $(RunTests)"
DependsOnTargets="ChooseProjectsToBuild; ChooseTestsToRun"
Inputs="@(TestProjects)"
Outputs="%(TestProjects.TestAppX)">
<Message Importance="High" Text="Running tests: %(TestProjects.Filename) (%(TestProjects.Configuration)|%(TestProjects.Platform))" />
<Exec Command="vstest.console %(TestProjects.TestBinary)%(TestProjects.TestArgs)" ContinueOnError="ErrorAndContinue" IgnoreStandardErrorWarningFormat="true" />
</Target>
<Target Name="ChooseTestsToRun">
<ItemGroup>
<TestProjects Include="@(ProjectsToBuild)" Condition="%(ProjectsToBuild.AutomatedTests) != '' and %(ProjectsToBuild.Platform) != ARM">
<!-- Remap Win32 to x86 -->
<TestPlatform Condition="%(ProjectsToBuild.Platform) == Win32">x86</TestPlatform>
<TestPlatform Condition="%(ProjectsToBuild.Platform) != Win32">%(ProjectsToBuild.Platform)</TestPlatform>
<!-- Work out where the test binaries are located -->
<TestPath>bin\Windows%(TestProjects.TestPlatform)\%(ProjectsToBuild.Configuration)</TestPath>
<TestAppX Condition="%(ProjectsToBuild.Configuration) == Release">%(ProjectsToBuild.Filename)_1.0.0.0_%(ProjectsToBuild.Platform)</TestAppX>
<TestAppX Condition="%(ProjectsToBuild.Configuration) != Release">%(ProjectsToBuild.Filename)_1.0.0.0_%(ProjectsToBuild.Platform)_%(ProjectsToBuild.Configuration)</TestAppX>
<!-- Binaries can be either a .dll for desktop tests, or .appx for store app tests -->
<TestBinary Condition="%(ProjectsToBuild.AutomatedTests) == desktop">%(TestProjects.TestPath)\%(ProjectsToBuild.Filename)\%(ProjectsToBuild.Filename).dll</TestBinary>
<TestBinary Condition="%(ProjectsToBuild.AutomatedTests) == store">%(TestProjects.TestPath)\%(ProjectsToBuild.Filename)\AppPackages\%(TestProjects.TestAppX)_Test\%(TestProjects.TestAppX).appx</TestBinary>
<!-- Do we need the /Platform or /InIsolation arguments for this test project? -->
<TestArgs Condition="%(ProjectsToBuild.Platform) == x64">%(TestProjects.TestArgs) /Platform:x64</TestArgs>
<TestArgs Condition="%(ProjectsToBuild.Platform) == x64 or %(ProjectsToBuild.AutomatedTests) == store">%(TestProjects.TestArgs) /InIsolation</TestArgs>
</TestProjects>
</ItemGroup>
</Target>
</Project>