Unpack dotnet sdk zipfile and add documentation file to nupkg
[platform/core/dotnet/build-tools.git] / dotnet / sdk / 2.0.0-preview1-005700 / Sdks / Microsoft.NET.Sdk / build / Microsoft.NET.CrossGen.targets
1 <!--\r
2 ***********************************************************************************************\r
3 Microsoft.NET.CrossGen.targets\r
4 \r
5 WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have\r
6           created a backup copy.  Incorrect changes to this file will make it\r
7           impossible to load or build your projects from the command-line or the IDE.\r
8 \r
9 Copyright (c) .NET Foundation. All rights reserved. \r
10 ***********************************************************************************************\r
11 -->\r
12 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
13 \r
14   <PropertyGroup>\r
15     <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\r
16   </PropertyGroup>\r
17   \r
18   <!--\r
19     ============================================================\r
20                                         PrepOptimizer\r
21 \r
22     Sets up the common infrastructure for the optimization phase\r
23     Outputs:\r
24         JitPath\r
25         Crossgen\r
26     ============================================================\r
27     -->\r
28   \r
29   <Target Name="PrepOptimizer"\r
30           DependsOnTargets="_GenerateCrossgenProj;\r
31                             _RestoreCrossgen;"\r
32           Condition="$(SkipOptimization) != 'true' ">\r
33     <!-- Get the coreclr path -->\r
34     <ItemGroup>\r
35       <_CoreclrResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)"\r
36                                              Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='coreclr'" />\r
37       <_CoreclrResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)"\r
38                                              Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='libcoreclr'" />\r
39       <_JitResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)"\r
40                                              Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='clrjit'" />\r
41       <_JitResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)"\r
42                                              Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='libclrjit'" />\r
43     </ItemGroup>\r
44 \r
45     <NETSdkError Condition="'@(_CoreclrResolvedPath->Count())' &gt; 1"\r
46                  ResourceName="MultipleFilesResolved"\r
47                  FormatArguments="coreclr" />\r
48 \r
49     <NETSdkError Condition="'@(_CoreclrResolvedPath)'== ''"\r
50                  ResourceName="UnableToFindResolvedPath"\r
51                  FormatArguments="coreclr" />\r
52 \r
53     <NETSdkError Condition="'@(_JitResolvedPath->Count())' &gt; 1"\r
54                  ResourceName="MultipleFilesResolved"\r
55                  FormatArguments="jit" />\r
56 \r
57     <NETSdkError Condition="'@(_JitResolvedPath)'== ''"\r
58                  ResourceName="UnableToFindResolvedPath"\r
59                  FormatArguments="jit" />\r
60 \r
61     <!-- Get the crossgen and jit path-->\r
62     <PropertyGroup>\r
63       <_CoreclrPath>@(_CoreclrResolvedPath)</_CoreclrPath>\r
64       <JitPath>@(_JitResolvedPath)</JitPath>\r
65       <_CoreclrDir>$([System.IO.Path]::GetDirectoryName($(_CoreclrPath)))</_CoreclrDir>\r
66       <_CoreclrPkgDir>$([System.IO.Path]::Combine($(_CoreclrDir),"..\..\..\"))</_CoreclrPkgDir>\r
67       <CrossgenDir>$([System.IO.Path]::Combine($(_CoreclrPkgDir),"tools"))</CrossgenDir>\r
68       <!-- TODO override with rid specific tools path for x-arch -->\r
69       <Crossgen>$([System.IO.Path]::Combine($(CrossgenDir),"crossgen"))</Crossgen>\r
70       <Crossgen Condition="'$(OS)' == 'Windows_NT'">$([System.IO.Path]::Combine($(CrossgenDir),"crossgen.exe"))</Crossgen>\r
71     </PropertyGroup>\r
72 \r
73     <NETSdkError Condition="!Exists($(Crossgen))"\r
74                  ResourceName="UnableToFindResolvedPath"\r
75                  FormatArguments="$(Crossgen)" />\r
76 \r
77     <PropertyGroup>\r
78       <Crossgen> $([System.IO.Path]::GetFullPath($(Crossgen)))</Crossgen>\r
79     </PropertyGroup>\r
80   </Target>\r
81   \r
82   <!--\r
83     ============================================================\r
84                                         _RunOptimizer\r
85 \r
86     Start the optimization phase\r
87     ============================================================\r
88     -->\r
89   \r
90   <Target Name="_RunOptimizer"\r
91           DependsOnTargets="_InitializeBasicProps;\r
92                             _ComputeResolvedFilesToCacheTypes;\r
93                             _SetupStageForCrossgen"\r
94           Condition="$(SkipOptimization) != 'true' ">\r
95     <ItemGroup>\r
96       <AssembliestoCrossgen Include="$(MSBuildProjectFullPath)">\r
97         <Properties>\r
98           CrossgenExe=$(Crossgen);\r
99           CrossgenJit=$(JitPath);\r
100           CrossgenInputAssembly=%(_ManagedResolvedFilesToOptimize.Fullpath);\r
101           CrossgenOutputAssembly=$(_RuntimeOptimizedDir)$(DirectorySeparatorChar)%(FileName)%(Extension);\r
102           CrossgenSubOutputPath=%(DestinationSubPath);\r
103           _RuntimeOptimizedDir=$(_RuntimeOptimizedDir);\r
104           PublishDir=$(CacheStagingDir);\r
105           CrossgenPlatformAssembliesPath=$(_RuntimeRefDir)$(PathSeparator)$(_NetCoreRefDir);\r
106         </Properties>\r
107       </AssembliestoCrossgen>\r
108     </ItemGroup>\r
109     \r
110     <!-- CrossGen the assemblies  -->\r
111     <MSBuild Projects="@(AssembliestoCrossgen)"\r
112                  Targets="RunCrossGen"\r
113                  BuildInParallel="$(BuildInParallel)"\r
114                  Condition="'@(_ManagedResolvedFilesToOptimize)' != ''"/>\r
115 \r
116   </Target>\r
117 \r
118   <!--\r
119     ============================================================\r
120                                         RunCrossGen\r
121     Target Encapsulating the crossgen command  \r
122     ============================================================\r
123     -->\r
124 \r
125   <Target Name="RunCrossGen"\r
126            DependsOnTargets="_InitializeBasicProps;">\r
127 \r
128     <PropertyGroup>\r
129       <CrossgenCommandline>$(CrossgenExe) -readytorun -in $(CrossgenInputAssembly) -out $(CrossgenOutputAssembly) -jitpath $(CrossgenJit) -platform_assemblies_paths $(CrossgenPlatformAssembliesPath)</CrossgenCommandline>\r
130     </PropertyGroup>\r
131 \r
132     <Message Text="CrossgenCommandline: $(CrossgenCommandline)"/>\r
133 \r
134     <!-- Workaround for https://github.com/NuGet/Home/issues/4424 -->\r
135     <Exec Command="chmod 755 $(CrossgenExe)" Condition="'$(OS)' != 'Windows_NT'"/>\r
136     \r
137     <!--Optimization skip if the assembly is already present in the final output directory-->\r
138     <Exec\r
139      Command="$(CrossgenCommandline)"\r
140      Condition="!Exists($([System.IO.Path]::Combine($(PublishDir),$(CrossgenSubOutputPath))))">\r
141       <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>\r
142     </Exec>\r
143 \r
144     <Copy SourceFiles = "$(CrossgenOutputAssembly)"\r
145           DestinationFiles="$(PublishDir)\$(CrossgenSubOutputPath)"\r
146           OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"\r
147           Retries="$(CopyRetryCount)"\r
148           RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"\r
149           Condition="!Exists($([System.IO.Path]::Combine($(PublishDir),$(CrossgenSubOutputPath))))">\r
150 \r
151       <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>\r
152     </Copy>\r
153   </Target>\r
154 \r
155   <Target Name="_InitializeBasicProps">\r
156     <PropertyGroup>\r
157       <PathSeparator>$([System.IO.Path]::PathSeparator)</PathSeparator>\r
158       <DirectorySeparatorChar>$([System.IO.Path]::DirectorySeparatorChar)</DirectorySeparatorChar>\r
159     </PropertyGroup>\r
160   </Target>\r
161   \r
162   <!--\r
163     ============================================================\r
164                                        _GetCrossgenProps\r
165     Generates props used by Crossgen\r
166     ============================================================\r
167     -->\r
168   \r
169   <Target Name="_GetCrossgenProps"\r
170     Condition="$(SkipOptimization) != 'true' ">\r
171 \r
172     <PropertyGroup>\r
173       <_CrossProjFileDir>$([System.IO.Path]::Combine($(ComposeWorkingDir),"Optimize"))</_CrossProjFileDir>\r
174       <_NetCoreRefDir>$([System.IO.Path]::Combine($(_CrossProjFileDir), "netcoreapp"))</_NetCoreRefDir>              <!-- flat netcore app assemblies-->\r
175     </PropertyGroup>\r
176   </Target>\r
177 \r
178   <!--\r
179     ============================================================\r
180                                         _GenerateCrossgenProj\r
181     Generates the project used to restore netcoreapp corresponding to RuntimeFrameworkVersion\r
182     ============================================================\r
183     -->\r
184   <Target Name="_GenerateCrossgenProj"\r
185           DependsOnTargets="_GetCrossgenProps;"\r
186          Condition="$(SkipOptimization) != 'true' ">\r
187     <!-- Create a Project to Restore Crossgen -->\r
188     <PropertyGroup>\r
189       <CrossgenProjContent>\r
190         <![CDATA[\r
191 <Project Sdk="Microsoft.NET.Sdk">\r
192   <PropertyGroup>\r
193       <TargetFramework>$(_TFM)</TargetFramework>\r
194       <RuntimeIdentifier>$(RuntimeIdentifier)</RuntimeIdentifier>\r
195       <RuntimeFrameworkVersion>$(RuntimeFrameworkVersion)</RuntimeFrameworkVersion>\r
196   </PropertyGroup>\r
197 </Project>        \r
198 \r
199 ]]>\r
200       </CrossgenProjContent>\r
201     </PropertyGroup>\r
202 \r
203     <PropertyGroup>\r
204       <_CrossProjFile>$([System.IO.Path]::Combine($(_CrossProjFileDir), "OptimizeCrossgen_$(RuntimeIdentifier)_$(_TFM).csproj"))</_CrossProjFile>\r
205       <_CrossProjAssetsFile>$([System.IO.Path]::Combine($(_CrossProjFileDir), "obj", project.assets.json))</_CrossProjAssetsFile>\r
206     </PropertyGroup>\r
207 \r
208     <MakeDir  Directories="$(_CrossProjFileDir)"/>\r
209     \r
210     <WriteLinesToFile\r
211         File="$(_CrossProjFile)"\r
212         Lines="$(CrossgenProjContent)"\r
213         Overwrite="true" />\r
214   </Target>\r
215 \r
216   <!--\r
217     ============================================================\r
218                                         _SetupStageForCrossgen\r
219     ============================================================\r
220     -->\r
221   \r
222   <Target Name="_SetupStageForCrossgen"\r
223           DependsOnTargets="_GetCrossgenProps;_FilterOutFXFromResolvedCandidates;_PopulateUnFilteredResolvedCandidates">\r
224     <PropertyGroup>\r
225       <_RuntimeRefDir>$([System.IO.Path]::Combine($(CacheWorkerWorkingDir), "runtimeref"))</_RuntimeRefDir>  <!-- flat app managed assemblies -->\r
226       <_RuntimeOptimizedDir>$([System.IO.Path]::Combine($(CacheWorkerWorkingDir), "runtimopt"))</_RuntimeOptimizedDir>      <!-- optimized app managed assemblies in nuget cache layout -->\r
227     </PropertyGroup>\r
228 \r
229     <MakeDir  Directories="$(_RuntimeOptimizedDir)"/>\r
230     \r
231     <!-- Copy managed files to  a flat temp directory for passing it as ref -->\r
232     <Copy SourceFiles = "@(_ManagedResolvedFilesToOptimize)"\r
233           DestinationFolder="$(_RuntimeRefDir)"\r
234           OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"\r
235           Retries="$(CopyRetryCount)"\r
236           RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"\r
237           UseHardlinksIfPossible="$(CreateHardLinksForPublishFilesIfPossible)"\r
238           UseSymboliclinksIfPossible="$(CreateSymbolicLinksForPublishFilesIfPossible)">\r
239 \r
240       <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>\r
241     </Copy>\r
242 \r
243   </Target>\r
244 \r
245   <!--\r
246     ============================================================\r
247                                         _FilterOutFXFromResolvedCandidates\r
248     ============================================================\r
249     -->\r
250   \r
251   <Target Name="_FilterOutFXFromResolvedCandidates"\r
252           Condition="$(SkipRemovingSystemFiles) != 'true' ">\r
253 \r
254     <ItemGroup>\r
255       <_ManagedResolvedFilesToOptimize Include="@(_ManagedResolvedFileToPublishCandidates)" Condition="!Exists('$(_NetCoreRefDir)$(DirectorySeparatorChar)%(FileName)%(Extension)')"/>\r
256     </ItemGroup>\r
257   </Target>\r
258 \r
259   <!--\r
260     ============================================================\r
261                                         _PopulateUnFilteredResolvedCandidates\r
262     ============================================================\r
263     -->\r
264   <Target Name="_PopulateUnFilteredResolvedCandidates"\r
265           Condition="$(SkipRemovingSystemFiles) == 'true' ">\r
266 \r
267    <ItemGroup>\r
268       <_ManagedResolvedFilesToOptimize Include="@(_ManagedResolvedFileToPublishCandidates)" />\r
269     </ItemGroup>\r
270   </Target>\r
271 \r
272   <!--\r
273     ============================================================\r
274                                         _RestoreCrossgen\r
275 Restores netcoreapp and publishes it to a temp directory\r
276     ============================================================\r
277     -->\r
278   \r
279   <Target Name="_RestoreCrossgen"\r
280            Condition="$(SkipOptimization) != 'true' ">\r
281     <MSBuild Projects="$(_CrossProjFile)"\r
282                  Targets="Restore"\r
283                  Properties="RestoreGraphProjectInput=$(_CrossProjFile);"/>\r
284 \r
285     <ResolvePublishAssemblies ProjectPath="$(_CrossProjFile)"\r
286                               AssetsFilePath="$(_CrossProjAssetsFile)"\r
287                               TargetFramework="$(_TFM)"\r
288                               RuntimeIdentifier="$(RuntimeIdentifier)"\r
289                               PlatformLibraryName="$(MicrosoftNETPlatformLibrary)"\r
290                               PrivateAssetsPackageReferences="@(PrivateAssetsPackageReference)"\r
291                               PreserveCacheLayout="false">\r
292 \r
293       <Output TaskParameter="AssembliesToPublish" ItemName="CrossgenResolvedAssembliesToPublish" />\r
294     </ResolvePublishAssemblies>\r
295 \r
296     <!-- Copy managed files to  a flat temp directory for passing it as ref for crossgen -->\r
297     <Copy SourceFiles = "@(CrossgenResolvedAssembliesToPublish)"\r
298           DestinationFolder="$(_NetCoreRefDir)"\r
299           OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"\r
300           Retries="$(CopyRetryCount)"\r
301           RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"\r
302           UseHardlinksIfPossible="$(CreateHardLinksForPublishFilesIfPossible)"\r
303           UseSymboliclinksIfPossible="$(CreateSymbolicLinksForPublishFilesIfPossible)">\r
304 \r
305       <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>\r
306     </Copy>\r
307   </Target>\r
308  \r
309 </Project>\r