diff --git a/tests/mono-native/iOS/mono-native.csproj.template b/tests/mono-native/iOS/mono-native.csproj.template index 7f74b6d3fb..eff5089a32 100644 --- a/tests/mono-native/iOS/mono-native.csproj.template +++ b/tests/mono-native/iOS/mono-native.csproj.template @@ -14,14 +14,18 @@ 168,169,219,414,612,618,649,672 Xamarin.iOS obj\$(Platform)\$(Configuration)-unified - + + + MONO_NATIVE_SYMLINK + MONO_NATIVE_STATIC + $(MonoNativeMode);$(DefineConstants) True full False bin\iPhoneSimulator\$(Configuration)-unified - DEBUG;MONO_NATIVE_SYMLINK;$(DefineConstants) + DEBUG;$(DefineConstants) prompt 4 True @@ -36,7 +40,7 @@ none True bin\iPhoneSimulator\$(Configuration)-unified - MONO_NATIVE_STATIC;$(DefineConstants) + $(DefineConstants) prompt 4 None @@ -50,7 +54,7 @@ full False bin\iPhone\$(Configuration)-unified - DEBUG;MONO_NATIVE_STATIC;$(DefineConstants) + DEBUG;$(DefineConstants) prompt 4 iPhone Developer @@ -66,7 +70,7 @@ full False bin\iPhone\$(Configuration)-unified - DEBUG;MONO_NATIVE_STATIC;$(DefineConstants) + DEBUG;$(DefineConstants) prompt 4 iPhone Developer @@ -82,7 +86,7 @@ full False bin\iPhone\$(Configuration)-unified - DEBUG;MONO_NATIVE_STATIC;$(DefineConstants) + DEBUG;$(DefineConstants) prompt 4 iPhone Developer @@ -97,7 +101,7 @@ none True bin\iPhone\$(Configuration)-unified - MONO_NATIVE_STATIC;$(DefineConstants) + $(DefineConstants) prompt 4 iPhone Developer @@ -112,7 +116,7 @@ none True bin\iPhone\$(Configuration)-unified - MONO_NATIVE_STATIC;$(DefineConstants) + $(DefineConstants) prompt 4 iPhone Developer @@ -127,7 +131,7 @@ none True bin\iPhone\$(Configuration)-unified - MONO_NATIVE_STATIC;$(DefineConstants) + $(DefineConstants) prompt 4 iPhone Developer @@ -142,7 +146,7 @@ none True bin\iPhone\$(Configuration)-unified - MONO_NATIVE_STATIC;$(DefineConstants) + $(DefineConstants) prompt 4 iPhone Developer diff --git a/tests/xharness/Jenkins/TestData.cs b/tests/xharness/Jenkins/TestData.cs index ae8cb9739a..e5966a0b5c 100644 --- a/tests/xharness/Jenkins/TestData.cs +++ b/tests/xharness/Jenkins/TestData.cs @@ -18,7 +18,6 @@ namespace Xharness.Jenkins { public bool? Ignored; public bool EnableSGenConc; public bool UseThumb; - public MonoNativeFlavor MonoNativeFlavor; public MonoNativeLinkMode MonoNativeLinkMode; public IEnumerable Candidates; } diff --git a/tests/xharness/Jenkins/TestVariationsFactory.cs b/tests/xharness/Jenkins/TestVariationsFactory.cs index 1f815eefd9..7f6a5007f1 100644 --- a/tests/xharness/Jenkins/TestVariationsFactory.cs +++ b/tests/xharness/Jenkins/TestVariationsFactory.cs @@ -29,19 +29,6 @@ namespace Xharness.Jenkins { { // This function returns additional test configurations (in addition to the default one) for the specific test - MonoNativeFlavor flavor; - switch (test.TestName) { - case "mono-native-compat": - flavor = MonoNativeFlavor.Compat; - break; - case "mono-native-unified": - flavor = MonoNativeFlavor.Unified; - break; - default: - flavor = MonoNativeFlavor.None; - break; - } - // 32-bit interpreter doesn't work yet: https://github.com/mono/mono/issues/9871 var supports_interpreter = test.Platform != TestPlatform.iOS_Unified32; var supports_dynamic_registrar_on_device = test.Platform == TestPlatform.iOS_Unified64 || test.Platform == TestPlatform.tvOS; @@ -54,17 +41,17 @@ namespace Xharness.Jenkins { /* we don't add --assembly-build-target=@all=staticobject because that's the default in all our test projects */ if (supports_debug) { - yield return new TestData { Variation = "AssemblyBuildTarget: dylib (debug)", MTouchExtraArgs = $"--assembly-build-target=@all=dynamiclibrary {test.TestProject.MTouchExtraArgs}", Debug = true, Profiling = false, MonoNativeLinkMode = MonoNativeLinkMode.Dynamic, MonoNativeFlavor = flavor }; - yield return new TestData { Variation = "AssemblyBuildTarget: SDK framework (debug)", MTouchExtraArgs = $"--assembly-build-target=@sdk=framework=Xamarin.Sdk --assembly-build-target=@all=staticobject {test.TestProject.MTouchExtraArgs}", Debug = true, Profiling = false, MonoNativeLinkMode = MonoNativeLinkMode.Static, MonoNativeFlavor = flavor }; - yield return new TestData { Variation = "AssemblyBuildTarget: dylib (debug, profiling)", MTouchExtraArgs = $"--assembly-build-target=@all=dynamiclibrary {test.TestProject.MTouchExtraArgs}", Debug = true, Profiling = true, MonoNativeLinkMode = MonoNativeLinkMode.Dynamic, MonoNativeFlavor = flavor }; - yield return new TestData { Variation = "AssemblyBuildTarget: SDK framework (debug, profiling)", MTouchExtraArgs = $"--assembly-build-target=@sdk=framework=Xamarin.Sdk --assembly-build-target=@all=staticobject {test.TestProject.MTouchExtraArgs}", Debug = true, Profiling = true, MonoNativeLinkMode = MonoNativeLinkMode.Static, MonoNativeFlavor = flavor }; + yield return new TestData { Variation = "AssemblyBuildTarget: dylib (debug)", MTouchExtraArgs = $"--assembly-build-target=@all=dynamiclibrary {test.TestProject.MTouchExtraArgs}", Debug = true, Profiling = false, MonoNativeLinkMode = MonoNativeLinkMode.Dynamic }; + yield return new TestData { Variation = "AssemblyBuildTarget: SDK framework (debug)", MTouchExtraArgs = $"--assembly-build-target=@sdk=framework=Xamarin.Sdk --assembly-build-target=@all=staticobject {test.TestProject.MTouchExtraArgs}", Debug = true, Profiling = false, MonoNativeLinkMode = MonoNativeLinkMode.Static }; + yield return new TestData { Variation = "AssemblyBuildTarget: dylib (debug, profiling)", MTouchExtraArgs = $"--assembly-build-target=@all=dynamiclibrary {test.TestProject.MTouchExtraArgs}", Debug = true, Profiling = true, MonoNativeLinkMode = MonoNativeLinkMode.Dynamic }; + yield return new TestData { Variation = "AssemblyBuildTarget: SDK framework (debug, profiling)", MTouchExtraArgs = $"--assembly-build-target=@sdk=framework=Xamarin.Sdk --assembly-build-target=@all=staticobject {test.TestProject.MTouchExtraArgs}", Debug = true, Profiling = true, MonoNativeLinkMode = MonoNativeLinkMode.Static }; } if (test.ProjectConfiguration.Contains ("Debug")) yield return new TestData { Variation = "Release", MTouchExtraArgs = test.TestProject.MTouchExtraArgs, Debug = false, Profiling = false, MonoNativeLinkMode = MonoNativeLinkMode.Static }; if (test.Platform == TestPlatform.iOS_Unified32) yield return new TestData { Variation = "Release: UseThumb", MTouchExtraArgs = test.TestProject.MTouchExtraArgs, Debug = false, Profiling = false, MonoNativeLinkMode = MonoNativeLinkMode.Static, UseThumb = true }; - yield return new TestData { Variation = "AssemblyBuildTarget: SDK framework (release)", MTouchExtraArgs = $"--assembly-build-target=@sdk=framework=Xamarin.Sdk --assembly-build-target=@all=staticobject {test.TestProject.MTouchExtraArgs}", Debug = false, Profiling = false, MonoNativeLinkMode = MonoNativeLinkMode.Static, MonoNativeFlavor = flavor }; + yield return new TestData { Variation = "AssemblyBuildTarget: SDK framework (release)", MTouchExtraArgs = $"--assembly-build-target=@sdk=framework=Xamarin.Sdk --assembly-build-target=@all=staticobject {test.TestProject.MTouchExtraArgs}", Debug = false, Profiling = false, MonoNativeLinkMode = MonoNativeLinkMode.Static }; switch (test.TestName) { case "monotouch-test": @@ -203,11 +190,11 @@ namespace Xharness.Jenkins { } } clone.Xml.SetNode (isMac ? "Profiling" : "MTouchProfiling", profiling ? "True" : "False", task.ProjectPlatform, configuration); - if (test_data.MonoNativeFlavor != MonoNativeFlavor.None) { + if (test_data.MonoNativeLinkMode != MonoNativeLinkMode.None) { var mono_native_link = test_data.MonoNativeLinkMode; if (!canSymlink && mono_native_link == MonoNativeLinkMode.Symlink) mono_native_link = MonoNativeLinkMode.Static; - MonoNativeHelper.AddProjectDefines (clone.Xml, test_data.MonoNativeFlavor, mono_native_link, task.ProjectPlatform, configuration); + MonoNativeHelper.AddProjectDefines (clone.Xml, mono_native_link); } if (test_data.EnableSGenConc) clone.Xml.SetNode ("MtouchEnableSGenConc", "true", task.ProjectPlatform, configuration); diff --git a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/MonoNativeInfo.cs b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/MonoNativeInfo.cs index 9c3961b3ed..93c712da52 100644 --- a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/MonoNativeInfo.cs +++ b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/MonoNativeInfo.cs @@ -48,64 +48,23 @@ namespace Microsoft.DotNet.XHarness.iOS.Shared { public static class MonoNativeHelper { - public static void AddProjectDefines ( - XmlDocument project, MonoNativeFlavor flavor, MonoNativeLinkMode link, - string platform, string config) - { - AddProjectDefines (project, flavor, platform, config); - AddProjectDefines (project, link, platform, config); - } - - public static void AddProjectDefines ( - XmlDocument project, MonoNativeFlavor flavor, - string platform = null, string config = null) - { - switch (flavor) { - case MonoNativeFlavor.Compat: - if (platform != null) - project.AddAdditionalDefines ("MONO_NATIVE_COMPAT", platform, config); - else - project.AddAdditionalDefines ("MONO_NATIVE_COMPAT"); - break; - case MonoNativeFlavor.Unified: - if (platform != null) - project.AddAdditionalDefines ("MONO_NATIVE_UNIFIED", platform, config); - else - project.AddAdditionalDefines ("MONO_NATIVE_UNIFIED"); - break; - default: - throw new Exception ($"Unknown MonoNativeFlavor: {flavor}"); - } - } - - public static void AddProjectDefines ( - XmlDocument project, MonoNativeLinkMode link, - string platform, string config) + public static void AddProjectDefines (XmlDocument project, MonoNativeLinkMode link) { switch (link) { case MonoNativeLinkMode.Static: - project.AddAdditionalDefines ("MONO_NATIVE_STATIC", platform, config); - project.RemoveDefines ("MONO_NATIVE_DYNAMIC; MONO_NATIVE_SYMLINK", platform, config); + project.AddTopLevelProperty ("MonoNativeMode", "MONO_NATIVE_STATIC");; break; case MonoNativeLinkMode.Dynamic: - project.AddAdditionalDefines ("MONO_NATIVE_DYNAMIC", platform, config); - project.RemoveDefines ("MONO_NATIVE_STATIC; MONO_NATIVE_SYMLINK", platform, config); + project.AddTopLevelProperty ("MonoNativeMode", "MONO_NATIVE_DYNAMIC"); break; case MonoNativeLinkMode.Symlink: - project.AddAdditionalDefines ("MONO_NATIVE_SYMLINK", platform, config); - project.RemoveDefines ("MONO_NATIVE_MONO_NATIVE_STATIC; MONO_NATIVE_DYNAMIC", platform, config); + project.AddTopLevelProperty ("MonoNativeMode", "MONO_NATIVE_SYMLINK"); break; default: throw new Exception ($"Unknown MonoNativeLinkMode: {link}"); } } - public static void RemoveSymlinkMode (XmlDocument project) - { - AddProjectDefines (project, MonoNativeLinkMode.Static, "iPhone", "Debug"); - AddProjectDefines (project, MonoNativeLinkMode.Static, "iPhoneSimulator", "Debug"); - } - public static string GetMinimumOSVersion (DevicePlatform platform, MonoNativeFlavor flavor) { switch (flavor) { @@ -168,9 +127,8 @@ namespace Microsoft.DotNet.XHarness.iOS.Shared { var xml = File.ReadAllText (TemplatePath); inputProject.LoadXmlWithoutNetworkAccess (xml); - inputProject.SetOutputPath ("bin\\$(Platform)\\$(Configuration)" + FlavorSuffix); - inputProject.SetIntermediateOutputPath ("obj\\$(Platform)\\$(Configuration)" + FlavorSuffix); inputProject.SetAssemblyName (inputProject.GetAssemblyName () + FlavorSuffix); + inputProject.AddAdditionalDefines (Flavor == MonoNativeFlavor.Compat ? "MONO_NATIVE_COMPAT" : "MONO_NATIVE_UNIFIED"); inputProject.ResolveAllPaths (TemplatePath); var template_info_plist = inputProject.GetInfoPListInclude ().Replace ('\\', '/'); @@ -178,16 +136,9 @@ namespace Microsoft.DotNet.XHarness.iOS.Shared { SetInfoPListMinimumOSVersion (template_info_plist, target_info_plist); inputProject.FixInfoPListInclude (FlavorSuffix, newName: target_info_plist); - AddProjectDefines (inputProject); - inputProject.Save (ProjectPath, log); } - public void AddProjectDefines (XmlDocument project) - { - MonoNativeHelper.AddProjectDefines (project, Flavor); - } - public XmlDocument SetInfoPListMinimumOSVersion (string template_plist, string target_plist) { var template_info_plist = template_plist; diff --git a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/Utilities/ProjectFileExtensions.cs b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/Utilities/ProjectFileExtensions.cs index a169842f7e..f27915c5c1 100644 --- a/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/Utilities/ProjectFileExtensions.cs +++ b/tests/xharness/Microsoft.DotNet.XHarness.iOS.Shared/Utilities/ProjectFileExtensions.cs @@ -817,6 +817,15 @@ namespace Microsoft.DotNet.XHarness.iOS.Shared.Utilities { throw new Exception ("Could not find where to add a new DefineConstants node"); } + public static void AddTopLevelProperty (this XmlDocument csproj, string property, string value) + { + var propertyGroup = csproj.SelectNodes ("//*[local-name() = 'PropertyGroup' and not(@Condition)]") [0]; + + var propertyNode = csproj.CreateElement (property, csproj.GetNamespace ()); + propertyNode.InnerText = value; + propertyGroup.AppendChild (propertyNode); + } + public static void SetNode (this XmlDocument csproj, string node, string value) { var nodes = csproj.SelectNodes ("/*/*/*[local-name() = '" + node + "']");