From 14cf2c6fd1c84f066d0c7484b2500d42522e4713 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Thu, 6 Apr 2023 16:22:02 -0500 Subject: [PATCH 1/4] Convert `/tools` and `/build-tools` projects from `net472` to `$(DotNetStableTargetFramework)` --- build-tools/api-merge/api-merge.csproj | 2 +- build-tools/api-xml-adjuster/api-xml-adjuster.csproj | 2 +- build-tools/check-boot-times/check-boot-times.csproj | 2 +- .../conjure-xamarin-android-cecil.csproj | 2 +- build-tools/create-android-api/create-android-api.csproj | 2 +- build-tools/jnienv-gen/jnienv-gen.csproj | 2 +- build-tools/plots-to-appinsights/ProcessPlotCSVFile.csproj | 2 +- build-tools/remap-assembly-ref/remap-assembly-ref.csproj | 2 +- tools/decompress-assemblies/decompress-assemblies.csproj | 2 +- tools/javadoc2mdoc/javadoc2mdoc.csproj | 2 +- tools/jit-times/jit-times.csproj | 2 +- tools/msbuild-fuzzer/msbuild-fuzzer.csproj | 2 +- tools/setup-windows/setup-windows.csproj | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/build-tools/api-merge/api-merge.csproj b/build-tools/api-merge/api-merge.csproj index 4331e8673ca..b03a9ad4abb 100644 --- a/build-tools/api-merge/api-merge.csproj +++ b/build-tools/api-merge/api-merge.csproj @@ -3,7 +3,7 @@ Debug Exe - net472 + $(DotNetStableTargetFramework) false ..\..\bin\Build$(Configuration) diff --git a/build-tools/api-xml-adjuster/api-xml-adjuster.csproj b/build-tools/api-xml-adjuster/api-xml-adjuster.csproj index 774de0c6512..b12f7bbd7f8 100644 --- a/build-tools/api-xml-adjuster/api-xml-adjuster.csproj +++ b/build-tools/api-xml-adjuster/api-xml-adjuster.csproj @@ -3,7 +3,7 @@ Debug Exe - net472 + $(DotNetStableTargetFramework) false ..\..\bin\Build$(Configuration) diff --git a/build-tools/check-boot-times/check-boot-times.csproj b/build-tools/check-boot-times/check-boot-times.csproj index 5fb664b9916..c84be8ca82c 100644 --- a/build-tools/check-boot-times/check-boot-times.csproj +++ b/build-tools/check-boot-times/check-boot-times.csproj @@ -1,7 +1,7 @@ - net472 + $(DotNetStableTargetFramework) false Exe Xamarin.Android.Tools diff --git a/build-tools/conjure-xamarin-android-cecil/conjure-xamarin-android-cecil.csproj b/build-tools/conjure-xamarin-android-cecil/conjure-xamarin-android-cecil.csproj index 3cf73cc2264..469501afb30 100644 --- a/build-tools/conjure-xamarin-android-cecil/conjure-xamarin-android-cecil.csproj +++ b/build-tools/conjure-xamarin-android-cecil/conjure-xamarin-android-cecil.csproj @@ -1,7 +1,7 @@ - net472 + $(DotNetStableTargetFramework) false Exe Xamarin.Android.Prepare diff --git a/build-tools/create-android-api/create-android-api.csproj b/build-tools/create-android-api/create-android-api.csproj index 73f4a017a2e..b3fd2867fd5 100644 --- a/build-tools/create-android-api/create-android-api.csproj +++ b/build-tools/create-android-api/create-android-api.csproj @@ -12,7 +12,7 @@ - + diff --git a/build-tools/jnienv-gen/jnienv-gen.csproj b/build-tools/jnienv-gen/jnienv-gen.csproj index 8a44f5fb401..d5cb4d773ce 100644 --- a/build-tools/jnienv-gen/jnienv-gen.csproj +++ b/build-tools/jnienv-gen/jnienv-gen.csproj @@ -3,7 +3,7 @@ Debug Exe - net472 + $(DotNetStableTargetFramework) false ..\..\bin\Build$(Configuration) diff --git a/build-tools/plots-to-appinsights/ProcessPlotCSVFile.csproj b/build-tools/plots-to-appinsights/ProcessPlotCSVFile.csproj index 6e9e5916ce9..158d8837964 100644 --- a/build-tools/plots-to-appinsights/ProcessPlotCSVFile.csproj +++ b/build-tools/plots-to-appinsights/ProcessPlotCSVFile.csproj @@ -3,7 +3,7 @@ Exe - net472 + $(DotNetStableTargetFramework) false Xamarin.Android.Tools.Plots diff --git a/build-tools/remap-assembly-ref/remap-assembly-ref.csproj b/build-tools/remap-assembly-ref/remap-assembly-ref.csproj index 950dbe36ec7..cacd4b29f8e 100644 --- a/build-tools/remap-assembly-ref/remap-assembly-ref.csproj +++ b/build-tools/remap-assembly-ref/remap-assembly-ref.csproj @@ -1,7 +1,7 @@ - net472 + $(DotNetStableTargetFramework) false Exe remapassemblyref diff --git a/tools/decompress-assemblies/decompress-assemblies.csproj b/tools/decompress-assemblies/decompress-assemblies.csproj index 049031e704c..d073ae2322d 100644 --- a/tools/decompress-assemblies/decompress-assemblies.csproj +++ b/tools/decompress-assemblies/decompress-assemblies.csproj @@ -4,7 +4,7 @@ Microsoft Corporation 2021 Microsoft Corporation 0.0.1 - net472 + $(DotNetStableTargetFramework) false Xamarin.Android.Tools.DecompressAssemblies decompress-assemblies diff --git a/tools/javadoc2mdoc/javadoc2mdoc.csproj b/tools/javadoc2mdoc/javadoc2mdoc.csproj index 74beb40b655..e87a01a86c3 100644 --- a/tools/javadoc2mdoc/javadoc2mdoc.csproj +++ b/tools/javadoc2mdoc/javadoc2mdoc.csproj @@ -1,6 +1,6 @@ - net472 + $(DotNetStableTargetFramework) false Exe Xamarin.Android.Tools.JavadocToMDoc diff --git a/tools/jit-times/jit-times.csproj b/tools/jit-times/jit-times.csproj index be61d248de0..49d84b9c3e5 100644 --- a/tools/jit-times/jit-times.csproj +++ b/tools/jit-times/jit-times.csproj @@ -2,7 +2,7 @@ Debug Exe - net472 + $(DotNetStableTargetFramework) false diff --git a/tools/msbuild-fuzzer/msbuild-fuzzer.csproj b/tools/msbuild-fuzzer/msbuild-fuzzer.csproj index 67253850627..c4ac46a77e8 100644 --- a/tools/msbuild-fuzzer/msbuild-fuzzer.csproj +++ b/tools/msbuild-fuzzer/msbuild-fuzzer.csproj @@ -1,6 +1,6 @@  - net472 + $(DotNetStableTargetFramework) {A3671983-ABC2-4693-8872-463427B57117} Exe diff --git a/tools/setup-windows/setup-windows.csproj b/tools/setup-windows/setup-windows.csproj index 063e4dfe8c7..970eb7629fc 100644 --- a/tools/setup-windows/setup-windows.csproj +++ b/tools/setup-windows/setup-windows.csproj @@ -3,7 +3,7 @@ - net472 + $(DotNetStableTargetFramework) false Exe setupwindows From 3bfffd5868cc2bf337e254b047da5298abe6d2a8 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Tue, 11 Apr 2023 09:31:03 -0500 Subject: [PATCH 2/4] Fix 'conjure-xamarin-android-cecil' --- Configuration.props | 2 +- .../xaprepare/Application/Utilities.cs | 20 +++++ .../Steps/Step_InstallMonoRuntimes.cs | 14 ++-- .../ToolRunners/ConjureXamarinAndroidCecil.cs | 73 +++++++++++++++++++ 4 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 build-tools/xaprepare/xaprepare/ToolRunners/ConjureXamarinAndroidCecil.cs diff --git a/Configuration.props b/Configuration.props index b817667364a..a881c28cc21 100644 --- a/Configuration.props +++ b/Configuration.props @@ -231,7 +231,7 @@ $(AndroidSupportedTargetAotAbis.Split(':')) - $(MSBuildThisFileDirectory)bin\Build$(Configuration)\remap-assembly-ref\remap-assembly-ref.exe + $(MSBuildThisFileDirectory)bin\Build$(Configuration)\remap-assembly-ref\remap-assembly-ref.dll $(ManagedRuntime) $(ManagedRuntimeArgs) "$(RemapAssemblyRefToolExecutable)" diff --git a/build-tools/xaprepare/xaprepare/Application/Utilities.cs b/build-tools/xaprepare/xaprepare/Application/Utilities.cs index 53462f44d2c..3f1bdfbe1e0 100644 --- a/build-tools/xaprepare/xaprepare/Application/Utilities.cs +++ b/build-tools/xaprepare/xaprepare/Application/Utilities.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Net; using System.Net.Http; using System.Reflection; @@ -796,6 +797,25 @@ public static bool RunCommand (string command, string? workingDirectory, bool ec return runner.Run (); } + public static bool RunManagedCommand (string command, string workingDirectory, bool ignoreEmptyArguments, params string [] arguments) + { + return RunManagedCommand (command, workingDirectory, echoStderr: true, ignoreEmptyArguments: ignoreEmptyArguments, arguments: arguments); + } + + // This is a managed assembly that needs to be run as 'dotnet foo.dll' + public static bool RunManagedCommand (string command, string? workingDirectory, bool echoStderr, bool ignoreEmptyArguments, params string [] arguments) + { + if (string.IsNullOrEmpty (command)) + throw new ArgumentException ("must not be null or empty", nameof (command)); + + var runner = new ProcessRunner ("dotnet", ignoreEmptyArguments, new [] { command }.Concat (arguments).ToArray ()) { + EchoStandardError = echoStderr, + WorkingDirectory = workingDirectory, + }; + + return runner.Run (); + } + public static string GetStringFromStdout (string command, params string?[] arguments) { return GetStringFromStdout (command, throwOnErrors: false, trimTrailingWhitespace: true, arguments: arguments); diff --git a/build-tools/xaprepare/xaprepare/Steps/Step_InstallMonoRuntimes.cs b/build-tools/xaprepare/xaprepare/Steps/Step_InstallMonoRuntimes.cs index a8d3a30de74..287d5e56a67 100644 --- a/build-tools/xaprepare/xaprepare/Steps/Step_InstallMonoRuntimes.cs +++ b/build-tools/xaprepare/xaprepare/Steps/Step_InstallMonoRuntimes.cs @@ -106,17 +106,14 @@ async Task ConjureXamarinCecilAndRemapRef (Context context, bool haveManag } StatusStep (context, "Conjuring Xamarin.Android.Cecil and Xamari.Android.Cecil.Mdb"); - string conjurer = Path.Combine (Configurables.Paths.BuildBinDir, "conjure-xamarin-android-cecil.exe"); - string conjurerSourceDir = Configurables.Paths.MonoProfileToolsDir; - string conjurerDestDir = Configurables.Paths.BuildBinDir; + string conjurer = Path.Combine (Configurables.Paths.BuildBinDir, "conjure-xamarin-android-cecil.dll"); - result = Utilities.RunCommand ( - haveManagedRuntime ? managedRuntime : conjurer, // command + result = Utilities.RunManagedCommand ( + conjurer, // command BuildPaths.XamarinAndroidSourceRoot, // workingDirectory true, // ignoreEmptyArguments // arguments - haveManagedRuntime ? conjurer : String.Empty, Configurables.Paths.MonoProfileToolsDir, // source dir Configurables.Paths.BuildBinDir // destination dir ); @@ -174,13 +171,12 @@ bool InstallUtilities (Context context, bool haveManagedRuntime, string managedR string relDestFilePath = Utilities.GetRelativePath (BuildPaths.XamarinAndroidSourceRoot, destFilePath); StatusSubStep (context, $"Remapping Cecil references for {relDestFilePath}"); - bool result = Utilities.RunCommand ( - haveManagedRuntime ? managedRuntime : remapper, // command + bool result = Utilities.RunManagedCommand ( + remapper, // command BuildPaths.XamarinAndroidSourceRoot, // workingDirectory true, // ignoreEmptyArguments // arguments - haveManagedRuntime ? remapper : String.Empty, Utilities.GetRelativePath (BuildPaths.XamarinAndroidSourceRoot, muf.SourcePath), relDestFilePath, "Mono.Cecil", diff --git a/build-tools/xaprepare/xaprepare/ToolRunners/ConjureXamarinAndroidCecil.cs b/build-tools/xaprepare/xaprepare/ToolRunners/ConjureXamarinAndroidCecil.cs new file mode 100644 index 00000000000..91c2af880db --- /dev/null +++ b/build-tools/xaprepare/xaprepare/ToolRunners/ConjureXamarinAndroidCecil.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading.Tasks; + +namespace Xamarin.Android.Prepare +{ + partial class ConjureXamarinAndroidCecilRunner : ToolRunner + { + protected override string DefaultToolExecutableName => "dotnet"; + protected override string ToolName => "dotnet"; + + public List StandardArguments { get; } + + public ConjureXamarinAndroidCecilRunner (Context context, Log? log = null, string? msbuildPath = null) + : base (context, log, msbuildPath) + { + ProcessTimeout = TimeSpan.FromMinutes (1); + + StandardArguments = new List { + Path.Combine (Configurables.Paths.BuildBinDir, "conjure-xamarin-android-cecil.dll"), + }; + } + + public async Task Run (string logTag, List? arguments = null, string? workingDirectory = null) + { + if (string.IsNullOrEmpty (logTag)) + throw new ArgumentException ("must not be null or empty", nameof (logTag)); + + if (string.IsNullOrEmpty (workingDirectory)) + workingDirectory = BuildPaths.XamarinAndroidSourceRoot; + + ProcessRunner runner = CreateProcessRunner (); + + AddArguments (runner, StandardArguments); + AddArguments (runner, arguments); + + string message = GetLogMessage (runner); + Log.Info (message, CommandMessageColor); + Log.StatusLine (); + + try { + return await RunTool ( + () => { + using (var outputSink = (OutputSink)SetupOutputSink (runner, $"conjurer.{logTag}")) { + runner.WorkingDirectory = workingDirectory; + StartTwiddler (); + return runner.Run (); + } + } + ); + } finally { + StopTwiddler (); + } + } + + protected override TextWriter CreateLogSink (string? logFilePath) + { + return new OutputSink (Log, logFilePath); + } + + class OutputSink : ToolRunner.ToolOutputSink + { + public override Encoding Encoding => Encoding.Default; + + public OutputSink (Log log, string? logFilePath) + : base (log, logFilePath) + { + } + } + } +} From 2de9b182238d745b44e950a713335826bbb1a847 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Tue, 11 Apr 2023 10:38:54 -0500 Subject: [PATCH 3/4] '.exe' -> '.dll' --- .../create-android-api.csproj | 24 +++--- .../ToolRunners/ConjureXamarinAndroidCecil.cs | 73 ------------------- 2 files changed, 10 insertions(+), 87 deletions(-) delete mode 100644 build-tools/xaprepare/xaprepare/ToolRunners/ConjureXamarinAndroidCecil.cs diff --git a/build-tools/create-android-api/create-android-api.csproj b/build-tools/create-android-api/create-android-api.csproj index b3fd2867fd5..436e633815e 100644 --- a/build-tools/create-android-api/create-android-api.csproj +++ b/build-tools/create-android-api/create-android-api.csproj @@ -52,15 +52,15 @@ Outputs="@(ApiFileDefinition->'%(ClassParseXml)')"> - $(XamarinAndroidSourcePath)\bin\$(Configuration)\lib\xamarin.android\xbuild\Xamarin\Android\class-parse.exe + $(MicrosoftAndroidSdkOutDir)class-parse.dll <_ClassParseCommands Condition="Exists('$(XamarinAndroidSourcePath)\src\Mono.Android\Profiles\api-%(ApiFileDefinition.Id).params.txt')" Include="@(ApiFileDefinition)"> - $(ClassParse) - $(AndroidSdkDirectory)\platforms\android-%(ApiFileDefinition.Id)\android.jar -platform=%(ApiFileDefinition.Id) -parameter-names="%(ApiFileDefinition.ParameterDescription)" -o="%(ApiFileDefinition.ClassParseXml)" + dotnet + $(ClassParse) $(AndroidSdkDirectory)\platforms\android-%(ApiFileDefinition.Id)\android.jar -platform=%(ApiFileDefinition.Id) -parameter-names="%(ApiFileDefinition.ParameterDescription)" -o="%(ApiFileDefinition.ClassParseXml)" @@ -68,8 +68,6 @@ @@ -81,22 +79,20 @@ Outputs="@(ApiFileDefinition->'%(ApiAdjustedXml)')"> - $(XamarinAndroidSourcePath)\bin\Build$(Configuration)\api-xml-adjuster.exe + $(XamarinAndroidSourcePath)\bin\Build$(Configuration)\api-xml-adjuster.dll <_AdjustApiXmlPrepareCommands Condition="Exists('$(XamarinAndroidSourcePath)\src\Mono.Android\Profiles\api-%(ApiFileDefinition.Id).params.txt')" Include="@(ApiFileDefinition)"> - $(ApiXmlAdjuster) - %(ApiFileDefinition.ClassParseXml) %(ApiFileDefinition.ApiAdjustedXml) + dotnet + $(ApiXmlAdjuster) %(ApiFileDefinition.ClassParseXml) %(ApiFileDefinition.ApiAdjustedXml) @@ -108,24 +104,24 @@ Outputs="@(_MergedXmlFiles->'%(MergedXml)')"> - ..\..\bin\Build$(Configuration)\api-merge.exe + ..\..\bin\Build$(Configuration)\api-merge.dll <_ConfigurationFile>..\..\bin\Build$(Configuration)\merge-configuration.xml <_ConfigurationInputBaseDirectory>..\..\bin\Build$(Configuration)\api\ <_ConfigurationOutputBaseDirectory>..\..\bin\Build$(Configuration)\api\ + Command="dotnet $(ApiMerge) -config=$(_ConfigurationFile) -config-input-dir=$(_ConfigurationInputBaseDirectory) -config-output-dir=$(_ConfigurationOutputBaseDirectory)" /> diff --git a/build-tools/xaprepare/xaprepare/ToolRunners/ConjureXamarinAndroidCecil.cs b/build-tools/xaprepare/xaprepare/ToolRunners/ConjureXamarinAndroidCecil.cs deleted file mode 100644 index 91c2af880db..00000000000 --- a/build-tools/xaprepare/xaprepare/ToolRunners/ConjureXamarinAndroidCecil.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Threading.Tasks; - -namespace Xamarin.Android.Prepare -{ - partial class ConjureXamarinAndroidCecilRunner : ToolRunner - { - protected override string DefaultToolExecutableName => "dotnet"; - protected override string ToolName => "dotnet"; - - public List StandardArguments { get; } - - public ConjureXamarinAndroidCecilRunner (Context context, Log? log = null, string? msbuildPath = null) - : base (context, log, msbuildPath) - { - ProcessTimeout = TimeSpan.FromMinutes (1); - - StandardArguments = new List { - Path.Combine (Configurables.Paths.BuildBinDir, "conjure-xamarin-android-cecil.dll"), - }; - } - - public async Task Run (string logTag, List? arguments = null, string? workingDirectory = null) - { - if (string.IsNullOrEmpty (logTag)) - throw new ArgumentException ("must not be null or empty", nameof (logTag)); - - if (string.IsNullOrEmpty (workingDirectory)) - workingDirectory = BuildPaths.XamarinAndroidSourceRoot; - - ProcessRunner runner = CreateProcessRunner (); - - AddArguments (runner, StandardArguments); - AddArguments (runner, arguments); - - string message = GetLogMessage (runner); - Log.Info (message, CommandMessageColor); - Log.StatusLine (); - - try { - return await RunTool ( - () => { - using (var outputSink = (OutputSink)SetupOutputSink (runner, $"conjurer.{logTag}")) { - runner.WorkingDirectory = workingDirectory; - StartTwiddler (); - return runner.Run (); - } - } - ); - } finally { - StopTwiddler (); - } - } - - protected override TextWriter CreateLogSink (string? logFilePath) - { - return new OutputSink (Log, logFilePath); - } - - class OutputSink : ToolRunner.ToolOutputSink - { - public override Encoding Encoding => Encoding.Default; - - public OutputSink (Log log, string? logFilePath) - : base (log, logFilePath) - { - } - } - } -} From b0cfa9484ace11535cd6c241aec8a0aa81798075 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Wed, 12 Apr 2023 09:56:17 -0500 Subject: [PATCH 4/4] Use $(DotNetPreviewTool) instead of 'dotnet' --- .../create-android-api/create-android-api.csproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build-tools/create-android-api/create-android-api.csproj b/build-tools/create-android-api/create-android-api.csproj index 436e633815e..dce4739f4e0 100644 --- a/build-tools/create-android-api/create-android-api.csproj +++ b/build-tools/create-android-api/create-android-api.csproj @@ -59,7 +59,7 @@ <_ClassParseCommands Condition="Exists('$(XamarinAndroidSourcePath)\src\Mono.Android\Profiles\api-%(ApiFileDefinition.Id).params.txt')" Include="@(ApiFileDefinition)"> - dotnet + $(DotNetPreviewTool) $(ClassParse) $(AndroidSdkDirectory)\platforms\android-%(ApiFileDefinition.Id)\android.jar -platform=%(ApiFileDefinition.Id) -parameter-names="%(ApiFileDefinition.ParameterDescription)" -o="%(ApiFileDefinition.ClassParseXml)" @@ -86,7 +86,7 @@ <_AdjustApiXmlPrepareCommands Condition="Exists('$(XamarinAndroidSourcePath)\src\Mono.Android\Profiles\api-%(ApiFileDefinition.Id).params.txt')" Include="@(ApiFileDefinition)"> - dotnet + $(DotNetPreviewTool) $(ApiXmlAdjuster) %(ApiFileDefinition.ClassParseXml) %(ApiFileDefinition.ApiAdjustedXml) @@ -111,7 +111,7 @@ + Command=""$(DotNetPreviewTool)" $(ApiMerge) -config=$(_ConfigurationFile) -config-input-dir=$(_ConfigurationInputBaseDirectory) -config-output-dir=$(_ConfigurationOutputBaseDirectory)" /> @@ -121,7 +121,7 @@ Inputs="..\..\bin\Build$(Configuration)\jnienv-gen.dll" Outputs="../../src/Mono.Android/Android.Runtime/JNIEnv.g.cs"> @@ -136,4 +136,4 @@ - \ No newline at end of file +