Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
a18807f
LLVM IR code generator refactoring and updates
grendello Jun 21, 2023
dc53ba7
Merge branch 'main' into llvm-generator-update
grendello Jun 22, 2023
12e36e7
Fix native assembly reader
grendello Jun 22, 2023
5939b44
A handful of updates
grendello Jun 22, 2023
042858d
A handful of updates
grendello Jun 23, 2023
2caf192
Merge branch 'main' into llvm-generator-update
grendello Jun 26, 2023
3ed01e9
Add some more tracing capabilities
grendello Jun 26, 2023
53ceea8
Merge branch 'main' into llvm-generator-update
grendello Jun 27, 2023
c573767
Another fixlet
grendello Jun 27, 2023
1d43520
A handful of additions and changes
grendello Jun 28, 2023
66f9566
Beginning to fix typemaps for per-abi assemblies
grendello Jun 30, 2023
e393968
Typemaps generated properly, testing and marshal methods tomorrow
grendello Jul 3, 2023
a37cd9a
Something isn't right...
grendello Jul 4, 2023
a18c352
New typemap scanner, disable marshal methods by default
grendello Jul 5, 2023
4c94cc6
Merge branch 'main' into typemap-per-rid-support
grendello Jul 6, 2023
1528dd9
Fix test failures
grendello Jul 6, 2023
e4108d4
More test fixes
grendello Jul 6, 2023
80c4fb4
Merge branch 'main' into llvm-generator-update
grendello Jul 6, 2023
1c417d6
Merge branch 'typemap-per-rid-support' into llvm-generator-update
grendello Jul 6, 2023
3b733f0
Merge branch 'main' into typemap-per-rid-support
grendello Jul 6, 2023
55b1325
Updates + fixes + per-rid typemaps
grendello Jul 6, 2023
f30e88e
Hopefully fix Windows tests
grendello Jul 7, 2023
40a5d47
Add some timing debug prints
grendello Jul 7, 2023
915670d
Merge branch 'main' into typemap-per-rid-support
grendello Jul 7, 2023
6810bc8
More printfs
grendello Jul 7, 2023
0230052
Let's see if using the resolver directly helps
grendello Jul 7, 2023
0427147
Remove debug stuff
grendello Jul 7, 2023
6796153
Merge branch 'typemap-per-rid-support' into llvm-generator-update
grendello Jul 7, 2023
0b63e28
Use a custom assembly resolver
grendello Jul 10, 2023
2a781e2
Merge branch 'typemap-per-rid-support' into llvm-generator-update
grendello Jul 10, 2023
9bba7fc
Attribute gets added properly...
grendello Jul 11, 2023
6ecd2ac
Metadata set to the appropriate RID
grendello Jul 11, 2023
d5ca586
Try to fix link failures
grendello Jul 12, 2023
a90047a
Update src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/…
grendello Jul 12, 2023
bbcf701
Make the step itself conditional, too
grendello Jul 12, 2023
5de1afb
Merge branch 'typemap-per-rid-support' into all-assemblies-per-rid
grendello Jul 12, 2023
6acf298
Merge branch 'main' into typemap-per-rid-support
grendello Jul 12, 2023
46865e3
Address comments
grendello Jul 12, 2023
c909e41
WIP, the very beginning
grendello Jul 12, 2023
b376842
Refactoring continued
grendello Jul 13, 2023
40a91e2
Merge branch 'typemap-per-rid-support' into all-assemblies-per-rid
grendello Jul 13, 2023
61bf387
More WIP
grendello Jul 13, 2023
de0f450
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 13, 2023
4aff8b7
Merge branch 'main' into llvm-generator-update
grendello Jul 14, 2023
6fa66c7
Updates from main
grendello Jul 14, 2023
4f946ab
Merge branch 'main' into llvm-generator-update
grendello Jul 14, 2023
4a29d3c
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 14, 2023
f671ed6
Merge branch 'llvm-generator-update' into all-assemblies-per-rid
grendello Jul 14, 2023
f741e51
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 17, 2023
6a92c29
Slowly moving forward
grendello Jul 17, 2023
2105cdd
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 18, 2023
2781433
Release+Lining typemaps
grendello Jul 18, 2023
d14a374
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 18, 2023
49e6ff4
Need a different approach... Tomorrow
grendello Jul 18, 2023
4ccbc52
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 19, 2023
535ec49
A slightly different approach
grendello Jul 20, 2023
3264c37
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 20, 2023
52d5e5d
A fixlet
grendello Jul 20, 2023
902a4a9
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 20, 2023
ba00a5b
MSBuild work started
grendello Jul 20, 2023
43cb3e4
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 21, 2023
fc7e288
Compression for DSOs works
grendello Jul 21, 2023
e6ea3c2
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 25, 2023
36fe322
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 26, 2023
e1968d3
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 27, 2023
9b6aab8
Merge branch 'main' into all-assemblies-per-rid
grendello Jul 31, 2023
cbda14e
Stub DSO generator task
grendello Sep 4, 2023
f1fb7e8
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 4, 2023
fb66802
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 6, 2023
caab881
Finally settled on the assembly DSO structures
grendello Sep 8, 2023
8fce85d
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 11, 2023
f793a0c
A couple of steps forward
grendello Sep 11, 2023
6295d31
Moving forward
grendello Sep 12, 2023
b4fae1a
Beginnings of "streamed" array writing
grendello Sep 13, 2023
fcb4f48
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 13, 2023
2a9cb28
First streamed array done
grendello Sep 14, 2023
3ea330a
Better formatting, more ABI differences, almost done on generation
grendello Sep 15, 2023
688726c
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 18, 2023
b811e29
Managed side is feature complete
grendello Sep 18, 2023
248298c
libxamarin-app.so has it all now
grendello Sep 19, 2023
89da6f1
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 19, 2023
129044b
A handful of improvements
grendello Sep 19, 2023
f7dc3cd
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 20, 2023
f2250e7
Handle satellite assemblies
grendello Sep 20, 2023
240f579
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 20, 2023
b431ca3
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 21, 2023
87905aa
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 21, 2023
bf60944
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 21, 2023
e811441
New direction - to per-assembly DSOs
grendello Sep 21, 2023
6c248d1
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 22, 2023
de47560
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 22, 2023
eac51f2
Progress towards per-assembly DSOs
grendello Sep 22, 2023
a0d63c4
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 25, 2023
aeaab2b
More steps towards standalone DSOs
grendello Sep 25, 2023
a1f5558
Moar stepz
grendello Sep 26, 2023
415e44c
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 26, 2023
0fd81f9
More new stuff, but...
grendello Sep 26, 2023
2f8b6ec
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 27, 2023
97a3566
Compilation done
grendello Sep 27, 2023
21540ed
Optimize parallel builds
grendello Sep 28, 2023
9f5b043
Better
grendello Sep 28, 2023
dd1d19c
Merge branch 'main' into all-assemblies-per-rid
grendello Sep 29, 2023
6ea312f
Linking works
grendello Sep 29, 2023
4eae75e
Standalone DSOs done
grendello Oct 2, 2023
4e92f9a
Merge branch 'main' into all-assemblies-per-rid
grendello Oct 3, 2023
5e03031
Fixlets all around for source generation, compilation and linking
grendello Oct 3, 2023
728dc21
Merge branch 'main' into all-assemblies-per-rid
grendello Oct 4, 2023
00a3530
Code generation appears to be done, packaging done
grendello Oct 4, 2023
720650a
Merge branch 'main' into all-assemblies-per-rid
grendello Oct 5, 2023
9b552a6
Good bye, assembly blobs 👋
grendello Oct 5, 2023
a298f00
Some cleanup, DSO finding improvements, stuff
grendello Oct 6, 2023
fc12232
Merge branch 'main' into all-assemblies-per-rid
grendello Oct 10, 2023
78cb6ae
More native work
grendello Oct 10, 2023
1dc4d5c
Merge branch 'main' into all-assemblies-per-rid
grendello Oct 11, 2023
db70fa3
Fixlets and some progress
grendello Oct 11, 2023
073c507
Oopsie
grendello Oct 11, 2023
9b87fac
Merge branch 'main' into all-assemblies-per-rid
grendello Oct 12, 2023
57bb54c
Some experiments
grendello Oct 12, 2023
857a13f
Merge branch 'main' into all-assemblies-per-rid
grendello Oct 13, 2023
69dc249
Use function pointers instead of classes, faster
grendello Oct 13, 2023
d65392a
Make compression optional on per-assembly basis
grendello Oct 16, 2023
4efb704
Selective compression + actual loading and decompressing of assembly …
grendello Oct 17, 2023
a01683a
Merge branch 'main' into all-assemblies-per-rid
grendello Oct 18, 2023
13a8f6d
Playing with concurrency
grendello Oct 18, 2023
c9ba401
Merge branch 'main' into all-assemblies-per-rid
grendello Oct 19, 2023
c0b1348
XA hello world works, but much slower...
grendello Oct 19, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
<MonoOptionsVersion>6.12.0.148</MonoOptionsVersion>
<SystemCollectionsImmutableVersion>6.0.0</SystemCollectionsImmutableVersion>
<SystemRuntimeCompilerServicesUnsafeVersion>6.0.0</SystemRuntimeCompilerServicesUnsafeVersion>
<ELFSharpVersion>2.13.1</ELFSharpVersion>
<ELFSharpVersion>2.16.1</ELFSharpVersion>
<HumanizerVersion>2.14.1</HumanizerVersion>
<MdocPackageVersion Condition=" '$(MdocPackageVersion)' == '' ">5.8.9.2</MdocPackageVersion>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<assembly fullname="System.Private.CoreLib">
<type fullname="System.Reflection.AssemblyMetadataAttribute" />
</assembly>
</linker>
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
using System;

