Skip to content
Merged
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
30 changes: 30 additions & 0 deletions dotnet/targets/Microsoft.Sdk.R2R.targets
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,36 @@
<_UserAssemblies Include="@(_ResolvedAssembliesToPublish)" Exclude="@(_NonUserAssemblies)" />
<PublishReadyToRunExcludeTest Include="@(_UserAssemblies -> '%(Filename)')" />
</ItemGroup>

<!-- Hash the R2R input assemblies so we can detect when the set actually changes -->
<GetFileHash Files="@(_NonUserAssemblies)" Algorithm="SHA256">
<Output TaskParameter="Items" ItemName="_NonUserAssembliesWithHash" />
</GetFileHash>
<Hash ItemsToHash="@(_NonUserAssembliesWithHash->'%(FileHash)')" IgnoreCase="false">
<Output TaskParameter="HashResult" PropertyName="_R2RInputHash" />
</Hash>

<PropertyGroup>
<_R2RInputHashFile>$(IntermediateOutputPath)r2r-input.hash</_R2RInputHashFile>
</PropertyGroup>
<!-- Create trigger file before writing hash, so we can compare timestamps -->
<Touch Files="$(_R2RInputHashFile).trigger" AlwaysCreate="true" />

<WriteLinesToFile Lines="$(_R2RInputHash)" File="$(_R2RInputHashFile)" Overwrite="true" WriteOnlyWhenDifferent="true" />

<ItemGroup>
<FileWrites Include="$(_R2RInputHashFile)" />
<FileWrites Include="$(_R2RInputHashFile).trigger" />
</ItemGroup>
</Target>

<!-- Touch R2R outputs when only user assemblies changed. If hash file is older than trigger, hash didn't change, so touch outputs to skip R2R -->
<Target Name="_TouchR2ROutputs"
Condition="'$(FilterReadyToRunAssemblies)' == 'true' And Exists('$(_R2RInputHashFile)') And Exists('$(_R2RInputHashFile).trigger') And $([System.IO.File]::GetLastWriteTime('$(_R2RInputHashFile)').Ticks) &lt; $([System.IO.File]::GetLastWriteTime('$(_R2RInputHashFile).trigger').Ticks)"
AfterTargets="_PrepareForReadyToRunCompilation"
BeforeTargets="_CreateR2RImages">
<Touch Files="%(_ReadyToRunCompileList.OutputR2RImage)"
Condition="Exists('%(_ReadyToRunCompileList.OutputR2RImage)')" />
</Target>

<!--
Expand Down
Loading