Update ILLink.Tasks (dotnet/corefx#39287)
authorSven Boemer <sbomer@gmail.com>
Thu, 24 Oct 2019 19:37:31 +0000 (12:37 -0700)
committerStephen Toub <stoub@microsoft.com>
Thu, 24 Oct 2019 19:37:31 +0000 (15:37 -0400)
* Update ILLink.Tasks

* Don't import linker nuget package targets

We use custom targets to invoke the linker.

* Don't pass directories as assembly paths

Instead pass them as extra linker args. To avoid issues with the
response file parsing logic, we remove trailing slashes.

* Update to linker version with unusedinterfaces opt

* Update System.Text.Json with more ctor roots

Commit migrated from https://github.com/dotnet/corefx/commit/e715ba830fa52e7cede03abb5bb702e53429bbf1

eng/illink.targets
eng/restore/illink.targets
src/libraries/System.Text.Json/src/ILLinkTrim.xml

index 7ac9b78..1b21bfa 100644 (file)
@@ -10,7 +10,7 @@
   <!-- Inputs and outputs of ILLinkTrimAssembly -->
   <PropertyGroup>
     <ILLinkTasksPath Condition="'$(ILLinkTasksPath)' == '' And '$(MSBuildRuntimeType)' == 'core'">$(ILLinkDir)netcoreapp2.0/ILLink.Tasks.dll</ILLinkTasksPath>
-    <ILLinkTasksPath Condition="'$(ILLinkTasksPath)' == '' And '$(MSBuildRuntimeType)' != 'core'">$(ILLinkDir)net46/ILLink.Tasks.dll</ILLinkTasksPath>
+    <ILLinkTasksPath Condition="'$(ILLinkTasksPath)' == '' And '$(MSBuildRuntimeType)' != 'core'">$(ILLinkDir)net472/ILLink.Tasks.dll</ILLinkTasksPath>
     <ILLinkTrimAssemblyPath>$(IntermediateOutputPath)$(TargetName)$(TargetExt)</ILLinkTrimAssemblyPath>
     <ILLinkTrimAssemblySymbols>$(IntermediateOutputPath)$(TargetName).pdb</ILLinkTrimAssemblySymbols>
     <ILLinkTrimInputPath>$(IntermediateOutputPath)PreTrim/</ILLinkTrimInputPath>
@@ -80,6 +80,8 @@
       <ILLinkArgs>$(ILLinkArgs) --strip-resources false</ILLinkArgs>
       <!-- ignore unresolved references -->
       <ILLinkArgs>$(ILLinkArgs) --skip-unresolved true</ILLinkArgs>
+      <!-- keep interface implementations -->
+      <ILLinkArgs>$(ILLinkArgs) --disable-opt unusedinterfaces</ILLinkArgs>
     </PropertyGroup>
 
     <MakeDir Directories="$(ILLinkTrimInputPath)" />
       <!-- Add project references first to give precedence to project-specific files -->
       <_DependencyDirectories Condition="'%(_DependencyDirectoriesTemp.ReferenceSourceTarget)'=='ProjectReference'" Include="%(_DependencyDirectoriesTemp.Identity)" />
       <_DependencyDirectories Condition="'%(_DependencyDirectoriesTemp.ReferenceSourceTarget)'!='ProjectReference'" Include="%(_DependencyDirectoriesTemp.Identity)" />
+      <!-- Remove trailing slash to work around response file parsing behavior -->
+      <_DependencyDirectoriesSlash Include="@(_DependencyDirectories)">
+        <PathWithSlash>$([MSBuild]::EnsureTrailingSlash('%(Identity)'))</PathWithSlash>
+      </_DependencyDirectoriesSlash>
+      <_DependencyDirectoriesNoSlash Include="@(_DependencyDirectoriesSlash)">
+        <PathWithoutSlash>$([System.String]::new('%(PathWithSlash)').TrimEnd($([System.IO.Path]::DirectorySeparatorChar)))</PathWithoutSlash>
+      </_DependencyDirectoriesNoSlash>
+      <_DependencyDirectories Remove="@(_DependencyDirectories)" />
+      <_DependencyDirectories Include="%(_DependencyDirectoriesNoSlash.PathWithoutSlash)" />
     </ItemGroup>
 
-    <ILLink AssemblyPaths="$(ILLinkTrimInputAssembly);@(_DependencyDirectories)"
+    <PropertyGroup>
+      <ILLinkArgs Condition="@(_DependencyDirectories->Count()) > 0">$(ILLinkArgs) -d @(_DependencyDirectories->'"%(Identity)"', ' -d ')</ILLinkArgs>
+    </PropertyGroup>
+
+    <ILLink AssemblyPaths="$(ILLinkTrimInputAssembly)"
             RootAssemblyNames=""
             OutputDirectory="$(ILLinkTrimOutputPath)"
             ClearInitLocals="$(ILLinkClearInitLocals)"
index b79e769..137612c 100644 (file)
@@ -1,7 +1,7 @@
 <Project>
 
   <ItemGroup>
-    <PackageReference Include="illink.tasks" Version="$(ILLinkTasksPackageVersion)" PrivateAssets="all" IsImplicitlyDefined="true" />
+    <PackageReference Include="illink.tasks" Version="$(ILLinkTasksPackageVersion)" PrivateAssets="all" IsImplicitlyDefined="true" ExcludeAssets="build" />
   </ItemGroup>
 
   <Target Name="IncludeToolsFiles"
index 3ba61ee..603e305 100644 (file)
       <!-- Instantiated via reflection -->
       <method name=".ctor" />
     </type>
+    <type fullname="System.Text.Json.ImmutableCollectionCreator">
+      <!-- Instantiated via reflection -->
+      <method name=".ctor" />
+    </type>
+    <type fullname="System.Text.Json.ImmutableDictionaryCreator`2">
+      <!-- Instantiated via reflection -->
+      <method name=".ctor" />
+    </type>
+    <type fullname="System.Text.Json.ImmutableEnumerableCreator`2">
+      <!-- Instantiated via reflection -->
+      <method name=".ctor" />
+    </type>
   </assembly>
 </linker>