Skip to content

Commit 799295d

Browse files
committed
[WIP] Generate empty code when remapping is absent
1 parent da6a6b4 commit 799295d

File tree

3 files changed

+67
-9
lines changed

3 files changed

+67
-9
lines changed

src/Xamarin.Android.Build.Tasks/Tasks/GenerateMamNativeCode.cs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ public MamNativeCodeInfo (int replacementTypeCount, int replacementMethodIndexEn
2626

2727
public override string TaskPrefix => "GMAMNC";
2828

29-
[Required]
3029
public ITaskItem RemappingXmlFilePath { get; set; }
3130

3231
[Required]
@@ -35,7 +34,29 @@ public MamNativeCodeInfo (int replacementTypeCount, int replacementMethodIndexEn
3534
[Required]
3635
public string [] SupportedAbis { get; set; }
3736

37+
public bool GenerateEmptyCode { get; set; }
38+
3839
public override bool RunTask ()
40+
{
41+
if (!GenerateEmptyCode) {
42+
if (RemappingXmlFilePath == null) {
43+
throw new InvalidOperationException ("RemappingXmlFilePath parameter is required");
44+
}
45+
46+
Generate ();
47+
} else {
48+
GenerateEmpty ();
49+
}
50+
51+
return !Log.HasLoggedErrors;
52+
}
53+
54+
void GenerateEmpty ()
55+
{
56+
Generate (new MamRemappingAssemblyGenerator (), typeReplacementsCount: 0);
57+
}
58+
59+
void Generate ()
3960
{
4061
var typeReplacements = new List<MamTypeReplacement> ();
4162
var methodReplacements = new List<MamMethodReplacement> ();
@@ -52,15 +73,17 @@ public override bool RunTask ()
5273
}
5374
}
5475

55-
Log.LogMessage ($"Creating MAM generator. Type replacements: {typeReplacements.Count}; method replacements: {methodReplacements.Count}");
56-
var mamGenerator = new MamRemappingAssemblyGenerator (typeReplacements, methodReplacements);
76+
Generate (new MamRemappingAssemblyGenerator (typeReplacements, methodReplacements), typeReplacements.Count);
77+
}
78+
79+
void Generate (MamRemappingAssemblyGenerator mamGenerator, int typeReplacementsCount)
80+
{
5781
mamGenerator.Init ();
5882

5983
foreach (string abi in SupportedAbis) {
6084
string baseAsmFilePath = Path.Combine (OutputDirectory, $"mam_remap.{abi.ToLowerInvariant ()}");
6185
string llFilePath = $"{baseAsmFilePath}.ll";
6286

63-
Log.LogMessage ($"Generating file: {llFilePath}");
6487
using (var sw = MemoryStreamPool.Shared.CreateStreamWriter ()) {
6588
mamGenerator.Write (GeneratePackageManagerJava.GetAndroidTargetArchForAbi (abi), sw, llFilePath);
6689
sw.Flush ();
@@ -70,11 +93,9 @@ public override bool RunTask ()
7093

7194
BuildEngine4.RegisterTaskObjectAssemblyLocal (
7295
MamNativeCodeInfoKey,
73-
new MamNativeCodeInfo (typeReplacements.Count, mamGenerator.ReplacementMethodIndexEntryCount),
96+
new MamNativeCodeInfo (typeReplacementsCount, mamGenerator.ReplacementMethodIndexEntryCount),
7497
RegisteredTaskObjectLifetime.Build
7598
);
76-
77-
return !Log.HasLoggedErrors;
7899
}
79100

80101
void ReadXml (XmlReader reader, List<MamTypeReplacement> typeReplacements, List<MamMethodReplacement> methodReplacements)

src/Xamarin.Android.Build.Tasks/Utilities/MamRemappingAssemblyGenerator.cs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,14 +196,21 @@ sealed class MAMTypeReplacementEntry
196196

197197
public int ReplacementMethodIndexEntryCount { get; private set; } = 0;
198198

199+
public MamRemappingAssemblyGenerator ()
200+
{}
201+
199202
public MamRemappingAssemblyGenerator (List<MamTypeReplacement> typeReplacements, List<MamMethodReplacement> methodReplacements)
200203
{
201-
this.typeReplacementsInput = typeReplacements;
202-
this.methodReplacementsInput = methodReplacements;
204+
this.typeReplacementsInput = typeReplacements ?? throw new ArgumentNullException (nameof (typeReplacements));
205+
this.methodReplacementsInput = methodReplacements ?? throw new ArgumentNullException (nameof (methodReplacements));
203206
}
204207

205208
public override void Init ()
206209
{
210+
if (typeReplacementsInput == null) {
211+
return;
212+
}
213+
207214
typeReplacements = new List<StructureInstance<MAMTypeReplacementEntry>> ();
208215
foreach (MamTypeReplacement mtr in typeReplacementsInput) {
209216
var entry = new MAMTypeReplacementEntry {
@@ -330,6 +337,24 @@ protected override void Write (LlvmIrGenerator generator)
330337
generator.WriteEOL ();
331338
generator.WriteEOL ("MAM remapping data");
332339

340+
if (typeReplacements == null) {
341+
generator.WriteStructureArray (
342+
mamTypeReplacementEntryStructureInfo,
343+
0,
344+
LlvmIrVariableOptions.GlobalConstant,
345+
"mam_type_replacements"
346+
);
347+
348+
generator.WriteStructureArray (
349+
mamIndexTypeEntryStructureInfo,
350+
0,
351+
LlvmIrVariableOptions.GlobalConstant,
352+
"mam_method_replacement_index"
353+
);
354+
355+
return;
356+
}
357+
333358
generator.WriteStructureArray (
334359
mamTypeReplacementEntryStructureInfo,
335360
typeReplacements,

src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1626,6 +1626,17 @@ because xbuild doesn't support framework reference assemblies.
16261626
</PrepareAbiItems>
16271627
</Target>
16281628

1629+
<Target Name="_GenerateEmptyAndroidRemapNativeCode"
1630+
DependsOnTargets="_PrepareAndroidRemapNativeAssemblySources"
1631+
Condition=" '@(_AndroidRemapMembers->Count())' == '0' "
1632+
Outputs="@(_AndroidRemapAssemblySource)">
1633+
<GenerateMamNativeCode
1634+
OutputDirectory="$(_NativeAssemblySourceDir)"
1635+
GenerateEmptyCode="True"
1636+
SupportedAbis="@(_BuildTargetAbis)"
1637+
/>
1638+
</Target>
1639+
16291640
<Target Name="_GenerateAndroidRemapNativeCode"
16301641
DependsOnTargets="_PrepareAndroidRemapNativeAssemblySources"
16311642
Condition=" '@(_AndroidRemapMembers->Count())' != '0' "
@@ -1651,6 +1662,7 @@ because xbuild doesn't support framework reference assemblies.
16511662
_PrepareEnvironmentAssemblySources;
16521663
_GenerateEnvironmentFiles;
16531664
_GenerateAndroidRemapNativeCode;
1665+
_GenerateEmptyAndroidRemapNativeCode;
16541666
_IncludeNativeSystemLibraries;
16551667
</_GeneratePackageManagerJavaDependsOn>
16561668
</PropertyGroup>

0 commit comments

Comments
 (0)