[dotnet] Parse the -gcc_flags and -link_flags mtouch/mmp arguments and pass them to the native linker. (#13521)

This commit is contained in:
Rolf Bjarne Kvinge 2021-12-13 08:33:26 +01:00 коммит произвёл GitHub
Родитель bc65a52227
Коммит b8e9c61409
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
5 изменённых файлов: 41 добавлений и 1 удалений

Просмотреть файл

@ -1058,7 +1058,7 @@
EntitlementsInExecutable="$(_CompiledEntitlements)"
FrameworkRPath="$(_EmbeddedFrameworksRPath)"
Frameworks="@(_NativeExecutableFrameworks);@(_BindingLibraryFrameworks)"
LinkerFlags="@(_AssemblyLinkerFlags);@(_ReferencesLinkerFlags);@(_MainLinkerFlags)"
LinkerFlags="@(_AssemblyLinkerFlags);@(_ReferencesLinkerFlags);@(_MainLinkerFlags);@(_CustomLinkFlags)"
LinkWithLibraries="@(_XamarinMainLibraries);@(_BindingLibraryLinkWith);@(_MainLinkWith)"
MinimumOSVersion="$(_MinimumOSVersion)"
NativeReferences="@(_FileNativeReference);@(_FrameworkNativeReference)"

Просмотреть файл

@ -1106,6 +1106,15 @@ namespace Xamarin.Localization.MSBuild {
}
}
/// <summary>
/// Looks up a localized string similar to Could not parse the custom linker argument(s) &apos;-{0}&apos;: {1}.
/// </summary>
public static string E0189 {
get {
return ResourceManager.GetString("E0189", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Could not resolve host IPs for WiFi debugger settings.
/// .

Просмотреть файл

@ -888,6 +888,10 @@
<value>Could not map the Mac Catalyst version {0} to a corresponding macOS version. Valid Mac Catalyst versions are: {1}</value>
</data>
<data name="E0189" xml:space="preserve">
<value>Could not parse the custom linker argument(s) '-{0}': {1}</value>
</data>
<data name="E7001" xml:space="preserve">
<value>Could not resolve host IPs for WiFi debugger settings.
</value>

Просмотреть файл

@ -3,6 +3,9 @@ using System.Collections.Generic;
using Microsoft.Build.Utilities;
using Microsoft.Build.Framework;
using Xamarin.Localization.MSBuild;
using Xamarin.Utils;
namespace Xamarin.MacDev.Tasks {
public abstract class ParseBundlerArgumentsTaskBase : XamarinTask {
public string ExtraArgs { get; set; }
@ -22,6 +25,9 @@ namespace Xamarin.MacDev.Tasks {
[Output]
public string CustomBundleName { get; set; }
[Output]
public ITaskItem[] CustomLinkFlags { get; set; }
[Output]
public string NoSymbolStrip { get; set; }
@ -55,6 +61,7 @@ namespace Xamarin.MacDev.Tasks {
if (!string.IsNullOrEmpty (ExtraArgs)) {
var args = CommandLineArgumentBuilder.Parse (ExtraArgs);
List<string> xml = null;
List<string> customLinkFlags = null;
var envVariables = new List<ITaskItem> ();
var dlsyms = new List<ITaskItem> ();
@ -149,6 +156,16 @@ namespace Xamarin.MacDev.Tasks {
// Output is EnableAssemblyILStripping so we enable if --nostrip=false and disable if true
NoStrip = ParseBool (value) ? "false" : "true";
break;
case "gcc_flags": // mtouch uses gcc_flags
case "link_flags": // mmp uses link_flags
if (!StringUtils.TryParseArguments (value, out var lf, out var ex)) {
Log.LogError (MSBStrings.E0189 /* Could not parse the custom linker argument(s) '-{0}': {1} */, $"-{name}={value}", ex.Message);
continue;
}
if (customLinkFlags is null)
customLinkFlags = new List<string> ();
customLinkFlags.AddRange (lf);
break;
default:
Log.LogMessage (MessageImportance.Low, "Skipping unknown argument '{0}' with value '{1}'", name, value);
break;
@ -164,6 +181,15 @@ namespace Xamarin.MacDev.Tasks {
XmlDefinitions = defs.ToArray ();
}
if (customLinkFlags is not null) {
var defs = new List<ITaskItem> ();
if (CustomLinkFlags is not null)
defs.AddRange (CustomLinkFlags);
foreach (var lf in customLinkFlags)
defs.Add (new TaskItem (lf));
CustomLinkFlags = defs.ToArray ();
}
if (envVariables.Count > 0) {
if (EnvironmentVariables != null)
envVariables.AddRange (EnvironmentVariables);

Просмотреть файл

@ -1658,6 +1658,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
Verbosity="$(_BundlerVerbosity)"
>
<Output TaskParameter="CustomBundleName" PropertyName="_CustomBundleName" />
<Output TaskParameter="CustomLinkFlags" ItemName="_CustomLinkFlags" />
<Output TaskParameter="DlSym" ItemName="_BundlerDlsym" />
<Output TaskParameter="EnvironmentVariables" ItemName="_BundlerEnvironmentVariables" />
<Output TaskParameter="MarshalManagedExceptionMode" PropertyName="_MarshalManagedExceptionMode" />