Merge pull request #10776 from sdmaclea/PR-ARM64-CpBlkUnroll
[platform/upstream/coreclr.git] / tests / helixperftasks.targets
1 <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2
3     <UsingTask TaskName="RemoveDuplicateAssemblies" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
4       <ParameterGroup>
5         <DuplicateAssemblies ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
6         <AssemblyPaths ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
7         <UniqueAssemblyPaths ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true" />
8       </ParameterGroup>
9       <Task>
10         <Using Namespace="System"/>
11         <Using Namespace="System.IO"/>
12         <Using Namespace="System.Collections.Generic"/>
13         <Code Type="Fragment" Language="cs">
14           <![CDATA[
15                   var uniqueAssemblyPathsList = new List<Microsoft.Build.Framework.ITaskItem>();
16                   var dupeSet = new HashSet<string>();
17                   foreach(var dupe in DuplicateAssemblies)
18                   {
19                     dupeSet.Add(dupe.GetMetadata("Identity"));
20                   }
21                   foreach(var assemPath in AssemblyPaths)
22                   {
23                     if((dupeSet.Contains(assemPath.GetMetadata("FileName")+assemPath.GetMetadata("Extension")) &&
24                         !(assemPath.GetMetadata("Identity").StartsWith("runtime"))))
25                     {
26                       Log.LogMessage("Duplicate assembly filtered: {0}", assemPath.GetMetadata("Identity"));
27                     }
28                     else
29                     {
30                       uniqueAssemblyPathsList.Add(assemPath);
31                     }
32
33                   }
34                   UniqueAssemblyPaths = uniqueAssemblyPathsList.ToArray();
35           ]]>
36         </Code>
37       </Task>
38     </UsingTask>
39
40
41   <UsingTask TaskName="GetPerfTestAssemblies" AssemblyFile="$(ToolsDir)net45/Microsoft.DotNet.Build.CloudTestTasks.dll"/>
42   <Import Project="$(ToolsDir)publishtest.targets" />
43   <Import Project="$(ToolsDir)CloudTest.targets" />
44   <Target Name="UploadPerfAssemblies">
45     <Message Text="Searching for Perf tests in $(BinDir)" Importance = "High"/>
46     <ItemGroup>
47       <TestBinary Include="$(BinDir)**/*.dll" />
48       <TestBinary Include="$(BinDir)**/*.exe" />
49     </ItemGroup>
50     <!-- Get full paths to each of the perf test directories -->
51     <GetPerfTestAssemblies TestBinaries="@(TestBinary)" GetFullPaths="true">
52       <Output TaskParameter="PerfTestAssemblies" ItemName="CoreCLRPerfTest" />
53     </GetPerfTestAssemblies>
54
55     <ItemGroup>
56      <DnuSourceList Include="$(CORE_ROOT)\.nuget\pkg" />
57     </ItemGroup>
58
59     <!-- Restore the runtime dependencies -->
60     <Exec Command="$(DnuRestoreCommand) &quot;$(TestRuntimeProjectJson)&quot;"
61            StandardOutputImportance="Low"
62            CustomErrorRegularExpression="^Unable to resolve .*"
63            IgnoreExitCode="true"
64            IgnoreStandardErrorWarningFormat="true" />
65
66     <!-- For each perf test, generate assembly list, and zip up the workitem -->
67     <MSBuild Projects="$(MSBuildProjectFile)" Properties="CurrPerfAssembly=%(CoreCLRPerfTest.Identity);TestRuntimeProjectLockJson=$(TestRuntimeProjectLockJson)" Targets="_zipSingleProject"/>
68
69     <!-- After all workitems are packaged, call the CloudBuild Targets from Build Tools which upload these workitems and trigger a test run for these workitems -->
70     <MSBuild Projects="$(MSBuildProjectFile)" Properties="BinDir=$(BinDir)../" Targets="CloudBuild" />
71
72   </Target>
73
74   <Target Name="RunTestsForProject">
75     <Message Text="This is a dummy target to appease DependsOnTargets for ArchiveTestBuild in publishtest.targets" Importance="Low" />
76   </Target>
77
78   <!-- CoreCLR builds do not generate dependency lists yet, we need to archive the whole packages dir so that tests can find dependencies -->
79   <!-- compress the required files from the packages dir in preparation for uploading -->
80   <Target Name="CompressPackagesDir">
81     <ItemGroup>
82       <ExcludeFromArchive Include="nupkg$" />
83       <ExcludeFromArchive Include="Microsoft.DotNet.BuildTools" />
84       <ExcludeFromArchive Include="TestData" />
85     </ItemGroup>
86     <ZipFileCreateFromDirectory
87         SourceDirectory="$(PackagesDir)"
88         DestinationArchive="$(PackagesArchiveFile)"
89         ExcludePatterns="@(ExcludeFromArchive)"
90         OverwriteDestination="true" />
91     <ItemGroup>
92       <ForUpload Include="$(PackagesArchiveFile)">
93         <RelativeBlobPath>$(Platform)$(ConfigurationGroup)/$(PackagesArchiveFilename)</RelativeBlobPath>
94       </ForUpload>
95     </ItemGroup>
96   </Target>
97
98   <Target Name="_zipSingleProject">
99     <PropertyGroup>
100       <OutDir>$([System.IO.Path]::GetDirectoryName($(CurrPerfAssembly)))/</OutDir>
101       <TestArchiveDir>$(BaseOutputPath)\testStagingDir\</TestArchiveDir>
102       <TestProjectName>$([System.IO.Path]::GetFileNameWithoutExtension($(CurrPerfAssembly)))</TestProjectName>
103       <ProjectLockJson>$(OutDir)project.lock.json</ProjectLockJson>
104     </PropertyGroup>
105
106     <ItemGroup>
107       <TestNugetProjectLockFile Include="$(ProjectLockJson)" Condition="Exists($(ProjectLockJson))"/>
108       <TestNugetProjectLockFile Include="$(TestRuntimeProjectLockJson)" Condition="Exists($(TestRuntimeProjectLockJson))"/>
109     </ItemGroup>
110
111     <!-- Generate Assembly list based on the individual project's project.json as well as the common runtime dependencies generated by AddAssFilesToAssemblyList target -->
112     <PrereleaseResolveNuGetPackageAssets
113                                AllowFallbackOnTargetSelection="true"
114                                IncludeFrameworkReferences="false"
115                                NuGetPackagesDirectory="$(PackagesDir)"
116                                RuntimeIdentifier="$(TestNugetRuntimeId)"
117                                ProjectLanguage="C#"
118                                ProjectLockFile="%(TestNugetProjectLockFile.FullPath)"
119                                TargetMonikers="@(TestTargetFramework)">
120       <Output TaskParameter="ResolvedCopyLocalItems" ItemName="RequiredAssemblies" />
121     </PrereleaseResolveNuGetPackageAssets>
122
123
124     <ItemGroup>
125       <AssemblyPaths Include="$([MSBuild]::MakeRelative($(PackagesDir), %(RequiredAssemblies.FullPath)))" />
126       <AssemblyFiles Include="@(RequiredAssemblies->'%(FileName)%(Extension)')"></AssemblyFiles>
127       <DupeAssemblies Include="%(AssemblyFiles.Identity)" Condition="'@(AssemblyFiles->Count())' &gt; 1"> </DupeAssemblies>
128     </ItemGroup>
129     <!-- There are duplicate dependency assemblies calculated for some projects that we need to fix, this is check/fix to weed out duplicates -->
130     <RemoveDuplicateAssemblies AssemblyPaths="@(AssemblyPaths)" DuplicateAssemblies="@(DupeAssemblies)">
131       <Output TaskParameter="UniqueAssemblyPaths" ItemName="UniqueAssemblyPaths" />
132     </RemoveDuplicateAssemblies>
133
134     <WriteLinesToFile
135       File="$(OutDir)/assemblylist.flat.txt"
136       Lines="@(UniqueAssemblyPaths)"
137       Overwrite="true"
138       Encoding="Ascii" />
139
140     <GenerateAssemblyList
141       InputListLocation="$(OutDir)assemblylist.flat.txt"
142       OutputListLocation="$(OutDir)assemblylist.txt"
143      />
144
145     <Message Text="Archiving Perf test assemblies for project: $(OutDir)" Importance="High" />
146     <MSBuild Projects="$(MSBuildProjectFile)" Properties="OutDir=$(OutDir);TestArchiveDir=$(TestArchiveDir);TestProjectName=$(TestProjectName)" Targets="ArchiveTestBuild"/>
147   </Target>
148 </Project>