-
-
Notifications
You must be signed in to change notification settings - Fork 938
/
Xenko.Core.targets
219 lines (206 loc) · 16 KB
/
Xenko.Core.targets
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
<Project InitialTargets="_XenkoCheckVisualCRuntime2015" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Check if Visual C++ Runtime 2015 is properly installed -->
<Target Name="_XenkoCheckVisualCRuntime2015" Condition="'$(MSBuildRuntimeType)' == 'Full'">
<ItemGroup>
<_XenkoVisualCRuntime2015 Include="Visual C++ Redistributable for Visual Studio 2015 x86">
<Version>$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VC\Servicing\14.0\RuntimeMinimum', 'Version', null, RegistryView.Registry32))</Version>
<ExpectedVersion>14.0.23026</ExpectedVersion>
<DownloadUrl>http://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x86.exe</DownloadUrl>
</_XenkoVisualCRuntime2015>
<_XenkoVisualCRuntime2015 Include="Visual C++ Redistributable for Visual Studio 2015 x64">
<Version>$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VC\Servicing\14.0\RuntimeMinimum', 'Version', null, RegistryView.Registry64))</Version>
<ExpectedVersion>14.0.23026</ExpectedVersion>
<DownloadUrl>http://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe</DownloadUrl>
</_XenkoVisualCRuntime2015>
<_XenkoVisualCRuntime2015NotInstalled Include="@(_XenkoVisualCRuntime2015)" Condition="'%(_XenkoVisualCRuntime2015.Version)' == '' Or $([System.Version]::Parse('%(Version)').CompareTo($([System.Version]::Parse('%(_XenkoVisualCRuntime2015.ExpectedVersion)')))) < 0" />
</ItemGroup>
<Error Condition="'@(_XenkoVisualCRuntime2015NotInstalled)' != ''" Text="@(_XenkoVisualCRuntime2015NotInstalled->'%(Identity) is not installed. Please download from %(DownloadUrl)', '%0a')"/>
</Target>
<!--
*****************************************************************************************************************************
Platform Detection
*****************************************************************************************************************************
-->
<PropertyGroup>
<!-- Windows10 was renammed into UWP -->
<XenkoPlatform Condition="'$(XenkoPlatform)' == 'Windows10'">UWP</XenkoPlatform>
<!-- Default mappings -->
<XenkoPlatform Condition="'$(XenkoPlatform)' == '' And '$(TargetPlatformIdentifier)' == 'UAP'">UWP</XenkoPlatform>
<XenkoPlatform Condition="'$(XenkoPlatform)' == '' And '$(TargetFrameworkIdentifier)' == 'MonoAndroid'">Android</XenkoPlatform>
<XenkoPlatform Condition="'$(XenkoPlatform)' == '' And '$(TargetFrameworkIdentifier)' == 'Xamarin.iOS'">iOS</XenkoPlatform>
<XenkoPlatform Condition="'$(XenkoPlatform)' == '' And $(RuntimeIdentifier.StartsWith('linux'))">Linux</XenkoPlatform>
<XenkoPlatform Condition="'$(XenkoPlatform)' == '' And $(RuntimeIdentifier.StartsWith('osx'))">macOS</XenkoPlatform>
<XenkoPlatform Condition="'$(XenkoPlatform)' == ''">Windows</XenkoPlatform>
</PropertyGroup>
<!-- If not set, Android executable doesn't work properly because ResolveNuGetPackageAssets has no NuGetRuntimeIdentifier and use only the ref assemblies -->
<PropertyGroup Condition="'$(XenkoPlatform)' == 'Android' And '$(AndroidApplication)' == 'true'">
<RuntimeIdentifier>win</RuntimeIdentifier>
<NuGetRuntimeIdentifier>win</NuGetRuntimeIdentifier>
</PropertyGroup>
<!--
*****************************************************************************************************************************
Assembly Processor
*****************************************************************************************************************************
-->
<PropertyGroup>
<!--By default, turn on assembly processor-->
<XenkoAssemblyProcessor Condition="'$(XenkoAssemblyProcessor)' == ''">true</XenkoAssemblyProcessor>
<XenkoAssemblyProcessorPath Condition="Exists('$(MSBuildThisFileDirectory)..\tools\AssemblyProcessor\Xenko.Core.AssemblyProcessor.Packed2.exe')">$(MSBuildThisFileDirectory)..\tools\AssemblyProcessor\Xenko.Core.AssemblyProcessor.Packed2.exe</XenkoAssemblyProcessorPath>
<XenkoAssemblyProcessorPath Condition="Exists('$(MSBuildThisFileDirectory)..\..\..\..\deps\AssemblyProcessor\Xenko.Core.AssemblyProcessor.Packed2.exe')">$(MSBuildThisFileDirectory)..\..\..\..\deps\AssemblyProcessor\Xenko.Core.AssemblyProcessor.Packed2.exe</XenkoAssemblyProcessorPath>
</PropertyGroup>
<UsingTask TaskName="AssemblyProcessorTask" AssemblyFile="$(XenkoAssemblyProcessorPath)" Condition=" '$(XenkoAssemblyProcessorPath)' != '' And '$(XenkoAssemblyProcessorDev)' != 'true' "/>
<Target Name="XenkoRunAssemblyProcessor" DependsOnTargets="ResolveAssemblyReferences">
<WriteLinesToFile File="$(IntermediateOutputPath)XenkoReferences.cache" Lines="@(ReferencePath)" Overwrite="true" />
<ItemGroup>
<!-- We want list of references coming from direct and explicit PackageReference. We are using metadata to combine ReferencePath and PackageReference items https://stackoverflow.com/a/18032552 -->
<XenkoAddReference Include="@(ReferencePath)" Condition="'%(PackageReference.IsImplicitlyDefined)' != 'true'">
<NuGetPackageReference>%(PackageReference.Identity)</NuGetPackageReference>
</XenkoAddReference>
<XenkoAddReference Remove="@(XenkoAddReference)" Condition="'%(XenkoAddReference.NuGetPackageId)' != '%(XenkoAddReference.NuGetPackageReference)' Or ('%(XenkoAddReference.ExternallyResolved)' != 'true' And '%(XenkoAddReference.BuildReference)' != 'true')"/>
<!-- Also include non-nuget references (Reference and ProjectReference) -->
<XenkoAddReference Include="@(ReferencePath)" Condition="'%(ReferencePath.NuGetPackageId)' == ''"/>
</ItemGroup>
<PropertyGroup>
<XenkoAssemblyProcessorOptions Condition="'$(XenkoAssemblyProcessorOptions)' == ''">--auto-notify-property --parameter-key --auto-module-initializer --serialization</XenkoAssemblyProcessorOptions>
<XenkoAssemblyProcessorOptions Condition="'$(DocumentationFile)' != ''">$(XenkoAssemblyProcessorOptions) --docfile="$(DocumentationFile)"</XenkoAssemblyProcessorOptions>
<!-- Physics, Particles and SpriteStudio assembly is actually hard coded/referenced here, remove once a better system is in place! -->
<!-- Please keep in sync with AssemblyRecompiler.cs -->
<XenkoAssemblyProcessorOptions>$(XenkoAssemblyProcessorOptions) @(XenkoAddReference->'--add-reference=%22%(Identity)%22',' ')</XenkoAssemblyProcessorOptions>
<XenkoAssemblyProcessorOptions Condition="'$(DocumentationFile)' != ''">$(XenkoAssemblyProcessorOptions) --docfile="$(DocumentationFile)"</XenkoAssemblyProcessorOptions>
<XenkoAssemblyProcessorOptions>$(XenkoAssemblyProcessorOptions) --references-file="$(IntermediateOutputPath)XenkoReferences.cache"</XenkoAssemblyProcessorOptions>
<XenkoAssemblyProcessorOptions>$(XenkoAssemblyProcessorOptions) --platform=$(XenkoPlatform) --targetFramework=$(XenkoNETFrameworkVersion) "$(IntermediateOutputPath)$(TargetName)$(TargetExt)"</XenkoAssemblyProcessorOptions>
<XenkoAssemblyProcessorOptions Condition="'$(AssemblyOriginatorKeyFile)' != ''">$(XenkoAssemblyProcessorOptions) --signkeyfile="$(AssemblyOriginatorKeyFile)" --delete-on-error</XenkoAssemblyProcessorOptions>
</PropertyGroup>
<!-- Run assembly processor -->
<Message Condition=" '$(XenkoAssemblyProcessorDev)' != 'true' " Importance="low" Text=""$(XenkoAssemblyProcessorPath)" $(XenkoAssemblyProcessorOptions)"/>
<AssemblyProcessorTask Condition=" '$(XenkoAssemblyProcessorDev)' != 'true' " Arguments="$(XenkoAssemblyProcessorOptions)"/>
<!-- Dev mode: don't use task to avoid locking the file -->
<Exec Condition=" '$(XenkoAssemblyProcessorDev)' == 'true' " Command=""$(XenkoAssemblyProcessorPath)" $(XenkoAssemblyProcessorOptions)"/>
</Target>
<PropertyGroup Condition=" '$(XenkoAssemblyProcessor)' == 'true'">
<PrepareForRunDependsOn>
XenkoRunAssemblyProcessor;
$(PrepareForRunDependsOn)
</PrepareForRunDependsOn>
</PropertyGroup>
<!--
*****************************************************************************************************************************
NuGet tweaks
*****************************************************************************************************************************
-->
<!-- Workaround to copy .xml and .pdb files for new csproj targeting (https://github.com/dotnet/sdk/issues/1458#issuecomment-401497095) -->
<Target Name="_XenkoResolveCopyLocalNuGetPackagePdbsAndXml"
Condition="$(CopyLocalLockFileAssemblies) == true"
AfterTargets="ResolveReferences">
<ItemGroup>
<ReferenceCopyLocalPaths
Include="@(ReferenceCopyLocalPaths->'%(RootDir)%(Directory)%(Filename).pdb')"
Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' != ''
and Exists('%(RootDir)%(Directory)%(Filename).pdb')" />
<ReferenceCopyLocalPaths
Include="@(ReferenceCopyLocalPaths->'%(RootDir)%(Directory)%(Filename).xml')"
Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' != ''
and Exists('%(RootDir)%(Directory)%(Filename).xml')" />
</ItemGroup>
</Target>
<!--
*****************************************************************************************************************************
Dependencies reading (from .ssdeps)
Important: Please keep in sync with Xenko.Core.PostSettings.Dependencies.Targets
*****************************************************************************************************************************
-->
<!-- List dependency files from .ssdeps -->
<PropertyGroup>
<_XenkoListDepsFilesDependsOn>ResolveAssemblyReferences</_XenkoListDepsFilesDependsOn>
<_XenkoListDepsFilesDependsOn Condition="'$(XenkoPlatform)' == 'Windows' Or '$(XenkoPlatform)' == 'Linux' Or '$(XenkoPlatform)' == 'macOS'">$(_XenkoListDepsFilesDependsOn);ResolvePackageAssets</_XenkoListDepsFilesDependsOn>
</PropertyGroup>
<Target Name="_XenkoListDepsFiles" DependsOnTargets="$(_XenkoListDepsFilesDependsOn)">
<ItemGroup>
<_XenkoDepsFile Include="@(ReferencePath->'%(RootDir)%(Directory)%(Filename).ssdeps')" Condition="'%(CopyLocal)' != 'false' And Exists('%(RootDir)%(Directory)%(Filename).ssdeps')"/>
<_XenkoDepsFile Include="@(ReferenceDependencyPaths->'%(RootDir)%(Directory)%(Filename).ssdeps')" Condition="'%(CopyLocal)' != 'false' And Exists('%(RootDir)%(Directory)%(Filename).ssdeps')"/>
<_XenkoDepsFile Include="@(RuntimeCopyLocalItems->'%(RootDir)%(Directory)%(Filename).ssdeps')" Condition="Exists('%(RootDir)%(Directory)%(Filename).ssdeps')"/>
<_XenkoDepsFile Include="@(ReferenceCopyLocalPaths->'%(RootDir)%(Directory)%(Filename).ssdeps')" Condition="Exists('%(RootDir)%(Directory)%(Filename).ssdeps')"/>
<!-- Android -->
<_XenkoDepsFile Include="@(_ReferencesFromNuGetPackages->'%(RootDir)%(Directory)%(Filename).ssdeps')" Condition="Exists('%(RootDir)%(Directory)%(Filename).ssdeps')"/>
<None Include="@(_XenkoDepsFile)" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
</Target>
<!-- Note: this target Outputs are not real, used so that it gets expanded for each file
also, if _XenkoDepsFile is empty the target is still called so check for it -->
<Target Name="_XenkoBuildDependencies" DependsOnTargets="_XenkoListDepsFiles" Outputs="%(_XenkoDepsFile.Identity)">
<!-- Read dependencies from file -->
<ReadLinesFromFile File="%(_XenkoDepsFile.Identity)" Condition="'%(_XenkoDepsFile.Identity)' != ''">
<Output TaskParameter="Lines" ItemName="_XenkoDependencyLocal"/>
</ReadLinesFromFile>
<PropertyGroup>
<_XenkoSourceDir>%(_XenkoDepsFile.RootDir)%(_XenkoDepsFile.Directory)</_XenkoSourceDir>
</PropertyGroup>
<ItemGroup>
<_XenkoDependencyLocal>
<!-- Note: Using regex match rather than regex split or string split to avoid MSBuild MissingMethodException -->
<Type>$([System.Text.RegularExpressions.Regex]::Match('%(Identity)', `(.*);(.*);(.*)`).get_Groups().get_Item(1).ToString())</Type>
<SourcePath>$([System.Text.RegularExpressions.Regex]::Match('%(Identity)', `(.*);(.*);(.*)`).get_Groups().get_Item(2).ToString())</SourcePath>
<Link>$([System.Text.RegularExpressions.Regex]::Match('%(Identity)', `(.*);(.*);(.*)`).get_Groups().get_Item(3).ToString())</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</_XenkoDependencyLocal>
<_XenkoDependencyContent Include="@(_XenkoDependencyLocal->'$(_XenkoSourceDir)%(SourcePath)')" Condition="'%(_XenkoDependencyLocal.Type)' == 'Content'"/>
<_XenkoDependencyNativeLib Include="@(_XenkoDependencyLocal->'$(_XenkoSourceDir)%(SourcePath)')" Condition="'%(_XenkoDependencyLocal.Type)' == 'NativeLib'"/>
</ItemGroup>
<!-- Message -->
<Message Importance="Normal" Text="Detected dependency from %(_XenkoDepsFile.FileName)" Condition="'%(_XenkoDepsFile.Identity)' != ''"/>
<Message Importance="Normal" Text=" %(_XenkoDependencyLocal.Type): %(_XenkoDependencyLocal.Identity) => %(_XenkoDependencyLocal.Link)"/>
<!-- Cleanup so that _XenkoDependencyLocal is local -->
<ItemGroup>
<_XenkoDependencyLocal Remove="@(_XenkoDependencyLocal)"/>
</ItemGroup>
</Target>
<Target Name="_XenkoCopyContent" DependsOnTargets="_XenkoBuildDependencies" AfterTargets="ResolveAssemblyReferences">
<ItemGroup>
<Content Include="@(_XenkoDependencyContent)"/>
</ItemGroup>
</Target>
<!-- Copy native libraries to output -->
<Target Name="_XenkoSetupNativeLibrariesWindows" DependsOnTargets="_XenkoBuildDependencies" AfterTargets="ResolveAssemblyReferences" Condition="('$(XenkoPlatform)' == 'Windows' Or '$(XenkoPlatform)' == 'macOS' Or '$(XenkoPlatform)' == 'Linux') And '$(CopyLocalLockFileAssemblies)' != 'false'">
<ItemGroup>
<None Include="@(_XenkoDependencyNativeLib)">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Target>
<!-- When publishing, copy native libraries (only needed if CopyLocalLockFileAssemblies is set to false since _XenkoSetupNativeLibrariesWindows won't run) -->
<Target Name="_XenkoSetupNativeLibrariesDotNetPublish" DependsOnTargets="_XenkoBuildDependencies" AfterTargets="ComputeFilesToPublish" Condition="'$(UsingMicrosoftNETSdk)' == 'true' And '$(CopyLocalLockFileAssemblies)' == 'false'">
<ItemGroup>
<ResolvedFileToPublish Include="@(_XenkoDependencyNativeLib)">
<RelativePath>%(_XenkoDependencyNativeLib.Link)</RelativePath>
</ResolvedFileToPublish>
</ItemGroup>
</Target>
<Target Name="_XenkoSetupNativeLibrariesUWP" DependsOnTargets="_XenkoBuildDependencies" AfterTargets="ResolveAssemblyReferences" Condition="'$(XenkoPlatform)' == 'UWP'">
<PropertyGroup>
<XenkoCPU Condition="'$(Platform)' == 'x86'">x86</XenkoCPU>
<XenkoCPU Condition="'$(Platform)' == 'x64'">x64</XenkoCPU>
<XenkoCPU Condition="'$(Platform)' == 'ARM'">ARM</XenkoCPU>
</PropertyGroup>
<ItemGroup>
<Content Include="@(_XenkoDependencyNativeLib)" Condition="$([System.String]::Copy('%(_XenkoDependencyNativeLib.Link)').StartsWith('$(XenkoCPU)'))">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link Condition="'$(XenkoCPU)' != ''">$([System.String]::Copy('%(_XenkoDependencyNativeLib.Link)').Replace('$(XenkoCPU)\', ''))</Link>
</Content>
</ItemGroup>
</Target>
<Target Name="_XenkoSetupNativeLibrariesAndroid" DependsOnTargets="_XenkoBuildDependencies" AfterTargets="ResolveAssemblyReferences" Condition="'$(XenkoPlatform)' == 'Android'">
<ItemGroup>
<AndroidNativeLibrary Include="@(_XenkoDependencyNativeLib)"/>
</ItemGroup>
</Target>
<Target Name="_XenkoSetupNativeLibrariesiOS" DependsOnTargets="_XenkoBuildDependencies" AfterTargets="ResolveAssemblyReferences" Condition=" '$(OutputType)' == 'Exe' And '$(XenkoPlatform)' == 'iOS'">
<ItemGroup>
<NativeReference Include="@(_XenkoDependencyNativeLib)">
<Kind>Static</Kind>
</NativeReference>
</ItemGroup>
<PropertyGroup>
<MtouchExtraArgs>$(MtouchExtraArgs) --compiler=clang -cxx -gcc_flags '-lstdc++ $(MtouchExtraArgsLibs)'</MtouchExtraArgs>
</PropertyGroup>
</Target>
</Project>