using Mono.Cecil;
using Mono.Linker;
using Mono.Linker.Steps;

#if ILLINK
using Microsoft.Android.Sdk.ILLink;
#endif

namespace MonoDroid.Tuner;

public class AddRidMetadataAttributeStep : BaseStep
{
protected override void ProcessAssembly (AssemblyDefinition assembly)
{
if (!Annotations.HasAction (assembly)) {
return;
}

var action = Annotations.GetAction (assembly);
if (action == AssemblyAction.Skip || action == AssemblyAction.Delete) {
return;
}

string? rid = null;
#if ILLINK
if (!Context.TryGetCustomData ("XARuntimeIdentifier", out rid)) {
throw new InvalidOperationException ("Missing XARuntimeIdentifier custom data");
}
#endif
if (String.IsNullOrEmpty (rid)) {
throw new InvalidOperationException ("RID must have a non-empty value");
}

AssemblyDefinition corlib = GetCorlib ();
MethodDefinition assemblyMetadataAttributeCtor = FindAssemblyMetadataAttributeCtor (corlib);
TypeDefinition systemString = GetSystemString (corlib);

var attr = new CustomAttribute (assembly.MainModule.ImportReference (assemblyMetadataAttributeCtor));
attr.ConstructorArguments.Add (new CustomAttributeArgument (systemString, "XamarinAndroidAbi")); // key

// TODO: figure out how to get the RID...
attr.ConstructorArguments.Add (new CustomAttributeArgument (systemString, rid)); // value

assembly.CustomAttributes.Add (attr);

if (action == AssemblyAction.Copy) {
Annotations.SetAction (assembly, AssemblyAction.Save);
}
}

TypeDefinition GetSystemString (AssemblyDefinition asm) => FindType (asm, "System.String", required: true);

AssemblyDefinition GetCorlib ()
{
const string ImportAssembly = "System.Private.CoreLib";
AssemblyDefinition? asm = Context.Resolve (AssemblyNameReference.Parse (ImportAssembly));
if (asm == null) {
throw new InvalidOperationException ($"Unable to import assembly '{ImportAssembly}'");
}

return asm;
}

MethodDefinition FindAssemblyMetadataAttributeCtor (AssemblyDefinition asm)
{
const string AttributeType = "System.Reflection.AssemblyMetadataAttribute";

TypeDefinition assemblyMetadataAttribute = FindType (asm, AttributeType, required: true);
foreach (MethodDefinition md in assemblyMetadataAttribute!.Methods) {
if (!md.IsConstructor) {
continue;
}

return md;
}

throw new InvalidOperationException ($"Unable to find the {AttributeType} type constructor");
}

TypeDefinition? FindType (AssemblyDefinition asm, string typeName, bool required)
{
foreach (ModuleDefinition md in asm.Modules) {
foreach (TypeDefinition et in md.Types) {
if (String.Compare (typeName, et.FullName, StringComparison.Ordinal) != 0) {
continue;
}

return et;
}
}

if (required) {
throw new InvalidOperationException ($"Internal error: required type '{typeName}' in assembly {asm} not found");
}

return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ This file is imported *after* the Microsoft.NET.Sdk/Sdk.targets.
<Import Project="Microsoft.Android.Sdk.Publish.targets" />
<Import Project="Microsoft.Android.Sdk.RuntimeConfig.targets" />
<Import Project="Microsoft.Android.Sdk.Tooling.targets" />
<Import Project="Microsoft.Android.Sdk.NativeCompilation.targets" />
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,35 @@ properties that determine build ordering.
_IncludeNativeSystemLibraries;
_CheckGoogleSdkRequirements;
</_PrepareBuildApkDependsOnTargets>

<_GenerateJavaStubsDependsOnTargets>
_SetLatestTargetFrameworkVersion;
_PrepareAssemblies;
_PrepareNativeAssemblySources;
$(_AfterPrepareAssemblies);
</_GenerateJavaStubsDependsOnTargets>

<_GeneratePackageManagerJavaDependsOn>
_GenerateJavaStubs;
_RunAotForAllRIDs;
_ManifestMerger;
_ConvertCustomView;
$(_AfterConvertCustomView);
_AddStaticResources;
$(_AfterAddStaticResources);
_PrepareAssemblies;
_PrepareEnvironmentAssemblySources;
_GenerateEnvironmentFiles;
_GenerateAndroidRemapNativeCode;
_GenerateEmptyAndroidRemapNativeCode;
_IncludeNativeSystemLibraries;
</_GeneratePackageManagerJavaDependsOn>

<_GenerateAndroidRemapNativeCodeDependsOn>
_ConvertAndroidMamMappingFileToXml;
_CollectAndroidRemapMembers;
_PrepareAndroidRemapNativeAssemblySources
</_GenerateAndroidRemapNativeCodeDependsOn>
</PropertyGroup>

<PropertyGroup Condition=" '$(AndroidApplication)' != 'True' ">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ This file contains the .NET 5-specific targets to customize ILLink
https://github.com/dotnet/sdk/blob/a5393731b5b7b225692fff121f747fbbc9e8b140/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.ILLink.targets#L147
-->
<_TrimmerCustomData Include="XATargetFrameworkDirectories" Value="$(_XATargetFrameworkDirectories)" />
<_TrimmerCustomData Include="XARuntimeIdentifier" Value="$(RuntimeIdentifier)" Condition=" '$(_AndroidAddRuntimeIdentifierToAssemblies)' == 'true' " />
<_TrimmerCustomData
Condition=" '$(_ProguardProjectConfiguration)' != '' "
Include="ProguardConfiguration"
Expand Down Expand Up @@ -94,6 +95,12 @@ This file contains the .NET 5-specific targets to customize ILLink
BeforeStep="MarkStep"
Type="MonoDroid.Tuner.FixLegacyResourceDesignerStep"
/>
<_TrimmerCustomSteps
Condition=" '$(_AndroidAddRuntimeIdentifierToAssemblies)' == 'true' "
Include="$(_AndroidLinkerCustomStepAssembly)"
AfterStep="CleanStep"
Type="MonoDroid.Tuner.AddRidMetadataAttributeStep"
/>
<_PreserveLists Include="$(MSBuildThisFileDirectory)..\PreserveLists\*.xml" />
<TrimmerRootDescriptor
Condition=" '@(ResolvedFileToPublish->Count())' != '0' and '%(Filename)' != '' "
Expand Down
Loading