[msbuild/dotnet] Add support for passing --aot arguments to the AOT compiler. (#14936)

Pick up --aot arguments in MtouchExtraArgs and pass them to the AOT compiler
when building a .NET project. This makes it possible to work around #14887 by
manually increasing the number of trampolines.

Ref: https://github.com/xamarin/xamarin-macios/issues/14887
This commit is contained in:
Rolf Bjarne Kvinge 2022-05-10 16:25:19 +02:00 коммит произвёл GitHub
Родитель e6d4878fa5
Коммит f2bcedd441
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
4 изменённых файлов: 21 добавлений и 0 удалений

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

@ -995,6 +995,7 @@
<AOTCompile
SessionId="$(BuildSessionId)"
Condition="'$(IsMacEnabled)' == 'true'"
AotArguments="@(_AotArguments)"
Assemblies="@(_AssembliesToAOT)"
AOTCompilerPath="$(_AOTCompiler)"
InputDirectory="$(_AOTInputDirectory)"

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

@ -14,6 +14,8 @@ using Xamarin.Utils;
namespace Xamarin.MacDev.Tasks {
public abstract class AOTCompileTaskBase : XamarinTask {
public ITaskItem [] AotArguments { get; set; } = Array.Empty<ITaskItem> ();
[Required]
public string AOTCompilerPath { get; set; } = string.Empty;
@ -71,6 +73,7 @@ namespace Xamarin.MacDev.Tasks {
{ "MONO_PATH", Path.GetFullPath (InputDirectory) },
};
var globalAotArguments = AotArguments?.Select (v => v.ItemSpec).ToList ();
for (var i = 0; i < Assemblies.Length; i++) {
var asm = Assemblies [i];
var input = inputs [i];
@ -95,6 +98,8 @@ namespace Xamarin.MacDev.Tasks {
return false;
}
arguments.Add ($"{string.Join (",", parsedArguments)}");
if (globalAotArguments is not null)
arguments.Add ($"--aot={string.Join (",", globalAotArguments)}");
arguments.AddRange (parsedProcessArguments);
arguments.Add (input);

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

@ -10,6 +10,9 @@ namespace Xamarin.MacDev.Tasks {
public abstract class ParseBundlerArgumentsTaskBase : XamarinTask {
public string ExtraArgs { get; set; }
[Output]
public ITaskItem [] Aot { get; set; }
[Output]
public ITaskItem [] DlSym { get; set; }
@ -65,6 +68,7 @@ namespace Xamarin.MacDev.Tasks {
var args = CommandLineArgumentBuilder.Parse (ExtraArgs);
List<string> xml = null;
List<string> customLinkFlags = null;
var aot = new List<ITaskItem> ();
var envVariables = new List<ITaskItem> ();
var dlsyms = new List<ITaskItem> ();
@ -100,6 +104,9 @@ namespace Xamarin.MacDev.Tasks {
}
switch (name) {
case "aot":
aot.Add (new TaskItem (value));
break;
case "nosymbolstrip":
// There's also a version that takes symbols as arguments:
// --nosymbolstrip:symbol1,symbol2
@ -207,6 +214,12 @@ namespace Xamarin.MacDev.Tasks {
dlsyms.AddRange (DlSym);
DlSym = dlsyms.ToArray ();
}
if (aot.Count > 0) {
if (Aot is not null)
aot.AddRange (Aot);
Aot = aot.ToArray ();
}
}
return !Log.HasLoggedErrors;

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

@ -1763,12 +1763,14 @@ Copyright (C) 2018 Microsoft. All rights reserved.
<Target Name="_ParseBundlerArguments">
<ParseBundlerArguments
Aot="@(_AotArguments)"
ExtraArgs="$(_BundlerArguments)"
NoSymbolStrip="$(NoSymbolStrip)"
NoDSymUtil="$(NoDSymUtil)"
PackageDebugSymbols="$(PackageDebugSymbols)"
Verbosity="$(_BundlerVerbosity)"
>
<Output TaskParameter="Aot" ItemName="_AotArguments" />
<Output TaskParameter="CustomBundleName" PropertyName="_CustomBundleName" />
<Output TaskParameter="CustomLinkFlags" ItemName="_CustomLinkFlags" />
<Output TaskParameter="DlSym" ItemName="_BundlerDlsym" />