diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs index 8a519e8e365..746764e24bb 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs @@ -148,6 +148,14 @@ public void BasicApplicationPublishReadyToRun ([Values] bool isComposite, [Value using var peReader = new System.Reflection.PortableExecutable.PEReader (stream); Assert.IsTrue (peReader.PEHeaders.CorHeader.ManagedNativeHeaderDirectory.Size > 0, $"ReadyToRun image not found in {assemblyName}.dll! ManagedNativeHeaderDirectory should not be empty!"); + + var compressedAssembliesSource = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, rid, "android", $"compressed_assemblies.{abi}.ll"); + FileAssert.Exists (compressedAssembliesSource); + var compressedAssembliesSourceText = File.ReadAllText (compressedAssembliesSource); + StringAssert.Contains ("@compressed_assembly_count = dso_local local_unnamed_addr constant i32 0, align 4", compressedAssembliesSourceText); + StringAssert.Contains ("@compressed_assembly_descriptors = dso_local local_unnamed_addr global [0 x %struct.CompressedAssemblyDescriptor] zeroinitializer, align 4", compressedAssembliesSourceText); + StringAssert.Contains ("@uncompressed_assemblies_data_size = dso_local local_unnamed_addr constant i32 0, align 4", compressedAssembliesSourceText); + StringAssert.Contains ("@uncompressed_assemblies_data_buffer = dso_local local_unnamed_addr global [0 x i8] zeroinitializer, align 1", compressedAssembliesSourceText); } [Test] diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/CompressedAssembliesNativeAssemblyGenerator.cs b/src/Xamarin.Android.Build.Tasks/Utilities/CompressedAssembliesNativeAssemblyGenerator.cs index b2a27fa31cf..4aa1428b02c 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/CompressedAssembliesNativeAssemblyGenerator.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/CompressedAssembliesNativeAssemblyGenerator.cs @@ -134,6 +134,24 @@ out List? buffers ); if (archData.Count == 0) { + var emptyCountVar = new LlvmIrGlobalVariable (typeof(uint), CompressedAssemblyCountSymbolName) { + Options = LlvmIrVariableOptions.GlobalConstant, + Value = 0u, + }; + module.Add (emptyCountVar); + + var emptyDescriptorsVar = new LlvmIrGlobalVariable (typeof(List>), DescriptorsArraySymbolName) { + Options = LlvmIrVariableOptions.GlobalWritable, + Value = new List> (), + }; + module.Add (emptyDescriptorsVar); + + var emptyBufferSizeVar = new LlvmIrGlobalVariable (typeof(uint), UncompressedAssembliesBufferSizeSymbolName) { + Options = LlvmIrVariableOptions.GlobalConstant, + Value = 0u, + }; + module.Add (emptyBufferSizeVar); + var emptyBufferVar = new LlvmIrGlobalVariable (typeof(List), UncompressedAssembliesBufferSymbolName, LlvmIrVariableOptions.GlobalWritable) { ArrayItemCount = 0, ZeroInitializeArray = true,