提交 6dae786c 编写于 作者: T Tomas Matousek

Embed optimization data to external compiler dependencies

上级 fb5addef
......@@ -6,6 +6,8 @@
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
<UsingTask TaskName="RoslynTools.Unsign" AssemblyFile="$(RoslynToolsBuildTasksAssembly)" />
<!--
Required properties:
IbcOptimizationDataDir The directory containing IBC optimization data.
......@@ -79,6 +81,9 @@
<Output TaskParameter="ConsoleOutput" PropertyName="IbcMergeOutput" />
</Exec>
<!-- Remove Authenticode signing record if present. -->
<RoslynTools.Unsign FilePath="%(OptimizeAssembly.Identity)" />
<Message Text="$(IbcMergeOutput)" />
</Target>
......
......@@ -18,6 +18,7 @@
<Import Project="RepoToolset\ProjectLayout.props" />
<Import Project="RepoToolset\DefaultVersions.props"/>
<Import Project="RepoToolset\ProjectDefaults.props" />
<Import Project="RepoToolset\BuildTasks.props" />
<Import Project="RepoToolset\StrongName.props" />
<Import Project="RepoToolset\VisualStudio.props"/>
<Import Project="Tools.props" />
......
......@@ -17,6 +17,10 @@
Ngen* attributes indicate how VS should NGEN the assemblies that are distributed by VS Setup.
NgenApplication is relative to the Roslyn install directory within MSBuild (i.e. MSBuild\15.0\Bin\Roslyn).
Set OverwriteOptimizationData to true to replace optimization data already embedded in the assembly with data retrieved from VS training scenarios.
We only need to specify this for assemblies built outside or Roslyn repo since the projects in Roslyn repo are responsible for embedding
VS training data to the assemblies they produce.
-->
<Target Name="InitializeCompilerArtifacts">
......@@ -44,7 +48,16 @@
<CompilerArtifact Include="$(_Dlls)Microsoft.Build.Tasks.CodeAnalysis\net472\Microsoft.Managed.Core.targets"/>
<CompilerArtifact Include="$(_Dlls)Microsoft.Build.Tasks.CodeAnalysis\net472\Microsoft.CSharp.Core.targets"/>
<CompilerArtifact Include="$(_Dlls)Microsoft.Build.Tasks.CodeAnalysis\net472\Microsoft.VisualBasic.Core.targets"/>
<CompilerArtifact Include="$(_Exes)csi\net472\System.*.dll" NgenArchitecture="all" NgenApplication="VBCSCompiler.exe"/>
<!--
Do not overwrite optimization data of System.Threading.Tasks.Extensions.dll
This assembly is signed by Open key in CoreFX and MicroBuild does not support this key.
Arcade SignTool doesn't support signing directly at this point either.
https://github.com/dotnet/arcade/issues/1204
-->
<CompilerArtifact Include="$(_Exes)csi\net472\System.*.dll" Exclude="$(_Exes)csi\net472\System.Threading.Tasks.Extensions.dll" NgenArchitecture="all" NgenApplication="VBCSCompiler.exe" OverwriteOptimizationData="true"/>
<CompilerArtifact Include="$(_Exes)csi\net472\System.Threading.Tasks.Extensions.dll" NgenArchitecture="all" NgenApplication="VBCSCompiler.exe" OverwriteOptimizationData="false"/>
</ItemGroup>
</Target>
</Project>
\ No newline at end of file
......@@ -45,7 +45,6 @@
<!--
Workaround for https://github.com/dotnet/roslyn/issues/17864.
-->
<Import Project="..\..\..\build\Targets\RepoToolset\BuildTasks.props"/>
<UsingTask TaskName="RoslynTools.SetCorFlags" AssemblyFile="$(RoslynToolsBuildTasksAssembly)" />
<Target Name="_Generate32BitCsc"
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -->
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\build\Targets\RepoToolset\BuildTasks.props"/>
<PropertyGroup>
<_NuGetRepackAssembly Condition="'$(MSBuildRuntimeType)' != 'Core'">$(NuGetPackageRoot)roslyntools.nugetrepack.buildtasks\$(RoslynToolsNuGetRepackVersion)\tools\net472\RoslynTools.NuGetRepack.BuildTasks.dll</_NuGetRepackAssembly>
......@@ -10,7 +9,6 @@
<UsingTask TaskName="RoslynTools.GetAssemblyFullName" AssemblyFile="$(RoslynToolsBuildTasksAssembly)" />
<UsingTask TaskName="RoslynTools.Unzip" AssemblyFile="$(RoslynToolsBuildTasksAssembly)" />
<UsingTask TaskName="RoslynTools.Unsign" AssemblyFile="$(RoslynToolsBuildTasksAssembly)" />
<UsingTask TaskName="Microsoft.NET.Build.Tasks.JoinItems" AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />
<UsingTask TaskName="Roslyn.Tools.ReplacePackageParts" AssemblyFile="$(_NuGetRepackAssembly)" />
......@@ -55,6 +53,7 @@
Do not optimize this binary for now.
This assembly is signed by Open key in CoreFX and MicroBuild does not support this key.
Arcade SignTool doesn't support signing directly at this point either.
https://github.com/dotnet/arcade/issues/1204
-->
<ExpectedDependency Include="System.Threading.Tasks.Extensions" DevEnvLib="lib/netstandard2.0/System.Threading.Tasks.Extensions.dll" Optimize="false" />
</ItemGroup>
......@@ -165,8 +164,6 @@
<RoslynTools.Unzip SourceFiles="%(_DependencyWithOptimizationData._NuGetPackageDir)%(_DependencyWithOptimizationData._NuGetPackageFileName)"
DestinationFolder="%(_DependencyWithOptimizationData._UnpackDir)" />
<RoslynTools.Unsign FilePath="%(_DependencyWithOptimizationData._OptimizeAssembly)" />
</Target>
<!--
......
......@@ -22,23 +22,60 @@
<_SwrFilePath>$(IntermediateOutputPath)Microsoft.CodeAnalysis.Compilers.swr</_SwrFilePath>
</PropertyGroup>
</Target>
<!--
Calculates which external dependencies included in the target VSIX need to be updated with optimization data.
-->
<Target Name="_CalculateCompilerArtifactsToOptimize"
DependsOnTargets="InitializeCompilerArtifacts">
<ItemGroup>
<CompilerArtifact Condition="'%(CompilerArtifact.OverwriteOptimizationData)' == 'true'">
<_PreviousOptimizedFile>$([System.IO.Path]::Combine($(IbcOptimizationDataDir), '$([System.IO.Path]::GetFileNameWithoutExtension(%(CompilerArtifact.Identity))).pgo'))</_PreviousOptimizedFile>
<_OptimizeAssembly>$(IntermediateOutputPath)optimized\$([System.IO.Path]::GetFileName(%(CompilerArtifact.Identity)))</_OptimizeAssembly>
</CompilerArtifact>
<CompilerArtifact Condition="!Exists(%(CompilerArtifact._PreviousOptimizedFile))">
<_PreviousOptimizedFile/>
<_OptimizeAssembly/>
</CompilerArtifact>
<OptimizeAssembly Include="@(CompilerArtifact->'%(_OptimizeAssembly)')"
PreviousOptimizedFile="%(CompilerArtifact._PreviousOptimizedFile)"
Condition="'%(CompilerArtifact._OptimizeAssembly)' != ''" />
</ItemGroup>
</Target>
<!--
Copies the artifacts that need optimization data to an intermediate output dir.
-->
<Target Name="_PrepareCompilerArtifactsForOptimization"
DependsOnTargets="_CalculateCompilerArtifactsToOptimize"
Inputs="@(CompilerArtifact)"
Outputs="@(CompilerArtifact->'%(_OptimizeAssembly)')"
Condition="'$(Configuration)' == 'Release' and '$(ContinuousIntegrationBuild)' == 'true'">
<Copy SourceFiles="%(CompilerArtifact.Identity)" DestinationFiles="%(CompilerArtifact._OptimizeAssembly)" Condition="'%(CompilerArtifact._OptimizeAssembly)' != ''">
<Output TaskParameter="CopiedFiles" ItemName="FileWrites"/>
</Copy>
</Target>
<Target Name="_GenerateSwrFile"
AfterTargets="Build"
BeforeTargets="SwixBuild"
DependsOnTargets="_SetSwrFilePath;InitializeCompilerArtifacts"
DependsOnTargets="_SetSwrFilePath;InitializeCompilerArtifacts;_PrepareCompilerArtifactsForOptimization;ApplyOptimizations"
Outputs="$(_SwrFilePath)">
<ItemGroup>
<_File Include="@(CompilerArtifact)">
<Path Condition="'%(CompilerArtifact._OptimizeAssembly)' == ''">%(CompilerArtifact.Identity)</Path>
<Path Condition="'%(CompilerArtifact._OptimizeAssembly)' != ''">%(CompilerArtifact._OptimizeAssembly)</Path>
<NGenArchitectureString Condition="'%(CompilerArtifact.NgenArchitecture)' != ''"> vs.file.ngenArchitecture=%(CompilerArtifact.NgenArchitecture)</NGenArchitectureString>
<NGenPriorityString Condition="'%(CompilerArtifact.NGenPriority)' != ''"> vs.file.ngenPriority=%(CompilerArtifact.NGenPriority)</NGenPriorityString>
<NGenApplicationString Condition="'%(CompilerArtifact.NGenApplication)' != ''"> vs.file.ngenApplication="[installDir]\MSBuild\15.0\Bin\Roslyn\%(CompilerArtifact.NGenApplication)"</NGenApplicationString>
</_File>
</ItemGroup>
<ItemGroup>
<_FileEntries Include='file source="%(_File.Identity)"%(_File.NGenArchitectureString)%(_File.NGenPriorityString)%(_File.NGenApplicationString)'/>
<_FileEntries Include='file source="%(_File.Path)"%(_File.NGenArchitectureString)%(_File.NGenPriorityString)%(_File.NGenApplicationString)'/>
</ItemGroup>
<PropertyGroup>
......@@ -70,6 +107,6 @@ folder InstallDir:\Common7\Tools\vsdevcmd\ext
<SwrFile Include="$(_SwrFilePath)"/>
</ItemGroup>
</Target>
<Import Project="..\..\..\NuGet\Microsoft.Net.Compilers\CompilerArtifacts.targets"/>
</Project>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册