From 802834e82427cabc4d17911d0e9c4c5056dc786f Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Tue, 28 Sep 2021 15:42:15 -0400 Subject: [PATCH 01/15] Build one MonoTargetsTasks assembly for Mono.NET.Runtime.MonoTargets.Sdk pack Instead of 3 assemblies for some tiny tasks. Building a single assembly also ensures that everything in the pack depends on and bundles identical versions of dependent assemblies. For example on net472, a single version of System.Text.Json with a single fixed version shared by both the JsonToItemsTaskFactory task factory and the RuntimeConfigParser task. Related to https://github.com/dotnet/runtime/issues/59619 --- ...rosoft.NET.Runtime.MonoTargets.Sdk.pkgproj | 8 +--- .../Sdk/ILStripTask.props | 7 ---- .../Sdk/MonoTargetsTasks.props | 21 ++++++++++ .../Sdk/RuntimeComponentManifest.props | 14 ------- .../Sdk/RuntimeConfigParserTask.props | 7 ---- .../Sdk/Sdk.props | 4 +- src/tasks/ILStripTask/ILStrip.csproj | 33 --------------- .../ILStrip}/ILStrip.cs | 0 .../JsonToItemsTaskFactory.cs | 11 ----- .../JsonToItemsTaskFactory/README.md | 0 .../MonoTargetsTasks.csproj} | 19 +++++++-- .../RuntimeConfigParser.cs | 0 .../RuntimeConfigParser.csproj | 40 ------------------- 13 files changed, 39 insertions(+), 125 deletions(-) delete mode 100644 src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/ILStripTask.props create mode 100644 src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/MonoTargetsTasks.props delete mode 100644 src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/RuntimeComponentManifest.props delete mode 100644 src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/RuntimeConfigParserTask.props delete mode 100644 src/tasks/ILStripTask/ILStrip.csproj rename src/tasks/{ILStripTask => MonoTargetsTasks/ILStrip}/ILStrip.cs (100%) rename src/tasks/{ => MonoTargetsTasks}/JsonToItemsTaskFactory/JsonToItemsTaskFactory.cs (98%) rename src/tasks/{ => MonoTargetsTasks}/JsonToItemsTaskFactory/README.md (100%) rename src/tasks/{JsonToItemsTaskFactory/JsonToItemsTaskFactory.csproj => MonoTargetsTasks/MonoTargetsTasks.csproj} (60%) rename src/tasks/{ => MonoTargetsTasks}/RuntimeConfigParser/RuntimeConfigParser.cs (100%) delete mode 100644 src/tasks/RuntimeConfigParser/RuntimeConfigParser.csproj diff --git a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Microsoft.NET.Runtime.MonoTargets.Sdk.pkgproj b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Microsoft.NET.Runtime.MonoTargets.Sdk.pkgproj index 724b704f864b11..a38b1d301e61d2 100644 --- a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Microsoft.NET.Runtime.MonoTargets.Sdk.pkgproj +++ b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Microsoft.NET.Runtime.MonoTargets.Sdk.pkgproj @@ -6,18 +6,14 @@ - - - + - - - + diff --git a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/ILStripTask.props b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/ILStripTask.props deleted file mode 100644 index 84c0dbf11afa87..00000000000000 --- a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/ILStripTask.props +++ /dev/null @@ -1,7 +0,0 @@ - - - $(MSBuildThisFileDirectory)..\tasks\net6.0\ILStrip.dll - $(MSBuildThisFileDirectory)..\tasks\net472\ILStrip.dll - - - diff --git a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/MonoTargetsTasks.props b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/MonoTargetsTasks.props new file mode 100644 index 00000000000000..afbda3e36159d9 --- /dev/null +++ b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/MonoTargetsTasks.props @@ -0,0 +1,21 @@ + + + $(MSBuildThisFileDirectory)..\tasks\net6.0\MonoTargetsTasks.dll + $(MSBuildThisFileDirectory)..\tasks\net472\MonoTargetsTasks.dll + $(MonoTargetsTasksAssemblyPath) + + + + + + + + + + <_MonoRuntimeComponentSharedLibExt ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="false" Output="true" /> + <_MonoRuntimeComponentStaticLibExt ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="false" Output="true" /> + <_MonoRuntimeComponentLinking ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="false" Output="true" /> + <_MonoRuntimeAvailableComponents ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="false" Output="true" /> + + + diff --git a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/RuntimeComponentManifest.props b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/RuntimeComponentManifest.props deleted file mode 100644 index d173ff67c2b882..00000000000000 --- a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/RuntimeComponentManifest.props +++ /dev/null @@ -1,14 +0,0 @@ - - - $(MSBuildThisFileDirectory)..\tasks\net6.0\JsonToItemsTaskFactory.dll - $(MSBuildThisFileDirectory)..\tasks\net472\JsonToItemsTaskFactory.dll - - - - <_MonoRuntimeComponentSharedLibExt ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="false" Output="true" /> - <_MonoRuntimeComponentStaticLibExt ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="false" Output="true" /> - <_MonoRuntimeComponentLinking ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="false" Output="true" /> - <_MonoRuntimeAvailableComponents ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="false" Output="true" /> - - - diff --git a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/RuntimeConfigParserTask.props b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/RuntimeConfigParserTask.props deleted file mode 100644 index f81ae6a8bde35d..00000000000000 --- a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/RuntimeConfigParserTask.props +++ /dev/null @@ -1,7 +0,0 @@ - - - $(MSBuildThisFileDirectory)..\tasks\net6.0\RuntimeConfigParser.dll - $(MSBuildThisFileDirectory)..\tasks\net472\RuntimeConfigParser.dll - - - diff --git a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/Sdk.props b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/Sdk.props index 8a7ede79242b1c..887d87842b47e2 100644 --- a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/Sdk.props +++ b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/Sdk.props @@ -1,5 +1,3 @@ - - - + diff --git a/src/tasks/ILStripTask/ILStrip.csproj b/src/tasks/ILStripTask/ILStrip.csproj deleted file mode 100644 index bb9c41f692e1cc..00000000000000 --- a/src/tasks/ILStripTask/ILStrip.csproj +++ /dev/null @@ -1,33 +0,0 @@ - - - $(TargetFrameworkForNETCoreTasks);$(TargetFrameworkForNETFrameworkTasks) - Library - true - false - $(NoWarn),CA1050,CS0618,CS0649,CS8604,CS8602,CS8632,SYSLIB0003 - false - - - - - - - - - - - - - - - - - - <_PublishFramework Remove="@(_PublishFramework)" /> - <_PublishFramework Include="$(TargetFrameworks)" /> - - - - - - diff --git a/src/tasks/ILStripTask/ILStrip.cs b/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs similarity index 100% rename from src/tasks/ILStripTask/ILStrip.cs rename to src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs diff --git a/src/tasks/JsonToItemsTaskFactory/JsonToItemsTaskFactory.cs b/src/tasks/MonoTargetsTasks/JsonToItemsTaskFactory/JsonToItemsTaskFactory.cs similarity index 98% rename from src/tasks/JsonToItemsTaskFactory/JsonToItemsTaskFactory.cs rename to src/tasks/MonoTargetsTasks/JsonToItemsTaskFactory/JsonToItemsTaskFactory.cs index b0d710e77f7141..2134317e8927fd 100644 --- a/src/tasks/JsonToItemsTaskFactory/JsonToItemsTaskFactory.cs +++ b/src/tasks/MonoTargetsTasks/JsonToItemsTaskFactory/JsonToItemsTaskFactory.cs @@ -12,17 +12,6 @@ using Microsoft.Build.Framework; using Microsoft.Build.Utilities; -#if NET472 -namespace System.Diagnostics.CodeAnalysis { - [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] - - public class NotNullWhenAttribute : Attribute { - public NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue; - public bool ReturnValue { get; } - } -} -#endif - namespace JsonToItemsTaskFactory { diff --git a/src/tasks/JsonToItemsTaskFactory/README.md b/src/tasks/MonoTargetsTasks/JsonToItemsTaskFactory/README.md similarity index 100% rename from src/tasks/JsonToItemsTaskFactory/README.md rename to src/tasks/MonoTargetsTasks/JsonToItemsTaskFactory/README.md diff --git a/src/tasks/JsonToItemsTaskFactory/JsonToItemsTaskFactory.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj similarity index 60% rename from src/tasks/JsonToItemsTaskFactory/JsonToItemsTaskFactory.csproj rename to src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index 17799fbf6570c1..e7f3f1c4a521b3 100644 --- a/src/tasks/JsonToItemsTaskFactory/JsonToItemsTaskFactory.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -5,16 +5,24 @@ true false enable + $(NoWarn),CA1050,CS0618,CS0649,CS8604,CS8602,CS8632,SYSLIB0003 - + + false + + + + + + @@ -22,10 +30,14 @@ - + + + + + - + <_PublishFramework Remove="@(_PublishFramework)" /> @@ -35,5 +47,4 @@ - diff --git a/src/tasks/RuntimeConfigParser/RuntimeConfigParser.cs b/src/tasks/MonoTargetsTasks/RuntimeConfigParser/RuntimeConfigParser.cs similarity index 100% rename from src/tasks/RuntimeConfigParser/RuntimeConfigParser.cs rename to src/tasks/MonoTargetsTasks/RuntimeConfigParser/RuntimeConfigParser.cs diff --git a/src/tasks/RuntimeConfigParser/RuntimeConfigParser.csproj b/src/tasks/RuntimeConfigParser/RuntimeConfigParser.csproj deleted file mode 100644 index c07e367def62ec..00000000000000 --- a/src/tasks/RuntimeConfigParser/RuntimeConfigParser.csproj +++ /dev/null @@ -1,40 +0,0 @@ - - - $(TargetFrameworkForNETCoreTasks);$(TargetFrameworkForNETFrameworkTasks) - Library - true - false - enable - $(NoWarn),CA1050 - - $(NoWarn),CS8604,CS8602 - - - - - - - - - - - - - - - - - - - - - - <_PublishFramework Remove="@(_PublishFramework)" /> - <_PublishFramework Include="$(TargetFrameworks)" /> - - - - - - - From 9ed921d3a61c196b64077ae9e74d8af94c7638d7 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Tue, 28 Sep 2021 16:35:03 -0400 Subject: [PATCH 02/15] Update testing and wasm to use MonoTargetsTasks.dll --- Directory.Build.props | 9 ++------- eng/testing/linker/project.csproj.template | 3 +-- eng/testing/linker/trimmingTests.targets | 4 +--- eng/testing/tests.mobile.targets | 6 +++--- src/libraries/sendtohelixhelp.proj | 3 +-- .../Sdk/MonoTargetsTasks.props | 1 - src/mono/wasm/build/WasmApp.InTree.targets | 2 +- src/mono/wasm/build/WasmApp.LocalBuild.props | 9 +++------ src/mono/wasm/build/WasmApp.LocalBuild.targets | 5 ++--- src/mono/wasm/build/WasmApp.Native.targets | 2 +- src/tests/Common/Directory.Build.targets | 6 +++--- src/tests/Common/wasm-test-runner/WasmTestRunner.proj | 3 +-- src/tests/Directory.Build.targets | 10 +++------- 13 files changed, 22 insertions(+), 41 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 64838881765ded..a36faa2d095f12 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -86,10 +86,7 @@ $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmBuildTasks', 'Debug', '$(NetCoreAppToolCurrent)', 'publish')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WorkloadBuildTasks', 'Debug', '$(NetCoreAppToolCurrent)', 'publish')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'MonoAOTCompiler', 'Debug', '$(NetCoreAppToolCurrent)')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'RuntimeConfigParser', 'Debug', '$(NetCoreAppToolCurrent)')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'JsonToItemsTaskFactory', 'Debug', '$(NetCoreAppToolCurrent)')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'ILStrip', 'Debug', '$(NetCoreAppToolCurrent)')) - + $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'MonoTargetsTasks', 'Debug', '$(NetCoreAppToolCurrent)')) $([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'installer.tasks', 'Debug', '$(NetCoreAppToolCurrent)', 'installer.tasks.dll')) $([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'installer.tasks', 'Debug', '$(NetFrameworkToolCurrent)', 'installer.tasks.dll')) $([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Crossgen2Tasks', 'Debug', '$(NetCoreAppToolCurrent)', 'Microsoft.NET.CrossGen.props')) @@ -100,9 +97,7 @@ $([MSBuild]::NormalizePath('$(WasmBuildTasksDir)', 'WasmBuildTasks.dll')) $([MSBuild]::NormalizePath('$(WorkloadBuildTasksDir)', 'WorkloadBuildTasks.dll')) $([MSBuild]::NormalizePath('$(MonoAOTCompilerDir)', 'MonoAOTCompiler.dll')) - $([MSBuild]::NormalizePath('$(RuntimeConfigParserDir)', 'RuntimeConfigParser.dll')) - $([MSBuild]::NormalizePath('$(JsonToItemsTaskFactoryDir)', 'JsonToItemsTaskFactory.dll')) - $([MSBuild]::NormalizePath('$(ILStripTaskDir)', 'ILStrip.dll')) + $([MSBuild]::NormalizePath('$(MonoTargetsTasksDir)', 'MonoTargetsTasks.dll')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'coreclr', '$(TargetOS).$(TargetArchitecture).$(Configuration)')) diff --git a/eng/testing/linker/project.csproj.template b/eng/testing/linker/project.csproj.template index 83d26c8c2df90e..80180798fd30e8 100644 --- a/eng/testing/linker/project.csproj.template +++ b/eng/testing/linker/project.csproj.template @@ -12,8 +12,7 @@ {MonoProjectRoot} {MonoAOTCompilerTasksAssemblyPath} {WasmAppBuilderTasksAssemblyPath} - {JsonToItemsTaskFactoryTasksAssemblyPath} - {RuntimeConfigParserTasksAssemblyPath} + {MonoTargetsTasksAssemblyPath} {MicrosoftNetCoreAppRuntimePackRidDir} diff --git a/eng/testing/linker/trimmingTests.targets b/eng/testing/linker/trimmingTests.targets index b2cb80e9b79874..05736702d9d007 100644 --- a/eng/testing/linker/trimmingTests.targets +++ b/eng/testing/linker/trimmingTests.targets @@ -91,11 +91,9 @@ .Replace('{AdditionalProjectReferences}', '$(_additionalProjectReferencesString)') .Replace('{RepositoryEngineeringDir}', '$(RepositoryEngineeringDir)') .Replace('{MonoAOTCompilerDir}', '$(MonoAOTCompilerDir)') - .Replace('{JsonToItemsTaskFactoryDir}', '$(JsonToItemsTaskFactoryDir)') .Replace('{MonoProjectRoot}', '$(MonoProjectRoot)') .Replace('{MonoAOTCompilerTasksAssemblyPath}', '$(MonoAOTCompilerTasksAssemblyPath)') - .Replace('{JsonToItemsTaskFactoryTasksAssemblyPath}', '$(JsonToItemsTaskFactoryTasksAssemblyPath)') - .Replace('{RuntimeConfigParserTasksAssemblyPath}', '$(RuntimeConfigParserTasksAssemblyPath)') + .Replace('{MonoTargetsTasksAssemblyPath}', '$(MonoTargetsTasksAssemblyPath)') .Replace('{WasmAppBuilderTasksAssemblyPath}', '$(WasmAppBuilderTasksAssemblyPath)') .Replace('{MicrosoftNetCoreAppRuntimePackRidDir}', '$(MicrosoftNetCoreAppRuntimePackRidDir)') .Replace('{ProductVersion}', '$(ProductVersion)') diff --git a/eng/testing/tests.mobile.targets b/eng/testing/tests.mobile.targets index 8a7036f14208f6..77b533e4b48fea 100644 --- a/eng/testing/tests.mobile.targets +++ b/eng/testing/tests.mobile.targets @@ -52,8 +52,8 @@ + AssemblyFile="$(MonoTargetsTasksAssemblyPath)" + Condition="'$(MonoTargetsTasksAssemblyPath)' != ''" /> + AssemblyFile="$(MonoTargetsTasksAssemblyPath)" /> diff --git a/src/libraries/sendtohelixhelp.proj b/src/libraries/sendtohelixhelp.proj index 8d42aba4a4ecc0..2d04f9a01b1c5b 100644 --- a/src/libraries/sendtohelixhelp.proj +++ b/src/libraries/sendtohelixhelp.proj @@ -389,8 +389,7 @@ - - + diff --git a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/MonoTargetsTasks.props b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/MonoTargetsTasks.props index afbda3e36159d9..7fe32897283ba8 100644 --- a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/MonoTargetsTasks.props +++ b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/MonoTargetsTasks.props @@ -2,7 +2,6 @@ $(MSBuildThisFileDirectory)..\tasks\net6.0\MonoTargetsTasks.dll $(MSBuildThisFileDirectory)..\tasks\net472\MonoTargetsTasks.dll - $(MonoTargetsTasksAssemblyPath) diff --git a/src/mono/wasm/build/WasmApp.InTree.targets b/src/mono/wasm/build/WasmApp.InTree.targets index f8c26080f0268d..b4f2af25b0afd6 100644 --- a/src/mono/wasm/build/WasmApp.InTree.targets +++ b/src/mono/wasm/build/WasmApp.InTree.targets @@ -1,7 +1,7 @@ - + diff --git a/src/mono/wasm/build/WasmApp.LocalBuild.props b/src/mono/wasm/build/WasmApp.LocalBuild.props index e4fdffe990dece..939d6ce4eef85a 100644 --- a/src/mono/wasm/build/WasmApp.LocalBuild.props +++ b/src/mono/wasm/build/WasmApp.LocalBuild.props @@ -35,8 +35,7 @@ $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmAppBuilder', 'Debug', '$(_TargetFrameworkForNETCoreTasks)')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmBuildTasks', 'Debug', '$(_TargetFrameworkForNETCoreTasks)', 'publish')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'MonoAOTCompiler', 'Debug', '$(_TargetFrameworkForNETCoreTasks)')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'RuntimeConfigParser', 'Debug', '$(_TargetFrameworkForNETCoreTasks)')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'JsonToItemsTaskFactory', 'Debug', '$(_TargetFrameworkForNETCoreTasks)')) + $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'MonoTargetsTasks', 'Debug', '$(_TargetFrameworkForNETCoreTasks)')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'mono', '$(TargetOS).$(TargetArchitecture).$(RuntimeConfig)')) <_MonoAotCrossCompilerPath>$([MSBuild]::NormalizePath($(MonoArtifactsPath), 'cross', '$(TargetOS.ToLowerInvariant())-$(TargetArchitecture.ToLowerInvariant())', 'mono-aot-cross')) @@ -48,8 +47,7 @@ $([MSBuild]::NormalizeDirectory($(BuildBaseDir), 'microsoft.netcore.app.runtime.browser-wasm')) $([MSBuild]::NormalizeDirectory($(BuildBaseDir), 'MonoAOTCompiler')) - $([MSBuild]::NormalizeDirectory($(BuildBaseDir), 'RuntimeConfigParser')) - $([MSBuild]::NormalizeDirectory($(BuildBaseDir), 'JsonToItemsTaskFactory')) + $([MSBuild]::NormalizeDirectory($(BuildBaseDir), 'MonoTargetsTasks')) $([MSBuild]::NormalizeDirectory($(BuildBaseDir), 'WasmAppBuilder')) $([MSBuild]::NormalizeDirectory($(BuildBaseDir), 'WasmBuildTasks')) @@ -67,8 +65,7 @@ $([MSBuild]::NormalizePath('$(WasmAppBuilderDir)', 'WasmAppBuilder.dll')) $([MSBuild]::NormalizePath('$(WasmBuildTasksDir)', 'WasmBuildTasks.dll')) $([MSBuild]::NormalizePath('$(MonoAOTCompilerDir)', 'MonoAOTCompiler.dll')) - $([MSBuild]::NormalizePath('$(RuntimeConfigParserDir)', 'RuntimeConfigParser.dll')) - $([MSBuild]::NormalizePath('$(JsonToItemsTaskFactoryDir)', 'JsonToItemsTaskFactory.dll')) + $([MSBuild]::NormalizePath('$(MonoTargetsTasksDir)', 'MonoTargetsTasks.dll')) diff --git a/src/mono/wasm/build/WasmApp.LocalBuild.targets b/src/mono/wasm/build/WasmApp.LocalBuild.targets index 47559bccb84288..65e328b9472975 100644 --- a/src/mono/wasm/build/WasmApp.LocalBuild.targets +++ b/src/mono/wasm/build/WasmApp.LocalBuild.targets @@ -22,7 +22,7 @@ - + true @@ -65,8 +65,7 @@ $([MSBuild]::NormalizePath('$(WasmAppBuilderDir)', 'WasmAppBuilder.dll')) $([MSBuild]::NormalizePath('$(WasmBuildTasksDir)', 'WasmBuildTasks.dll')) $([MSBuild]::NormalizePath('$(MonoAOTCompilerDir)', 'MonoAOTCompiler.dll')) - $([MSBuild]::NormalizePath('$(RuntimeConfigParserDir)', 'RuntimeConfigParser.dll')) - $([MSBuild]::NormalizePath('$(JsonToItemsTaskFactoryDir)', 'JsonToItemsTaskFactory.dll')) + $([MSBuild]::NormalizePath('$(MonoTargetsTasksDir)', 'MonoTargetsTasks.dll')) - diff --git a/src/tests/Common/Directory.Build.targets b/src/tests/Common/Directory.Build.targets index 6ffee68f72477b..009a19e92c7753 100644 --- a/src/tests/Common/Directory.Build.targets +++ b/src/tests/Common/Directory.Build.targets @@ -37,7 +37,7 @@ %(Identity) - + @@ -147,13 +147,13 @@ TargetDir="WasmAppBuilder/"/> - + diff --git a/src/tests/Common/wasm-test-runner/WasmTestRunner.proj b/src/tests/Common/wasm-test-runner/WasmTestRunner.proj index e2eda44d7ffc02..ab92b77866e3c3 100644 --- a/src/tests/Common/wasm-test-runner/WasmTestRunner.proj +++ b/src/tests/Common/wasm-test-runner/WasmTestRunner.proj @@ -15,8 +15,7 @@ $(CORE_ROOT)\WasmAppBuilder\WasmAppBuilder.dll $(CORE_ROOT)\MonoAOTCompiler\MonoAOTCompiler.dll - $(CORE_ROOT)\JsonToItemsTaskFactory\JsonToItemsTaskFactory.dll - $(CORE_ROOT)\RuntimeConfigParser\RuntimeConfigParser.dll + $(CORE_ROOT)\MonoTargetsTasks\MonoTargetsTasks.dll BuildApp;$(WasmBuildAppDependsOn) diff --git a/src/tests/Directory.Build.targets b/src/tests/Directory.Build.targets index b817490bbdf6f5..43b57f5aa14e75 100644 --- a/src/tests/Directory.Build.targets +++ b/src/tests/Directory.Build.targets @@ -378,14 +378,10 @@ Include="$(ArtifactsBinDir)\MonoAOTCompiler\Debug\$(NetCoreAppToolCurrent)\**" TargetDir="MonoAOTCompiler/"/> + - - - + Include="$(ArtifactsBinDir)\MonoTargetsTasks\Debug\$(NetCoreAppToolCurrent)\**" + TargetDir="MonoTargetsTasks/"/> Date: Tue, 28 Sep 2021 16:45:49 -0400 Subject: [PATCH 03/15] FIXME: disable nullability for now --- src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index e7f3f1c4a521b3..fc467c762a4c0d 100644 --- a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -4,7 +4,8 @@ Library true false - enable + + disable $(NoWarn),CA1050,CS0618,CS0649,CS8604,CS8602,CS8632,SYSLIB0003 From c1a5d6ce7d34b78eeb3923a4eacba7913ea00ed2 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 29 Sep 2021 12:29:59 -0400 Subject: [PATCH 04/15] Move assembly stripper to a separate assembly Build it with nullability checking disabled. Build the main MonoTargetsTasks assembly with nullability enabled --- .../AssemblyStripper/AssemblyStripper.cs | 215 ++++++++++++++++++ .../AssemblyStripper/AssemblyStripper.csproj | 30 +++ src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs | 196 +--------------- .../MonoTargetsTasks/MonoTargetsTasks.csproj | 11 +- 4 files changed, 253 insertions(+), 199 deletions(-) create mode 100644 src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.cs create mode 100644 src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj diff --git a/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.cs b/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.cs new file mode 100644 index 00000000000000..f1835b1fa5ecc9 --- /dev/null +++ b/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.cs @@ -0,0 +1,215 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using CilStrip.Mono.Cecil; +using CilStrip.Mono.Cecil.Binary; +using CilStrip.Mono.Cecil.Cil; +using CilStrip.Mono.Cecil.Metadata; + +namespace AssemblyStripper +{ + public class AssemblyStripper + { + AssemblyDefinition assembly; + BinaryWriter writer; + + Image original; + Image stripped; + + ReflectionWriter reflection_writer; + MetadataWriter metadata_writer; + + TablesHeap original_tables; + TablesHeap stripped_tables; + + AssemblyStripper(AssemblyDefinition assembly, BinaryWriter writer) + { + this.assembly = assembly; + this.writer = writer; + } + + void Strip() + { + FullLoad(); + ClearMethodBodies(); + CopyOriginalImage(); + PatchMethods(); + PatchFields(); + PatchResources(); + Write(); + } + + void FullLoad() + { + assembly.MainModule.FullLoad(); + } + + void ClearMethodBodies() + { + foreach (TypeDefinition type in assembly.MainModule.Types) + { + ClearMethodBodies(type.Constructors); + ClearMethodBodies(type.Methods); + } + } + + static void ClearMethodBodies(ICollection methods) + { + foreach (MethodDefinition method in methods) + { + if (!method.HasBody) + continue; + + MethodBody body = new MethodBody(method); + body.CilWorker.Emit(OpCodes.Ret); + + method.Body = body; + } + } + + void CopyOriginalImage() + { + original = assembly.MainModule.Image; + stripped = Image.CreateImage(); + + stripped.Accept(new CopyImageVisitor(original)); + + assembly.MainModule.Image = stripped; + + original_tables = original.MetadataRoot.Streams.TablesHeap; + stripped_tables = stripped.MetadataRoot.Streams.TablesHeap; + + TableCollection tables = original_tables.Tables; + foreach (IMetadataTable table in tables) + stripped_tables.Tables.Add(table); + + stripped_tables.Valid = original_tables.Valid; + stripped_tables.Sorted = original_tables.Sorted; + + reflection_writer = new ReflectionWriter(assembly.MainModule); + reflection_writer.StructureWriter = new StructureWriter(assembly, writer); + reflection_writer.CodeWriter.Stripped = true; + + metadata_writer = reflection_writer.MetadataWriter; + + PatchHeap(metadata_writer.StringWriter, original.MetadataRoot.Streams.StringsHeap); + PatchHeap(metadata_writer.GuidWriter, original.MetadataRoot.Streams.GuidHeap); + PatchHeap(metadata_writer.UserStringWriter, original.MetadataRoot.Streams.UserStringsHeap); + PatchHeap(metadata_writer.BlobWriter, original.MetadataRoot.Streams.BlobHeap); + + if (assembly.EntryPoint != null) + metadata_writer.EntryPointToken = assembly.EntryPoint.MetadataToken.ToUInt(); + } + + static void PatchHeap(MemoryBinaryWriter heap_writer, MetadataHeap heap) + { + if (heap == null) + return; + + heap_writer.BaseStream.Position = 0; + heap_writer.Write(heap.Data); + } + + void PatchMethods() + { + MethodTable methodTable = (MethodTable)stripped_tables[MethodTable.RId]; + if (methodTable == null) + return; + + RVA method_rva = RVA.Zero; + + for (int i = 0; i < methodTable.Rows.Count; i++) + { + MethodRow methodRow = methodTable[i]; + + methodRow.ImplFlags |= MethodImplAttributes.NoInlining; + + MetadataToken methodToken = MetadataToken.FromMetadataRow(TokenType.Method, i); + + MethodDefinition method = (MethodDefinition)assembly.MainModule.LookupByToken(methodToken); + + if (method.HasBody) + { + method_rva = method_rva != RVA.Zero + ? method_rva + : reflection_writer.CodeWriter.WriteMethodBody(method); + + methodRow.RVA = method_rva; + } + else + methodRow.RVA = RVA.Zero; + } + } + + void PatchFields() + { + FieldRVATable fieldRvaTable = (FieldRVATable)stripped_tables[FieldRVATable.RId]; + if (fieldRvaTable == null) + return; + + for (int i = 0; i < fieldRvaTable.Rows.Count; i++) + { + FieldRVARow fieldRvaRow = fieldRvaTable[i]; + + MetadataToken fieldToken = new MetadataToken(TokenType.Field, fieldRvaRow.Field); + + FieldDefinition field = (FieldDefinition)assembly.MainModule.LookupByToken(fieldToken); + + fieldRvaRow.RVA = metadata_writer.GetDataCursor(); + metadata_writer.AddData(field.InitialValue.Length + 3 & (~3)); + metadata_writer.AddFieldInitData(field.InitialValue); + } + } + + void PatchResources() + { + ManifestResourceTable resourceTable = (ManifestResourceTable)stripped_tables[ManifestResourceTable.RId]; + if (resourceTable == null) + return; + + for (int i = 0; i < resourceTable.Rows.Count; i++) + { + ManifestResourceRow resourceRow = resourceTable[i]; + + if (resourceRow.Implementation.RID != 0) + continue; + + foreach (Resource resource in assembly.MainModule.Resources) + { + EmbeddedResource er = resource as EmbeddedResource; + if (er == null) + continue; + + if (resource.Name != original.MetadataRoot.Streams.StringsHeap[resourceRow.Name]) + continue; + + resourceRow.Offset = metadata_writer.AddResource(er.Data); + } + } + } + + void Write() + { + stripped.MetadataRoot.Accept(metadata_writer); + } + + internal static void StripAssembly(AssemblyDefinition assembly, string file) + { + using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None)) + { + new AssemblyStripper(assembly, new BinaryWriter(fs)).Strip(); + } + } + + public static void StripAssembly(string assemblyFile, string outputPath) + { + AssemblyDefinition assembly = AssemblyFactory.GetAssembly(assemblyFile); + AssemblyStripper.StripAssembly(assembly, outputPath); + + } + } +} diff --git a/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj b/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj new file mode 100644 index 00000000000000..862d55a873b3bc --- /dev/null +++ b/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj @@ -0,0 +1,30 @@ + + + $(TargetFrameworkForNETCoreTasks);$(TargetFrameworkForNETFrameworkTasks) + Library + true + false + + disable + $(NoWarn),CA1050,CS0618,CS0649,CS8604,CS8602,CS8632,SYSLIB0003 + false + + + + + + + + + + + + + <_PublishFramework Remove="@(_PublishFramework)" /> + <_PublishFramework Include="$(TargetFrameworks)" /> + + + + + + diff --git a/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs b/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs index 8086e68b91785f..8def6e80221cb3 100644 --- a/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs +++ b/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs @@ -68,8 +68,7 @@ private bool StripAssembly(ITaskItem assemblyItem) try { - AssemblyDefinition assembly = AssemblyFactory.GetAssembly(assemblyFile); - AssemblyStripper.StripAssembly(assembly, outputPath); + AssemblyStripper.AssemblyStripper.StripAssembly (assemblyFile, outputPath); } catch (Exception ex) { @@ -81,197 +80,4 @@ private bool StripAssembly(ITaskItem assemblyItem) return true; } - private class AssemblyStripper - { - AssemblyDefinition assembly; - BinaryWriter writer; - - Image original; - Image stripped; - - ReflectionWriter reflection_writer; - MetadataWriter metadata_writer; - - TablesHeap original_tables; - TablesHeap stripped_tables; - - AssemblyStripper(AssemblyDefinition assembly, BinaryWriter writer) - { - this.assembly = assembly; - this.writer = writer; - } - - void Strip() - { - FullLoad(); - ClearMethodBodies(); - CopyOriginalImage(); - PatchMethods(); - PatchFields(); - PatchResources(); - Write(); - } - - void FullLoad() - { - assembly.MainModule.FullLoad(); - } - - void ClearMethodBodies() - { - foreach (TypeDefinition type in assembly.MainModule.Types) - { - ClearMethodBodies(type.Constructors); - ClearMethodBodies(type.Methods); - } - } - - static void ClearMethodBodies(ICollection methods) - { - foreach (MethodDefinition method in methods) - { - if (!method.HasBody) - continue; - - MethodBody body = new MethodBody(method); - body.CilWorker.Emit(OpCodes.Ret); - - method.Body = body; - } - } - - void CopyOriginalImage() - { - original = assembly.MainModule.Image; - stripped = Image.CreateImage(); - - stripped.Accept(new CopyImageVisitor(original)); - - assembly.MainModule.Image = stripped; - - original_tables = original.MetadataRoot.Streams.TablesHeap; - stripped_tables = stripped.MetadataRoot.Streams.TablesHeap; - - TableCollection tables = original_tables.Tables; - foreach (IMetadataTable table in tables) - stripped_tables.Tables.Add(table); - - stripped_tables.Valid = original_tables.Valid; - stripped_tables.Sorted = original_tables.Sorted; - - reflection_writer = new ReflectionWriter(assembly.MainModule); - reflection_writer.StructureWriter = new StructureWriter(assembly, writer); - reflection_writer.CodeWriter.Stripped = true; - - metadata_writer = reflection_writer.MetadataWriter; - - PatchHeap(metadata_writer.StringWriter, original.MetadataRoot.Streams.StringsHeap); - PatchHeap(metadata_writer.GuidWriter, original.MetadataRoot.Streams.GuidHeap); - PatchHeap(metadata_writer.UserStringWriter, original.MetadataRoot.Streams.UserStringsHeap); - PatchHeap(metadata_writer.BlobWriter, original.MetadataRoot.Streams.BlobHeap); - - if (assembly.EntryPoint != null) - metadata_writer.EntryPointToken = assembly.EntryPoint.MetadataToken.ToUInt(); - } - - static void PatchHeap(MemoryBinaryWriter heap_writer, MetadataHeap heap) - { - if (heap == null) - return; - - heap_writer.BaseStream.Position = 0; - heap_writer.Write(heap.Data); - } - - void PatchMethods() - { - MethodTable methodTable = (MethodTable)stripped_tables[MethodTable.RId]; - if (methodTable == null) - return; - - RVA method_rva = RVA.Zero; - - for (int i = 0; i < methodTable.Rows.Count; i++) - { - MethodRow methodRow = methodTable[i]; - - methodRow.ImplFlags |= MethodImplAttributes.NoInlining; - - MetadataToken methodToken = MetadataToken.FromMetadataRow(TokenType.Method, i); - - MethodDefinition method = (MethodDefinition)assembly.MainModule.LookupByToken(methodToken); - - if (method.HasBody) - { - method_rva = method_rva != RVA.Zero - ? method_rva - : reflection_writer.CodeWriter.WriteMethodBody(method); - - methodRow.RVA = method_rva; - } - else - methodRow.RVA = RVA.Zero; - } - } - - void PatchFields() - { - FieldRVATable fieldRvaTable = (FieldRVATable)stripped_tables[FieldRVATable.RId]; - if (fieldRvaTable == null) - return; - - for (int i = 0; i < fieldRvaTable.Rows.Count; i++) - { - FieldRVARow fieldRvaRow = fieldRvaTable[i]; - - MetadataToken fieldToken = new MetadataToken(TokenType.Field, fieldRvaRow.Field); - - FieldDefinition field = (FieldDefinition)assembly.MainModule.LookupByToken(fieldToken); - - fieldRvaRow.RVA = metadata_writer.GetDataCursor(); - metadata_writer.AddData(field.InitialValue.Length + 3 & (~3)); - metadata_writer.AddFieldInitData(field.InitialValue); - } - } - - void PatchResources() - { - ManifestResourceTable resourceTable = (ManifestResourceTable)stripped_tables[ManifestResourceTable.RId]; - if (resourceTable == null) - return; - - for (int i = 0; i < resourceTable.Rows.Count; i++) - { - ManifestResourceRow resourceRow = resourceTable[i]; - - if (resourceRow.Implementation.RID != 0) - continue; - - foreach (Resource resource in assembly.MainModule.Resources) - { - EmbeddedResource er = resource as EmbeddedResource; - if (er == null) - continue; - - if (resource.Name != original.MetadataRoot.Streams.StringsHeap[resourceRow.Name]) - continue; - - resourceRow.Offset = metadata_writer.AddResource(er.Data); - } - } - } - - void Write() - { - stripped.MetadataRoot.Accept(metadata_writer); - } - - public static void StripAssembly(AssemblyDefinition assembly, string file) - { - using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None)) - { - new AssemblyStripper(assembly, new BinaryWriter(fs)).Strip(); - } - } - } } diff --git a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index fc467c762a4c0d..c6a364e945f96c 100644 --- a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -4,11 +4,10 @@ Library true false - - disable - $(NoWarn),CA1050,CS0618,CS0649,CS8604,CS8602,CS8632,SYSLIB0003 + enable + $(NoWarn),CA1050,CS0618,CS0649,CS8632,SYSLIB0003 - + $(NoWarn),CS8604,CS8602 false @@ -30,6 +29,10 @@ + + + + From 747d88e249a312ce75fa52a2c08979d8f11c1087 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 29 Sep 2021 12:55:30 -0400 Subject: [PATCH 05/15] Don't include msbuild assemblies in MonoTargets package --- src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index c6a364e945f96c..d886653d317f2f 100644 --- a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -10,12 +10,18 @@ $(NoWarn),CS8604,CS8602 false - + - + + + + + + + From 290ad79fcc15233c2ef4effb2bf27607b3865b2b Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 29 Sep 2021 14:50:15 -0400 Subject: [PATCH 06/15] re-enable analyzers for the MonoTargetsTasks assembly --- src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs | 12 ++++++------ src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs b/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs index 8def6e80221cb3..eb38b986dae8f8 100644 --- a/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs +++ b/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs @@ -56,15 +56,15 @@ private bool StripAssembly(ITaskItem assemblyItem) { string assemblyFile = assemblyItem.ItemSpec; var outputPath = assemblyItem.GetMetadata("OutputPath"); - if (String.IsNullOrWhiteSpace(outputPath)) + if (string.IsNullOrWhiteSpace(outputPath)) { outputPath = assemblyFile; - Log.LogMessage(MessageImportance.Low, $"[ILStrip] {assemblyFile}"); + Log.LogMessage(MessageImportance.Low, $"[ILStrip] {assemblyFile}"); + } + else + { + Log.LogMessage(MessageImportance.Low, $"[ILStrip] {assemblyFile} to {outputPath}"); } - else - { - Log.LogMessage(MessageImportance.Low, $"[ILStrip] {assemblyFile} to {outputPath}"); - } try { diff --git a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index d886653d317f2f..fb52123469a359 100644 --- a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -8,7 +8,6 @@ $(NoWarn),CA1050,CS0618,CS0649,CS8632,SYSLIB0003 $(NoWarn),CS8604,CS8602 - false From a0b5e8bbddbd5179149deb6ed03c2bc072e3ad34 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 29 Sep 2021 14:51:40 -0400 Subject: [PATCH 07/15] Include *.dll in the MonoTargetsTasks nupkg In particular, pick up all the dependent assemblies for the net472 build --- src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index fb52123469a359..70560643a272ed 100644 --- a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -52,8 +52,9 @@ <_PublishFramework Remove="@(_PublishFramework)" /> <_PublishFramework Include="$(TargetFrameworks)" /> - - + + + From 9953d77e9765b4495cb9a755bd34864fccf37d55 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 29 Sep 2021 15:00:48 -0400 Subject: [PATCH 08/15] Update various READMEs --- docs/design/mono/mobile-runtimeconfig-json.md | 2 +- .../README.md | 16 ++++++++++++++++ src/mono/wasm/build/README.md | 4 ++-- .../JsonToItemsTaskFactory/README.md | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/docs/design/mono/mobile-runtimeconfig-json.md b/docs/design/mono/mobile-runtimeconfig-json.md index 239826da05220e..76bd4aa117a5ee 100644 --- a/docs/design/mono/mobile-runtimeconfig-json.md +++ b/docs/design/mono/mobile-runtimeconfig-json.md @@ -44,7 +44,7 @@ The task should: ``` + AssemblyFile="$(MonoTargetsTasksAssemblyPath)" /> ``` + +## ILStrip + +This is a task that removes the IL methods bodies from assemblies. Useful in conjunction with AOT compilation. + +``` + + + + + + + +``` + +The `OutputPath` metadata is optional. If it is not present, the items will be updated in place. diff --git a/src/mono/wasm/build/README.md b/src/mono/wasm/build/README.md index 312b5308645c39..8d4920a7be5328 100644 --- a/src/mono/wasm/build/README.md +++ b/src/mono/wasm/build/README.md @@ -114,8 +114,8 @@ them for the new task assembly. 1. The task assembly dir, and its path need to be in two properties: ```xml - $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'JsonToItemsTaskFactory', 'Debug', '$(NetCoreAppToolCurrent)')) - $([MSBuild]::NormalizePath('$(JsonToItemsTaskFactoryDir)', 'JsonToItemsTaskFactory.dll')) + $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'MonoTargetsTasks', 'Debug', '$(NetCoreAppToolCurrent)')) + $([MSBuild]::NormalizePath('$(MonoTargetsTasksDir)', 'MonoTargetsTasks.dll')) ``` And this needs to be set in: diff --git a/src/tasks/MonoTargetsTasks/JsonToItemsTaskFactory/README.md b/src/tasks/MonoTargetsTasks/JsonToItemsTaskFactory/README.md index 619991ac13e993..aaebf91d761982 100644 --- a/src/tasks/MonoTargetsTasks/JsonToItemsTaskFactory/README.md +++ b/src/tasks/MonoTargetsTasks/JsonToItemsTaskFactory/README.md @@ -34,7 +34,7 @@ Dictionary elements must have strings as values, and must include an `"Identity" To use the task, you need to reference the assembly and add the task to the project, as well as declare the task parameters that correspond to the properties and items you want to retrieve from the json blob. ```xml - From 2e1d08e532f5ddb938937c29a089c256521381ff Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 29 Sep 2021 15:06:20 -0400 Subject: [PATCH 09/15] remove unneeded target --- .../ILStrip/AssemblyStripper/AssemblyStripper.csproj | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj b/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj index 862d55a873b3bc..8d612e9936a4b2 100644 --- a/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj +++ b/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj @@ -16,15 +16,4 @@ - - - - - <_PublishFramework Remove="@(_PublishFramework)" /> - <_PublishFramework Include="$(TargetFrameworks)" /> - - - - - From eb70042a8b23bd26e8ef7ff74b6c33ca13adba2d Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 29 Sep 2021 16:59:34 -0400 Subject: [PATCH 10/15] Switch ILStrip to use the same Parallel.ForEach logic as MonoAOTCompiler --- src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs b/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs index eb38b986dae8f8..e5d6f0f0de5939 100644 --- a/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs +++ b/src/tasks/MonoTargetsTasks/ILStrip/ILStrip.cs @@ -34,19 +34,20 @@ public override bool Execute() throw new ArgumentException($"'{nameof(Assemblies)}' is required.", nameof(Assemblies)); } - if (DisableParallelStripping) - { - foreach (var assemblyItem in Assemblies) - { - if (!StripAssembly(assemblyItem)) - return !Log.HasLoggedErrors; - } - } - else + int allowedParallelism = DisableParallelStripping ? 1 : Math.Min(Assemblies.Length, Environment.ProcessorCount); + if (BuildEngine is IBuildEngine9 be9) + allowedParallelism = be9.RequestCores(allowedParallelism); + ParallelLoopResult result = Parallel.ForEach(Assemblies, + new ParallelOptions { MaxDegreeOfParallelism = allowedParallelism }, + (assemblyItem, state) => + { + if (!StripAssembly(assemblyItem)) + state.Stop(); + }); + + if (!result.IsCompleted && !Log.HasLoggedErrors) { - Parallel.ForEach(Assemblies, - new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, - assemblyItem => StripAssembly(assemblyItem)); + Log.LogError("Unknown failure occured while IL stripping assemblies. Check logs to get more details."); } return !Log.HasLoggedErrors; From 979e9ac689c3fbbe98a914b3fbb2f2de34a06c4e Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 29 Sep 2021 20:06:43 -0400 Subject: [PATCH 11/15] Remove unneeded NoWarn warnings --- .../ILStrip/AssemblyStripper/AssemblyStripper.csproj | 7 ++++++- src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj | 4 +--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj b/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj index 8d612e9936a4b2..a1524afe44a8bb 100644 --- a/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj +++ b/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj @@ -6,7 +6,12 @@ false disable - $(NoWarn),CA1050,CS0618,CS0649,CS8604,CS8602,CS8632,SYSLIB0003 + + $(NoWarn),CS0618,CS0649,SYSLIB0003 + false diff --git a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index 70560643a272ed..fa8024249731f5 100644 --- a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -5,9 +5,7 @@ true false enable - $(NoWarn),CA1050,CS0618,CS0649,CS8632,SYSLIB0003 - - $(NoWarn),CS8604,CS8602 + $(NoWarn),CA1050 From 84822878a70d007605b04f0ffbea04641900a5d5 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 29 Sep 2021 20:09:25 -0400 Subject: [PATCH 12/15] rearrange package references in MonoTargetsTask.csproj for readabilty --- src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index fa8024249731f5..59b3b1c638cc48 100644 --- a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -13,12 +13,15 @@ - + + + + @@ -26,11 +29,6 @@ - - - - - From 9eafb87b68a41c68d45af78f392601ae6fcef153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleksey=20Kliger=20=28=CE=BBgeek=29?= Date: Wed, 29 Sep 2021 20:37:28 -0400 Subject: [PATCH 13/15] More ItemGroup reformatting Co-authored-by: Ankit Jain --- src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index 59b3b1c638cc48..52700adabd9741 100644 --- a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -12,6 +12,7 @@ + @@ -19,16 +20,11 @@ + - - - - - - From 3d134c8ee8b1bad82f9fa60bdcb4b7311db4e8cf Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Thu, 30 Sep 2021 08:28:39 -0400 Subject: [PATCH 14/15] fix nits --- .../ILStrip/AssemblyStripper/AssemblyStripper.csproj | 2 -- src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj b/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj index a1524afe44a8bb..439b5b8b21b98c 100644 --- a/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj +++ b/src/tasks/MonoTargetsTasks/ILStrip/AssemblyStripper/AssemblyStripper.csproj @@ -1,8 +1,6 @@ $(TargetFrameworkForNETCoreTasks);$(TargetFrameworkForNETFrameworkTasks) - Library - true false disable diff --git a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index 52700adabd9741..4a5c0631fa8513 100644 --- a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -1,8 +1,6 @@ $(TargetFrameworkForNETCoreTasks);$(TargetFrameworkForNETFrameworkTasks) - Library - true false enable $(NoWarn),CA1050 From b70035f96fc369f9d3cbcd0b58e02f42855044fd Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Thu, 30 Sep 2021 08:28:45 -0400 Subject: [PATCH 15/15] Use SystemThreadingTasksExtensionsVersion instead of hardcoding --- src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj index 4a5c0631fa8513..23b128cf333caf 100644 --- a/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj +++ b/src/tasks/MonoTargetsTasks/MonoTargetsTasks.csproj @@ -20,7 +20,7 @@ - +