diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.CoreCLR.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.CoreCLR.targets index dc9feb20cdf..799ad53dc20 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.CoreCLR.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.CoreCLR.targets @@ -5,7 +5,7 @@ Microsoft.Android.Sdk.CoreCLR.targets This file contains the CoreCLR-specific MSBuild logic for .NET for Android. *********************************************************************************************** --> - + @@ -25,6 +25,18 @@ This file contains the CoreCLR-specific MSBuild logic for .NET for Android. true + + + + $(PublishReadyToRunCrossgen2ExtraArgs);--maxgenericcycle:2 + $(PublishReadyToRunCrossgen2ExtraArgs);--maxgenericcyclebreadth:1 + + + $""" + + + + + + """, + }); + + using var b = CreateDllBuilder (); + b.Target = "_CaptureReadyToRunGenericCycleLimits"; + var parameters = extraArguments.IsNullOrEmpty () ? + [] : + new [] { $"PublishReadyToRunCrossgen2ExtraArgs={extraArguments.Replace (";", "%3B")}" }; + Assert.IsTrue (b.Build (proj, parameters: parameters), "Build should have succeeded."); + + var outputPath = Path.Combine (Root, b.ProjectDirectory, output); + FileAssert.Exists (outputPath); + var actualArguments = File.ReadAllText (outputPath).Trim () + .Split (new [] { ';' }, StringSplitOptions.RemoveEmptyEntries); + var expected = expectedArguments.Split (new [] { ';' }, StringSplitOptions.RemoveEmptyEntries); + CollectionAssert.AreEquivalent (expected, actualArguments); + } + [Test] public void AndroidEnableMarshalMethodsWithReadyToRunFailsBuild () {