Skip to content

Commit faf883d

Browse files
sbomerViktorHofer
andauthored
Use live illink to trim framework (#91233)
* Use live illink * Include ILLink.Tasks for subsets that depend on it Also prevent build-native.proj from importing illink.targets. * Address feedback - Don't reference ILLink.Tasks from subsets - Use PackageReference from illink.tasks - Import props from source directory Add extensibility to shipping targets to make this possible. - Set IsSourceProject false for .proj files * Fix TFM, Configuration, PrivateAssets * Address feedback Avoid needing to reorganize SDK imports * Fix typo * Fix configuration in ToolsILLinkDir * Don't change IsSourceProject * Update eng/illink.targets Co-authored-by: Viktor Hofer <[email protected]> * Fix tools configuration * Normalize directory separator chars We agreed on (at least under src/libraries) to use the Windows directory separator char `\` instead of a forward slash. This helps when looking at binlogs as those then correctly display a path. --------- Co-authored-by: Viktor Hofer <[email protected]>
1 parent 7cdc7fe commit faf883d

File tree

8 files changed

+35
-20
lines changed

8 files changed

+35
-20
lines changed

Directory.Build.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@
137137
<LibrariesConfiguration Condition="'$(LibrariesConfiguration)' == ''">$(Configuration)</LibrariesConfiguration>
138138
<HostConfiguration Condition="'$(HostConfiguration)' == ''">$(Configuration)</HostConfiguration>
139139
<TasksConfiguration Condition="'$(TasksConfiguration)' == ''">$(Configuration)</TasksConfiguration>
140+
<ToolsConfiguration Condition="'$(ToolsConfiguration)' == ''">$(Configuration)</ToolsConfiguration>
140141
</PropertyGroup>
141142

142143
<PropertyGroup>

eng/Subsets.props

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,11 +558,13 @@
558558
<AdditionalProperties Condition="'%(ProjectToBuild.Category)' == 'libs'">%(AdditionalProperties);Configuration=$(LibrariesConfiguration)</AdditionalProperties>
559559
<AdditionalProperties Condition="'%(ProjectToBuild.Category)' == 'host'">%(AdditionalProperties);Configuration=$(HostConfiguration)</AdditionalProperties>
560560
<AdditionalProperties Condition="'%(ProjectToBuild.Category)' == 'tasks'">%(AdditionalProperties);Configuration=$(TasksConfiguration)</AdditionalProperties>
561+
<AdditionalProperties Condition="'%(ProjectToBuild.Category)' == 'tools'">%(AdditionalProperties);Configuration=$(ToolsConfiguration)</AdditionalProperties>
561562

562563
<!-- Propagate configurations for cross-subset builds -->
563564
<AdditionalProperties>%(AdditionalProperties);LibrariesConfiguration=$(LibrariesConfiguration)</AdditionalProperties>
564565
<AdditionalProperties>%(AdditionalProperties);HostConfiguration=$(HostConfiguration)</AdditionalProperties>
565566
<AdditionalProperties>%(AdditionalProperties);TasksConfiguration=$(TasksConfiguration)</AdditionalProperties>
567+
<AdditionalProperties>%(AdditionalProperties);ToolsConfiguration=$(ToolsConfiguration)</AdditionalProperties>
566568
</ProjectToBuild>
567569
</ItemGroup>
568570

eng/illink.targets

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
11
<Project>
22

3+
<PropertyGroup>
4+
<_ILLinkTasksSourceDir>$(ToolsProjectRoot)illink\src\ILLink.Tasks\</_ILLinkTasksSourceDir>
5+
<ILLinkAnalyzersPropsPath>$(ToolsProjectRoot)illink\src\ILLink.RoslynAnalyzer\build\Microsoft.NET.ILLink.Analyzers.props</ILLinkAnalyzersPropsPath>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<!-- SkipGetTargetFrameworkProperties builds ILLink.Tasks without any TargetFramework settings
10+
based on the referencing project, preventing errors when illink.targets is imported by a
11+
project with TargetFrameworks that are incompatible with those of ILLink.Tasks. -->
12+
<ProjectReference Include="$(_ILLinkTasksSourceDir)ILLink.Tasks.csproj"
13+
ReferenceOutputAssembly="false"
14+
PrivateAssets="all"
15+
SetConfiguration="Configuration=$(ToolsConfiguration)">
16+
<!-- Keep TFMs in sync with ILLink.Tasks.csproj -->
17+
<SetTargetFramework Condition="'$(MSBuildRuntimeType)' == 'Core'">TargetFramework=$(NetCoreAppToolCurrent)</SetTargetFramework>
18+
<SetTargetFramework Condition="'$(MSBuildRuntimeType)' != 'Core'">TargetFramework=$(NetFrameworkToolCurrent)</SetTargetFramework>
19+
</ProjectReference>
20+
</ItemGroup>
21+
22+
<Import Project="$(_ILLinkTasksSourceDir)build\Microsoft.NET.ILLink.Tasks.props" />
23+
324
<PropertyGroup>
425
<IsTrimmable Condition="'$(IsTrimmable)' == ''">true</IsTrimmable>
526
<!-- Don't use SDK's trimming functionality.
@@ -10,6 +31,7 @@
1031
we might be able to use built-in functionality instead of a packagereference.
1132
-->
1233
<_RequiresILLinkPack>false</_RequiresILLinkPack>
34+
<ILLinkTasksAssembly>$(ToolsILLinkDir)$(NetCoreAppToolCurrent)/ILLink.Tasks.dll</ILLinkTasksAssembly>
1335
<PrepareResourcesDependsOn>_EmbedILLinkXmls;$(PrepareResourcesDependsOn)</PrepareResourcesDependsOn>
1436
<TargetsTriggeredByCompilation Condition="'$(DesignTimeBuild)' != 'true'">$(TargetsTriggeredByCompilation);ILLinkTrimAssembly</TargetsTriggeredByCompilation>
1537

@@ -43,14 +65,6 @@
4365
<GenerateResourcesSubstitutions Condition="'$(GenerateResourcesSubstitutions)' == '' and '$(StringResourcesPath)' != ''">true</GenerateResourcesSubstitutions>
4466
</PropertyGroup>
4567

46-
<!-- Use ILLink.Tasks version matching the SDK used to build. See comment about _RequiresILLinkPack. -->
47-
<PropertyGroup>
48-
<SuppressILLinkExplicitPackageReferenceWarning>true</SuppressILLinkExplicitPackageReferenceWarning>
49-
</PropertyGroup>
50-
<ItemGroup>
51-
<PackageReference Include="Microsoft.NET.ILLink.Tasks" Version="$(BundledNETCoreAppPackageVersion)" PrivateAssets="all" />
52-
</ItemGroup>
53-
5468
<ItemGroup>
5569
<ILLinkSuppressionsXmls Include="$(ILLinkSuppressionsXmlFile)"
5670
Condition="Exists('$(ILLinkSuppressionsXmlFile)')" />

eng/liveBuilds.targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<CoreCLRAotSdkDir>$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)', 'aotsdk'))</CoreCLRAotSdkDir>
3030
<CoreCLRBuildIntegrationDir>$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)', 'build'))</CoreCLRBuildIntegrationDir>
3131

32-
<ToolsILLinkDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'ILLink.Tasks', '$(Configuration)'))</ToolsILLinkDir>
32+
<ToolsILLinkDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'ILLink.Tasks', '$(ToolsConfiguration)'))</ToolsILLinkDir>
3333

3434
<MonoAotCrossDir>$([MSBuild]::NormalizeDirectory('$(MonoArtifactsPath)', 'cross', $(TargetOS)-$(TargetArchitecture.ToLowerInvariant())))</MonoAotCrossDir>
3535
<GrpcServerDockerImageDir>$([MSBuild]::NormalizeDirectory('$(LibrariesArtifactsPath)', 'obj', 'grpcserver', 'docker'))</GrpcServerDockerImageDir>

src/libraries/Directory.Build.targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@
127127
<Import Project="$(RepositoryEngineeringDir)testing\coverage.targets" Condition="'$(EnableRunSettingsSupport)' == 'true' or '$(EnableCoverageSupport)' == 'true'" />
128128
<Import Project="$(RepositoryEngineeringDir)slngen.targets" Condition="'$(IsSlnGen)' == 'true'" />
129129

130-
<Import Project="$(RepositoryEngineeringDir)illink.targets" Condition="'$(IsSourceProject)' == 'true'" />
130+
<Import Project="$(RepositoryEngineeringDir)illink.targets" Condition="'$(IsSourceProject)' == 'true' or '$(ExplicitlyImportCustomILLinkTargets)' == 'true'" />
131131
<Import Project="$(RepositoryEngineeringDir)AvoidRestoreCycleOnSelfReference.targets" Condition="'$(AvoidRestoreCycleOnSelfReference)' == 'true'" />
132132
<Import Project="$(RepositoryEngineeringDir)nativeSanitizers.targets" />
133133

src/libraries/oob.proj

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
<TargetFramework>$(NetCoreAppCurrent)-$(TargetOS)</TargetFramework>
55
<!-- By default, build the NetCoreAppCurrent vertical only. -->
66
<BuildTargetFramework Condition="'$(BuildAllConfigurations)' != 'true'">$(NetCoreAppCurrent)</BuildTargetFramework>
7+
<!-- Import the illink file which contains some of the logic required to illink the out-of-band assemblies. -->
8+
<ExplicitlyImportCustomILLinkTargets Condition="'$(BuildTargetFramework)' == '$(NetCoreAppCurrent)' or '$(BuildTargetFramework)' == ''">true</ExplicitlyImportCustomILLinkTargets>
79
</PropertyGroup>
810

911
<ItemGroup Condition="'$(BuildTargetFramework)' == '$(NetCoreAppCurrent)' or '$(BuildTargetFramework)' == ''">
@@ -25,11 +27,6 @@
2527
<ProjectReference Include="oob-ref.proj" />
2628
</ItemGroup>
2729

28-
<ImportGroup Condition="'$(BuildTargetFramework)' == '$(NetCoreAppCurrent)' or '$(BuildTargetFramework)' == ''">
29-
<!-- Import the illink file which contains some of the logic required to illink the out-of-band assemblies. -->
30-
<Import Project="$(RepositoryEngineeringDir)illink.targets" />
31-
</ImportGroup>
32-
3330
<Target Name="GetTrimOOBAssembliesInputs"
3431
DependsOnTargets="ResolveProjectReferences">
3532
<PropertyGroup>

src/libraries/sfx.proj

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
<BuildInParallel>false</BuildInParallel>
88
<IsPackable>false</IsPackable>
99
<FrameworkListOutputPath>$(MicrosoftNetCoreAppRefPackDataDir)FrameworkList.xml</FrameworkListOutputPath>
10+
<!-- Import the illink file which contains some of the logic required to illink the shared framework assemblies. -->
11+
<ExplicitlyImportCustomILLinkTargets>true</ExplicitlyImportCustomILLinkTargets>
1012
</PropertyGroup>
1113

1214
<ItemGroup>
@@ -71,9 +73,6 @@
7173
UseHardlinksIfPossible="true" />
7274
</Target>
7375

74-
<!-- Import the illink file which contains some of the logic required to illink the shared framework assemblies. -->
75-
<Import Project="$(RepositoryEngineeringDir)illink.targets" />
76-
7776
<Target Name="GetTrimSharedFrameworkAssembliesInputs"
7877
DependsOnTargets="ResolveProjectReferences">
7978
<PropertyGroup>

src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.Tasks.props

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,16 @@ Copyright (c) .NET Foundation. All rights reserved.
1414
<PropertyGroup>
1515
<!-- N.B. The ILLinkTargetsPath is used as a sentinel to indicate a version of this file has already been imported. It will also be the path
1616
used to import the targets later in the SDK. -->
17-
<ILLinkTargetsPath>$(MSBuildThisFileDirectory)Microsoft.NET.ILLink.targets</ILLinkTargetsPath>
17+
<ILLinkTargetsPath Condition="'$(ILLinkTargetsPath)' == ''">$(MSBuildThisFileDirectory)Microsoft.NET.ILLink.targets</ILLinkTargetsPath>
1818
<!-- Older SDKs used this property as a sentinel instead, to control the import of this file
1919
(but not the targets, which were included with the SDK). -->
2020
<UsingILLinkTasksSdk>true</UsingILLinkTasksSdk>
2121
<ILLinkTasksAssembly Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net8.0\ILLink.Tasks.dll</ILLinkTasksAssembly>
2222
<ILLinkTasksAssembly Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\net472\ILLink.Tasks.dll</ILLinkTasksAssembly>
23+
24+
<ILLinkAnalyzersPropsPath Condition="'$(ILLinkAnalyzersPropsPath)' == ''">$(MSBuildThisFileDirectory)Microsoft.NET.ILLink.Analyzers.props</ILLinkAnalyzersPropsPath>
2325
</PropertyGroup>
2426

25-
<Import Project="Microsoft.NET.ILLink.Analyzers.props" />
27+
<Import Project="$(ILLinkAnalyzersPropsPath)" />
2628

2729
</Project>

0 commit comments

Comments
 (0)