Skip to content

Commit 80eae6a

Browse files
authored
[Windows] Simplify LoadLinkerOutput (#23473)
This aims to improve reading the linker output files remotely from Windows by executing the `ReadItemsFromFile` task once (and having a single network roundtrip). This is a minor improvent as in a fast connection this improves in around ~150ms (~340ms to ~70ms), but in a slow one it could make a big difference. Fixes #19601
1 parent ca505ca commit 80eae6a

File tree

2 files changed

+43
-53
lines changed

2 files changed

+43
-53
lines changed

dotnet/targets/Xamarin.Shared.Sdk.targets

Lines changed: 38 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -998,58 +998,45 @@
998998

999999

10001000
<Target Name="_LoadLinkerOutput" DependsOnTargets="ComputeFilesToPublish" Condition="'$(IsMacEnabled)' == 'true'">
1001-
<!-- Load _MainFile -->
1002-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_MainFile.items" Condition="Exists('$(_LinkerItemsDirectory)/_MainFile.items')">
1003-
<Output TaskParameter="Items" ItemName="_MainFile" />
1004-
</ReadItemsFromFile>
1005-
<!-- Load _MainLinkWith -->
1006-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_MainLinkWith.items" Condition="Exists('$(_LinkerItemsDirectory)/_MainLinkWith.items')">
1007-
<Output TaskParameter="Items" ItemName="_MainLinkWith" />
1008-
</ReadItemsFromFile>
1009-
<!-- Load _LinkerFrameworks -->
1010-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_LinkerFrameworks.items" Condition="Exists('$(_LinkerItemsDirectory)/_LinkerFrameworks.items')">
1011-
<Output TaskParameter="Items" ItemName="_LinkerFrameworks" />
1012-
</ReadItemsFromFile>
1013-
<!-- Load _BindingLibraryLinkWith -->
1014-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_BindingLibraryLinkWith.items" Condition="Exists('$(_LinkerItemsDirectory)/_BindingLibraryLinkWith.items')">
1015-
<Output TaskParameter="Items" ItemName="_BindingLibraryLinkWith" />
1016-
</ReadItemsFromFile>
1017-
<!-- Load _AssemblyLinkerFlags -->
1018-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_AssemblyLinkerFlags.items" Condition="Exists('$(_LinkerItemsDirectory)/_AssemblyLinkerFlags.items')">
1019-
<Output TaskParameter="Items" ItemName="_AssemblyLinkerFlags" />
1020-
</ReadItemsFromFile>
1021-
<!-- Load _MainLinkerFlags -->
1022-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_MainLinkerFlags.items" Condition="Exists('$(_LinkerItemsDirectory)/_MainLinkerFlags.items')">
1023-
<Output TaskParameter="Items" ItemName="_MainLinkerFlags" />
1024-
</ReadItemsFromFile>
1025-
<!-- Load _BindingLibraryFrameworks -->
1026-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_BindingLibraryFrameworks.items" Condition="Exists('$(_LinkerItemsDirectory)/_BindingLibraryFrameworks.items')">
1027-
<Output TaskParameter="Items" ItemName="_BindingLibraryFrameworks" />
1028-
</ReadItemsFromFile>
1029-
<!-- Load _RegistrarFile -->
1030-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_RegistrarFile.items" Condition="Exists('$(_LinkerItemsDirectory)/_RegistrarFile.items')">
1031-
<Output TaskParameter="Items" ItemName="_RegistrarFile" />
1032-
</ReadItemsFromFile>
1033-
<!-- Load _ReferencesFile -->
1034-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_ReferencesFile.items" Condition="Exists('$(_LinkerItemsDirectory)/_ReferencesFile.items')">
1035-
<Output TaskParameter="Items" ItemName="_ReferencesFile" />
1036-
</ReadItemsFromFile>
1037-
<!-- Load ReferenceNativeSymbol -->
1038-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/ReferenceNativeSymbol.items" Condition="Exists('$(_LinkerItemsDirectory)/ReferenceNativeSymbol.items')">
1039-
<Output TaskParameter="Items" ItemName="_ProcessedReferenceNativeSymbol" />
1040-
</ReadItemsFromFile>
1041-
<!-- Load _AssembliesToAOT -->
1042-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_AssembliesToAOT.items" Condition="Exists('$(_LinkerItemsDirectory)/_AssembliesToAOT.items')">
1043-
<Output TaskParameter="Items" ItemName="_AssembliesToAOT" />
1044-
</ReadItemsFromFile>
1045-
<!-- Load _FrameworkToPublish -->
1046-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_FrameworkToPublish.items" Condition="Exists('$(_LinkerItemsDirectory)/_FrameworkToPublish.items')">
1047-
<Output TaskParameter="Items" ItemName="_FrameworkToPublish" />
1048-
</ReadItemsFromFile>
1049-
<!-- Load _DynamicLibraryToPublish -->
1050-
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="$(_LinkerItemsDirectory)/_DynamicLibraryToPublish.items" Condition="Exists('$(_LinkerItemsDirectory)/_DynamicLibraryToPublish.items')">
1051-
<Output TaskParameter="Items" ItemName="_DynamicLibraryToPublish" />
1001+
<ItemGroup>
1002+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_MainFile.items" />
1003+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_MainLinkWith.items" />
1004+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_LinkerFrameworks.items" />
1005+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_BindingLibraryLinkWith.items" />
1006+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_AssemblyLinkerFlags.items" />
1007+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_MainLinkerFlags.items" />
1008+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_BindingLibraryFrameworks.items" />
1009+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_RegistrarFile.items" />
1010+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_ReferencesFile.items" />
1011+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/ReferenceNativeSymbol.items" />
1012+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_AssembliesToAOT.items" />
1013+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_FrameworkToPublish.items" />
1014+
<_LinkerItemFiles Include="$(_LinkerItemsDirectory)/_DynamicLibraryToPublish.items" />
1015+
</ItemGroup>
1016+
1017+
<ItemGroup>
1018+
<_ExistingLinkerItemFiles Include="@(_LinkerItemFiles)" Condition="Exists('%(Identity)')" />
1019+
</ItemGroup>
1020+
1021+
<ReadItemsFromFile SessionId="$(BuildSessionId)" File="@(_ExistingLinkerItemFiles)" Condition="'@(_ExistingLinkerItemFiles)' != ''">
1022+
<Output TaskParameter="Items" ItemName="_AllLinkerItems" />
10521023
</ReadItemsFromFile>
1024+
1025+
<ItemGroup>
1026+
<_MainFile Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_MainFile.items'" />
1027+
<_MainLinkWith Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_MainLinkWith.items'" />
1028+
<_LinkerFrameworks Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_LinkerFrameworks.items'" />
1029+
<_BindingLibraryLinkWith Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_BindingLibraryLinkWith.items'" />
1030+
<_AssemblyLinkerFlags Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_AssemblyLinkerFlags.items'" />
1031+
<_MainLinkerFlags Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_MainLinkerFlags.items'" />
1032+
<_BindingLibraryFrameworks Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_BindingLibraryFrameworks.items'" />
1033+
<_RegistrarFile Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_RegistrarFile.items'" />
1034+
<_ReferencesFile Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_ReferencesFile.items'" />
1035+
<_ProcessedReferenceNativeSymbol Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == 'ReferenceNativeSymbol.items'" />
1036+
<_AssembliesToAOT Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_AssembliesToAOT.items'" />
1037+
<_FrameworkToPublish Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_FrameworkToPublish.items'" />
1038+
<_DynamicLibraryToPublish Include="@(_AllLinkerItems)" Condition="'%(_AllLinkerItems.SourceFile)' == '_DynamicLibraryToPublish.items'" />
1039+
</ItemGroup>
10531040
</Target>
10541041

10551042
<!-- Native code -->

msbuild/Xamarin.MacDev.Tasks/Tasks/ReadItemsFromFile.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public override bool Execute ()
4747
var items = document.Root
4848
.Elements (ItemGroupElementName)
4949
.SelectMany (element => element.Elements ())
50-
.Select (element => this.CreateItemFromElement (element))
50+
.Select (element => this.CreateItemFromElement (element, file.ItemSpec))
5151
.ToList ();
5252
result.AddRange (items);
5353
}
@@ -60,14 +60,17 @@ public override bool Execute ()
6060
return true;
6161
}
6262

63-
private ITaskItem CreateItemFromElement (XElement element)
63+
ITaskItem CreateItemFromElement (XElement element, string sourceFile)
6464
{
6565
var item = new TaskItem (element.Attribute (IncludeAttributeName).Value);
6666

6767
foreach (var metadata in element.Elements ()) {
6868
item.SetMetadata (metadata.Name.LocalName, metadata.Value);
6969
}
7070

71+
// Set the SourceFile metadata to the file from which this item was read.
72+
item.SetMetadata ("SourceFile", Path.GetFileName (sourceFile));
73+
7174
return item;
7275
}
7376

0 commit comments

Comments
 (0)