This repository has been archived by the owner on Jan 23, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #17825 from ericstj/ILLinkTrimAssembly
Add ILLink to the build
- Loading branch information
Showing
16 changed files
with
280 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build"> | ||
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> | ||
<PropertyGroup> | ||
<NuGetTargetMoniker>.NETCoreApp,Version=v1.1</NuGetTargetMoniker> | ||
<OutputPath>$(ToolsDir)ILLink</OutputPath> | ||
<IsRuntimeAssembly>false</IsRuntimeAssembly> | ||
</PropertyGroup> | ||
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> | ||
<Target Name="IncludeAllFiles" | ||
AfterTargets="ResolveNuGetPackages"> | ||
<ItemGroup> | ||
<ReferenceCopyLocalPaths Include="%(ReferenceCopyLocalPaths.RootDir)%(ReferenceCopyLocalPaths.Directory)\*.*" /> | ||
</ItemGroup> | ||
</Target> | ||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
{ | ||
"dependencies": { | ||
"Microsoft.NETCore.ILLink": { | ||
"version": "0.1.8-preview", | ||
"exclude": "compile" | ||
} | ||
}, | ||
"frameworks": { | ||
"netcoreapp1.1": { } | ||
}, | ||
"runtimes": { | ||
"{RID}": {} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
<PropertyGroup> | ||
<TargetsTriggeredByCompilation> | ||
$(TargetsTriggeredByCompilation); | ||
_SetILLinkTrimAssembly; | ||
ILLinkTrimAssembly | ||
</TargetsTriggeredByCompilation> | ||
</PropertyGroup> | ||
|
||
<!-- Inputs and outputs of ILLinkTrimAssembly --> | ||
<PropertyGroup> | ||
<ILLinkToolPath Condition="'$(ILLinkToolPath)' == ''">$(ToolsDir)ILLink/illink.dll</ILLinkToolPath> | ||
<ILLinkTrimAssemblyPath>$(IntermediateOutputPath)$(TargetName)$(TargetExt)</ILLinkTrimAssemblyPath> | ||
<ILLinkTrimAssemblySymbols>$(IntermediateOutputPath)$(TargetName).pdb</ILLinkTrimAssemblySymbols> | ||
<ILLinkTrimInputPath>$(IntermediateOutputPath)PreTrim/</ILLinkTrimInputPath> | ||
<ILLinkTrimInputAssembly>$(ILLinkTrimInputPath)$(TargetName)$(TargetExt)</ILLinkTrimInputAssembly> | ||
<ILLinkTrimInputSymbols>$(ILLinkTrimInputPath)$(TargetName).pdb</ILLinkTrimInputSymbols> | ||
<ILLinkTrimOutputPath>$(IntermediateOutputPath)</ILLinkTrimOutputPath> | ||
|
||
<ILLinkTrimXml Condition="'$(ILLinkTrimXml)' == '' AND Exists('$(MSBuildProjectDirectory)/ILLinkTrim.xml')">$(MSBuildProjectDirectory)/ILLinkTrim.xml</ILLinkTrimXml> | ||
|
||
<!-- if building a PDB, tell illink to rewrite the symbols file --> | ||
<ILLinkRewritePDBs Condition="'$(ILLinkRewritePDBs)' == '' AND '$(DebugSymbols)' != 'false'">true</ILLinkRewritePDBs> | ||
</PropertyGroup> | ||
|
||
<!-- Custom binplacing for pre/post-trimming and reports that is useful for analysis | ||
Must be enabled by setting BinPlaceILLinkTrimAssembly=true | ||
--> | ||
<ItemGroup Condition="'$(BinPlaceILLinkTrimAssembly)' == 'true'"> | ||
<BinPlaceConfiguration Include="$(BuildConfiguration)"> | ||
<RuntimePath>$(BinDir)ILLinkTrimAssembly/$(BuildConfiguration)/trimmed</RuntimePath> | ||
<ItemName>TrimmedItem</ItemName> | ||
</BinPlaceConfiguration> | ||
<BinPlaceConfiguration Include="$(BuildConfiguration)"> | ||
<RuntimePath>$(BinDir)ILLinkTrimAssembly/$(BuildConfiguration)/reports</RuntimePath> | ||
<ItemName>TrimmingReport</ItemName> | ||
</BinPlaceConfiguration> | ||
<BinPlaceConfiguration Include="$(BuildConfiguration)"> | ||
<RuntimePath>$(BinDir)ILLinkTrimAssembly/$(BuildConfiguration)/pretrimmed</RuntimePath> | ||
<ItemName>PreTrimmedItem</ItemName> | ||
</BinPlaceConfiguration> | ||
</ItemGroup> | ||
|
||
<Target Name="_SetILLinkTrimAssembly" | ||
Condition="'$(ILLinkTrimAssembly)' == ''" | ||
DependsOnTargets="GetBinPlaceConfiguration"> | ||
<PropertyGroup> | ||
<!-- Currently ILLink cannot handle type projections from Windows.winmd, disable if the project references it --> | ||
<ILLinkTrimAssembly Condition="'%(ReferencePath.FileName)%(ReferencePath.Extension)' == 'Windows.winmd'">false</ILLinkTrimAssembly> | ||
</PropertyGroup> | ||
</Target> | ||
|
||
<!-- ILLinkTrimAssembly | ||
Examines the "input assembly" for IL that is unreachable from public API and trims that, | ||
rewriting the assembly to an "output assembly" | ||
--> | ||
<Target Name="ILLinkTrimAssembly" Condition="'$(ILLinkTrimAssembly)' == 'true'" DependsOnTargets="EnsureBuildToolsRuntime"> | ||
<ItemGroup> | ||
<!-- currently only directories are supported by ILLink. --> | ||
<_ILLinkReferenceDirectory Include="%(ReferencePath.RootDir)%(ReferencePath.Directory)" /> | ||
</ItemGroup> | ||
|
||
<PropertyGroup> | ||
<!-- Root public entry points in this assembly. | ||
Currently this must be passed as name and directory. | ||
Directory of this assembly *must* occur before directory of references. --> | ||
<ILLinkArgs>$(ILLinkArgs) -r $(TargetName)</ILLinkArgs> | ||
<ILLinkArgs>$(ILLinkArgs) -d $(ILLinkTrimInputPath)</ILLinkArgs> | ||
<!-- directories to examine for assembly dependencies --> | ||
<ILLinkArgs>$(ILLinkArgs) @(_ILLinkReferenceDirectory->'-d %(Identity)', ' ')</ILLinkArgs> | ||
<!-- don't trim anything that's defined in core assemblies --> | ||
<ILLinkArgs>$(ILLinkArgs) -c skip</ILLinkArgs> | ||
<ILLinkArgs>$(ILLinkArgs) -p skip netstandard</ILLinkArgs> | ||
<!-- keep type-forward assemblies (facades) --> | ||
<ILLinkArgs>$(ILLinkArgs) -t</ILLinkArgs> | ||
<ILLinkArgs>$(ILLinkArgs) -out $(ILLinkTrimOutputPath)</ILLinkArgs> | ||
<ILLinkArgs Condition="'$(ILLinkTrimXml)' != ''">$(ILLinkArgs) -x $(ILLinkTrimXml)</ILLinkArgs> | ||
<ILLinkArgs Condition="'$(ILLinkRewritePDBs)' == 'true' AND Exists('$(ILLinkTrimAssemblySymbols)')">$(ILLinkArgs) -b true</ILLinkArgs> | ||
</PropertyGroup> | ||
|
||
<MakeDir Directories="$(ILLinkTrimInputPath)" /> | ||
|
||
<!-- Move the assembly into a subdirectory for ILLink --> | ||
<Move SourceFiles="$(ILLinkTrimAssemblyPath)" | ||
DestinationFolder="$(ILLinkTrimInputPath)" | ||
/> | ||
|
||
<!-- Move the PDB into a subdirectory for ILLink if we are rewriting PDBs --> | ||
<Move SourceFiles="$(ILLinkTrimAssemblySymbols)" | ||
DestinationFolder="$(ILLinkTrimInputPath)" | ||
Condition="'$(ILLinkRewritePDBs)' == 'true' AND Exists('$(ILLinkTrimAssemblySymbols)')" | ||
/> | ||
|
||
<PropertyGroup> | ||
<ILLinkCmd>$(OverrideToolHost) "$(ILLinkToolPath)"</ILLinkCmd> | ||
</PropertyGroup> | ||
|
||
<Exec Command="$(ILLinkCmd) $(ILLinkArgs)" /> | ||
</Target> | ||
|
||
<!-- ILLink reporting. | ||
Only enabled when developer specifies a path to the AsmDiff tool with property AsmDiffCmd. | ||
EG: AsmDiffCmd=d:\tools\asmdiff\asmdiff.exe | ||
This is necessary until the AsmDiff tool is ported to .NET Core. --> | ||
<Target Name="_CreateILLinkTrimAssemblyReports" | ||
AfterTargets="ILLinkTrimAssembly" | ||
Condition="'$(AsmDiffCmd)' != ''"> | ||
<PropertyGroup> | ||
<AsmDiffArgs>$(AsmDiffArgs) $(ILLinkTrimInputAssembly)</AsmDiffArgs> | ||
<AsmDiffArgs>$(AsmDiffArgs) $(ILLinkTrimAssemblyPath)</AsmDiffArgs> | ||
<AsmDiffArgs>$(AsmDiffArgs) -includePrivateApis -includeInternalApis -alwaysDiffMembers -diffAttributes</AsmDiffArgs> | ||
|
||
<AsmDiffReport>$(IntermediateOutputPath)$(TargetName).diff.html</AsmDiffReport> | ||
<AsmDiffReportArgs>$(AsmDiffArgs) -out:$(AsmDiffReport)</AsmDiffReportArgs> | ||
<AsmDiffReportArgs>$(AsmDiffReportArgs) -unchanged -changed -added -removed</AsmDiffReportArgs> | ||
|
||
<AsmDiffList>$(IntermediateOutputPath)$(TargetName).diff.csv</AsmDiffList> | ||
<AsmDiffListArgs>$(AsmDiffArgs) -out:$(AsmDiffList)</AsmDiffListArgs> | ||
<AsmDiffListArgs>$(AsmDiffListArgs) -unchanged -changed -added -removed </AsmDiffListArgs> | ||
<AsmDiffListArgs>$(AsmDiffListArgs) -diffWriter:CSV</AsmDiffListArgs> | ||
</PropertyGroup> | ||
|
||
<Exec Command="$(AsmDiffCmd) $(AsmDiffReportArgs)" /> | ||
<Message Text="Assembly trimming diff: $(AsmDiffReport)" /> | ||
<Exec Command="$(AsmDiffCmd) $(AsmDiffListArgs)" /> | ||
<Message Text="Assembly trimming report: $(AsmDiffList)" /> | ||
</Target> | ||
|
||
<!-- Similar to _CheckForCompileOutputs and runs in the same places, | ||
always set these even if compile didn't run. --> | ||
<Target Name="_CheckForILLinkTrimAssemblyOutputs" | ||
BeforeTargets="CopyFilesToOutputDirectory;_CleanGetCurrentAndPriorFileWrites" | ||
Condition="'$(ILLinkTrimAssembly)' == 'true'"> | ||
<ItemGroup> | ||
<PreTrimmedItem Condition="Exists('$(ILLinkTrimInputAssembly)')" Include="$(ILLinkTrimInputAssembly)" /> | ||
<PreTrimmedItem Condition="'$(ILLinkRewritePDBs)' == 'true' AND Exists('$(ILLinkTrimInputSymbols)')" Include="$(ILLinkTrimInputSymbols)" /> | ||
<FileWrites Include="@(PreTrimmedItem)" /> | ||
|
||
<TrimmedItem Condition="Exists('$(ILLinkTrimAssemblyPath)')" Include="$(ILLinkTrimAssemblyPath)" /> | ||
<TrimmedItem Condition="'$(ILLinkRewritePDBs)' == 'true' AND Exists('$(ILLinkTrimAssemblySymbols)')" Include="$(ILLinkTrimAssemblySymbols)" /> | ||
|
||
<TrimmingReport Condition="Exists('$(AsmDiffReport)')" Include="$(AsmDiffReport)" /> | ||
<TrimmingReport Condition="Exists('$(AsmDiffList)')" Include="$(AsmDiffList)" /> | ||
</ItemGroup> | ||
</Target> | ||
</Project> |
13 changes: 13 additions & 0 deletions
13
src/System.Diagnostics.DiagnosticSource/src/ILLinkTrim.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<linker> | ||
<assembly fullname="System.Diagnostics.DiagnosticSource"> | ||
<type fullname="System.Diagnostics.DiagnosticSourceEventSource"> | ||
<!-- DiagnosticSourceEventSource calls these methods through reflection based on strings passed from user code --> | ||
<method name="Activity1Start" /> | ||
<method name="Activity1Stop" /> | ||
<method name="Activity2Start" /> | ||
<method name="Activity2Stop" /> | ||
<method name="RecursiveActivity1Start" /> | ||
<method name="RecursiveActivity1Stop" /> | ||
</type> | ||
</assembly> | ||
</linker> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
<linker> | ||
<assembly fullname="System.Linq.Expressions"> | ||
<type fullname="System.Linq.Expressions.Interpreter.LightLambda"> | ||
<!-- required by debugger --> | ||
<method name="get_DebugView" /> | ||
</type> | ||
</assembly> | ||
</linker> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
<linker> | ||
<assembly fullname="System.Linq"> | ||
<!-- required by debugger, see comment in System/Linq/DebugView.cs --> | ||
<type fullname="System.Linq.SystemCore_EnumerableDebugView" /> | ||
<type fullname="System.Linq.SystemCore_EnumerableDebugView`1" /> | ||
<type fullname="System.Linq.SystemCore_EnumerableDebugViewEmptyException" /> | ||
</assembly> | ||
</linker> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
<linker> | ||
<assembly fullname="System.Net.Http"> | ||
<!-- Anonymous types are used with DiagnosticSource logging and subscribers reflect over those, calling their public getters. --> | ||
<type fullname="*f__AnonymousType*" /> | ||
</assembly> | ||
</linker> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
<linker> | ||
<assembly fullname="System.Net.NetworkInformation"> | ||
<!-- NetEventSource isn't used by this assembly but tests check for its presence --> | ||
<type fullname="System.Net.NetEventSource" /> | ||
</assembly> | ||
</linker> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
<linker> | ||
<assembly fullname="System.Net.Ping"> | ||
<!-- NetEventSource isn't used by this assembly but tests check for its presence --> | ||
<type fullname="System.Net.NetEventSource" /> | ||
</assembly> | ||
</linker> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
<linker> | ||
<assembly fullname="System.Net.Security"> | ||
<type fullname="System.Net.NTAuthentication"> | ||
<!-- Called through reflection by System.Net.Mail tests --> | ||
<method name="GetOutgoingBlob" /> | ||
<method name="MakeSignature" /> | ||
<method name="VerifySignature" /> | ||
</type> | ||
<!-- required by tests --> | ||
<type fullname="System.Net.NetEventSource" /> | ||
</assembly> | ||
</linker> |
8 changes: 8 additions & 0 deletions
8
src/System.Private.DataContractSerialization/src/ILLinkTrim.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
<linker> | ||
<assembly fullname="System.Private.DataContractSerialization"> | ||
<type fullname="System.Runtime.Serialization.DataContractSerializer"> | ||
<!-- called through reflection by tests --> | ||
<method name="set_Option" /> | ||
</type> | ||
</assembly> | ||
</linker> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
<Import Project="..\dir.targets" /> | ||
|
||
<!-- this depends on the tasks and targets that we're building --> | ||
<Target Name="GetBinPlaceConfiguration" /> | ||
</Project> |