[tests] Set the correct mono-native link mode and flavor defines in the csproj itself.
This makes it possible to simplify a lot of C# code.
This commit is contained in:
Родитель
92a9aacbd3
Коммит
e47a995797
|
@ -14,14 +14,18 @@
|
|||
<NoWarn>168,169,219,414,612,618,649,672</NoWarn>
|
||||
<TargetFrameworkIdentifier>Xamarin.iOS</TargetFrameworkIdentifier>
|
||||
<IntermediateOutputPath>obj\$(Platform)\$(Configuration)-unified</IntermediateOutputPath>
|
||||
<DefineConstants></DefineConstants>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<MonoNativeMode Condition="'$(TargetFrameworkIdentifier)|$(Configuration)|$(Platform)' == 'Xamarin.iOS|Debug|iPhoneSimulator'">MONO_NATIVE_SYMLINK</MonoNativeMode>
|
||||
<MonoNativeMode Condition="'$(MonoNativeMode)' == ''">MONO_NATIVE_STATIC</MonoNativeMode>
|
||||
<DefineConstants>$(MonoNativeMode);$(DefineConstants)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
|
||||
<DebugSymbols>True</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<OutputPath>bin\iPhoneSimulator\$(Configuration)-unified</OutputPath>
|
||||
<DefineConstants>DEBUG;MONO_NATIVE_SYMLINK;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>DEBUG;$(DefineConstants)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<MtouchDebug>True</MtouchDebug>
|
||||
|
@ -36,7 +40,7 @@
|
|||
<DebugType>none</DebugType>
|
||||
<Optimize>True</Optimize>
|
||||
<OutputPath>bin\iPhoneSimulator\$(Configuration)-unified</OutputPath>
|
||||
<DefineConstants>MONO_NATIVE_STATIC;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<MtouchLink>None</MtouchLink>
|
||||
|
@ -50,7 +54,7 @@
|
|||
<DebugType>full</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<OutputPath>bin\iPhone\$(Configuration)-unified</OutputPath>
|
||||
<DefineConstants>DEBUG;MONO_NATIVE_STATIC;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>DEBUG;$(DefineConstants)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
|
@ -66,7 +70,7 @@
|
|||
<DebugType>full</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<OutputPath>bin\iPhone\$(Configuration)-unified</OutputPath>
|
||||
<DefineConstants>DEBUG;MONO_NATIVE_STATIC;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>DEBUG;$(DefineConstants)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
|
@ -82,7 +86,7 @@
|
|||
<DebugType>full</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<OutputPath>bin\iPhone\$(Configuration)-unified</OutputPath>
|
||||
<DefineConstants>DEBUG;MONO_NATIVE_STATIC;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>DEBUG;$(DefineConstants)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
|
@ -97,7 +101,7 @@
|
|||
<DebugType>none</DebugType>
|
||||
<Optimize>True</Optimize>
|
||||
<OutputPath>bin\iPhone\$(Configuration)-unified</OutputPath>
|
||||
<DefineConstants>MONO_NATIVE_STATIC;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
|
@ -112,7 +116,7 @@
|
|||
<DebugType>none</DebugType>
|
||||
<Optimize>True</Optimize>
|
||||
<OutputPath>bin\iPhone\$(Configuration)-unified</OutputPath>
|
||||
<DefineConstants>MONO_NATIVE_STATIC;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
|
@ -127,7 +131,7 @@
|
|||
<DebugType>none</DebugType>
|
||||
<Optimize>True</Optimize>
|
||||
<OutputPath>bin\iPhone\$(Configuration)-unified</OutputPath>
|
||||
<DefineConstants>MONO_NATIVE_STATIC;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
|
@ -142,7 +146,7 @@
|
|||
<DebugType>none</DebugType>
|
||||
<Optimize>True</Optimize>
|
||||
<OutputPath>bin\iPhone\$(Configuration)-unified</OutputPath>
|
||||
<DefineConstants>MONO_NATIVE_STATIC;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
|
|
|
@ -18,7 +18,6 @@ namespace Xharness.Jenkins {
|
|||
public bool? Ignored;
|
||||
public bool EnableSGenConc;
|
||||
public bool UseThumb;
|
||||
public MonoNativeFlavor MonoNativeFlavor;
|
||||
public MonoNativeLinkMode MonoNativeLinkMode;
|
||||
public IEnumerable<IDevice> Candidates;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 + "']");
|
||||
|
|
Загрузка…
Ссылка в новой задаче