Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 21 additions & 4 deletions src/Microsoft.DotNet.Arcade.Sdk/tools/OptimizationData.targets
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
<!--
Properties:
IbcOptimizationDataDir The directory containing IBC optimization data. Optimization data are not applied if unset.
EnableNgenOptimization Set to true to enable NGEN optimization (partial or full).
ApplyNgenOptimization Set to 'partial' or 'full' in a project to embed partial/full NGEN optimization data to the built binary.

Obsolete (https://github.com/dotnet/arcade/issues/2092):
EnablePartialNgenOptimization Set to true to enable Partial NGEN optimization data embedding.
ApplyPartialNgenOptimization Set to true in a project to apply Partial NGEN optimization data to the built binary.

Expand All @@ -17,7 +21,12 @@

<PropertyGroup>
<PostCompileBinaryModificationSentinelFile>$(IntermediateOutputPath)$(TargetFileName).pcbm</PostCompileBinaryModificationSentinelFile>

<!-- TODO: remove (https://github.com/dotnet/arcade/issues/2092) -->
<EnablePartialNgenOptimization Condition="'$(EnablePartialNgenOptimization)' == '' and '$(Configuration)' == 'Release' and '$(OfficialBuild)' == 'true'">true</EnablePartialNgenOptimization>

<EnableNgenOptimization Condition="'$(EnableNgenOptimization)' == ''">$(EnablePartialNgenOptimization)</EnableNgenOptimization>
<ApplyNgenOptimization Condition="'$(ApplyPartialNgenOptimization)' == 'true'">partial</ApplyNgenOptimization>
</PropertyGroup>

<!--
Expand All @@ -27,7 +36,7 @@
<Target Name="PostCompileBinaryModification"
AfterTargets="CoreCompile"
DependsOnTargets="_InitializeAssemblyOptimizationWithTargetAssembly;ApplyOptimizations"
Condition="'$(IsWpfTempProject)' != 'true' and '$(EnablePartialNgenOptimization)' == 'true' and '$(ApplyPartialNgenOptimization)' == 'true'"
Condition="'$(IsWpfTempProject)' != 'true' and '$(EnableNgenOptimization)' == 'true' and '$(ApplyNgenOptimization)' != ''"
Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)"
Outputs="@(IntermediateAssembly);$(PostCompileBinaryModificationSentinelFile)">

Expand Down Expand Up @@ -56,6 +65,9 @@

<Target Name="_CalculateIbcMergeInvocations">

<Error Text="Unexpected value specified for NgenOptimization: '$(ApplyNgenOptimization)'"
Condition="'$(ApplyNgenOptimization)' != 'partial' and '$(ApplyNgenOptimization)' != 'full'"/>

<Error Text="Directory specified in IbcOptimizationDataDir does not exist: '$(IbcOptimizationDataDir)'"
Condition="!Exists('$(IbcOptimizationDataDir)')" />

Expand Down Expand Up @@ -100,6 +112,11 @@
<Output TaskParameter="GroupedItems" ItemName="_AssemblyWithRawIbcData" />
</Microsoft.DotNet.Arcade.Sdk.GroupItemsBy>

<PropertyGroup>
<_PartialNgenArg/>
<_PartialNgenArg Condition="'$(ApplyNgenOptimization)' == 'partial'">-partialNGEN</_PartialNgenArg>
</PropertyGroup>

<ItemGroup>
<_IbcMergeInvocation Include="%(_AssemblyWithRawIbcData.AssemblyFileName) [MergeRawToPrevious]">
<CopyFilesSource>%(_AssemblyWithRawIbcData.PreviousAssemblyPath)</CopyFilesSource>
Expand All @@ -108,15 +125,15 @@
<!--
-delete to delete data previously embedded in the binary.
-->
<IbcMergeArgs>-q -f -partialNGEN -minify -delete -mo "%(_AssemblyWithRawIbcData.PreviousAssemblyCopyPath)" "$([MSBuild]::ValueOrDefault('%(_AssemblyWithRawIbcData.IbcFiles)', '').Replace(';', '" "'))"</IbcMergeArgs>
<IbcMergeArgs>-q -f $(_PartialNgenArg) -minify -delete -mo "%(_AssemblyWithRawIbcData.PreviousAssemblyCopyPath)" "$([MSBuild]::ValueOrDefault('%(_AssemblyWithRawIbcData.IbcFiles)', '').Replace(';', '" "'))"</IbcMergeArgs>
</_IbcMergeInvocation>

<_IbcMergeInvocation Include="%(_AssemblyWithRawIbcData.AssemblyFileName) [MergePreviousToCurrent]">
<!--
-delete to delete data previously embedded in the binary. This is a no-op for binaries produced by this build, but is needed for dependencies such as System.Reflection.Metadata.
-incremental to map data stored in the optimized binary, which comes from a previous build, to the new build of the binary.
-->
<IbcMergeArgs>-q -f -partialNGEN -minify -delete -mo "%(_AssemblyWithRawIbcData.OptimizeAssemblyPath)" -incremental "%(_AssemblyWithRawIbcData.PreviousAssemblyCopyPath)"</IbcMergeArgs>
<IbcMergeArgs>-q -f $(_PartialNgenArg) -minify -delete -mo "%(_AssemblyWithRawIbcData.OptimizeAssemblyPath)" -incremental "%(_AssemblyWithRawIbcData.PreviousAssemblyCopyPath)"</IbcMergeArgs>

<UnsignFile>%(_AssemblyWithRawIbcData.OptimizeAssemblyPath)</UnsignFile>
</_IbcMergeInvocation>
Expand All @@ -131,7 +148,7 @@
-->
<Target Name="ApplyOptimizations"
DependsOnTargets="_LocateIbcMerge;_CalculateIbcMergeInvocations"
Condition="'@(OptimizeAssembly)' != '' and '$(EnablePartialNgenOptimization)' == 'true' and '$(ApplyPartialNgenOptimization)' == 'true'">
Condition="'@(OptimizeAssembly)' != '' and '$(EnableNgenOptimization)' == 'true' and '$(ApplyNgenOptimization)' != ''">

<Message Text='IBCMerge tool will be run in an official build with arguments: %(_IbcMergeInvocation.IbcMergeArgs)'
Condition="'$(_RunIbcMerge)' != 'true'"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,20 @@
<UsingTask AssemblyFile="$(_VisualStudioBuildTasksAssembly)" TaskName="Microsoft.DotNet.Build.Tasks.VisualStudio.FindLatestDrop"/>

<PropertyGroup>
<!-- TODO: remove (https://github.com/dotnet/arcade/issues/2092) -->
<EnablePartialNgenOptimization Condition="'$(EnablePartialNgenOptimization)' == '' and '$(Configuration)' == 'Release' and '$(OfficialBuild)' == 'true'">true</EnablePartialNgenOptimization>

<EnableNgenOptimization Condition="'$(EnableNgenOptimization)' == ''">$(EnablePartialNgenOptimization)</EnableNgenOptimization>
</PropertyGroup>

<!--
Acquire optimization data from VS drop, unless suppressed by setting EnablePartialNgenOptimization to false.
Acquire optimization data from VS drop, unless suppressed by setting EnableNgenOptimization to false.
Find the latest optimization data drop and downloads it to IbcOptimizationDataDir directory.
-->
<Target Name="_AcquireVisualStudioOptimizationData"
DependsOnTargets="_PrepareAcquireVisualStudioOptimizationData;_DownloadVisualStudioOptimizationDataOpt"
AfterTargets="Restore"
Condition="'$(EnablePartialNgenOptimization)' == 'true'">
Condition="'$(EnableNgenOptimization)' == 'true'">
</Target>

<Target Name="_PrepareAcquireVisualStudioOptimizationData">
Expand All @@ -45,9 +48,9 @@
</Target>

<Target Name="_DownloadVisualStudioOptimizationDataOpt" Condition="$(_DropToolExists)">
<Error Text="VisualStudioDropAccessToken property has to be specified when EnablePartialNgenOptimization and OfficialBuild is true" Condition="'$(VisualStudioDropAccessToken)' == '' and '$(OfficialBuild)' == 'true'"/>
<Error Text="RepositoryName property has to be specified when EnablePartialNgenOptimization is true" Condition="'$(RepositoryName)' == ''"/>
<Error Text="VisualStudioIbcSourceBranchName property has to be specified when EnablePartialNgenOptimization is true" Condition="'$(VisualStudioIbcSourceBranchName)' == ''"/>
<Error Text="VisualStudioDropAccessToken property has to be specified when EnableNgenOptimization and OfficialBuild is true" Condition="'$(VisualStudioDropAccessToken)' == '' and '$(OfficialBuild)' == 'true'"/>
<Error Text="RepositoryName property has to be specified when EnableNgenOptimization is true" Condition="'$(RepositoryName)' == ''"/>
<Error Text="VisualStudioIbcSourceBranchName property has to be specified when EnableNgenOptimization is true" Condition="'$(VisualStudioIbcSourceBranchName)' == ''"/>

<PropertyGroup>
<_DropServiceUrl>https://devdiv.artifacts.visualstudio.com</_DropServiceUrl>
Expand Down