Skip to content

Commit a61d1ea

Browse files
committed
Use discovered runtime pack native lib dirs
1 parent 5f66199 commit a61d1ea

File tree

6 files changed

+29
-75
lines changed

6 files changed

+29
-75
lines changed

src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ They run in a context of an inner build with a single $(RuntimeIdentifier).
9292
Profiles="@(AndroidAotProfile)"
9393
StripLibraries="$(_AndroidAotStripLibraries)"
9494
ZipAlignmentPages="$(AndroidZipAlignment)"
95-
RuntimePackLibraryDirectories="@(RuntimePackLibraryDirectory)">
95+
RuntimePackLibraryDirectories="@(_RuntimePackLibraryDirectory)">
9696
<Output PropertyName="_Triple" TaskParameter="Triple" />
9797
<Output PropertyName="_ToolPrefix" TaskParameter="ToolPrefix" />
9898
<Output PropertyName="_MsymPath" TaskParameter="MsymPath" />

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,10 +298,12 @@ string GetLdFlags (NdkTools ndk, AndroidTargetArch arch, int level, string toolP
298298
libs.Add (Path.Combine (androidLibPath, "libc.so"));
299299
libs.Add (Path.Combine (androidLibPath, "libm.so"));
300300
} else if (!UseAndroidNdk && EnableLLVM) {
301-
string libstubsPath = MonoAndroidHelper.GetLibstubsArchDirectoryPath (RuntimePackLibraryDirectories, arch);
301+
string? libstubsPath = MonoAndroidHelper.GetRuntimePackNativeLibDir (arch, RuntimePackLibraryDirectories);
302302

303-
libs.Add (Path.Combine (libstubsPath, "libc.so"));
304-
libs.Add (Path.Combine (libstubsPath, "libm.so"));
303+
if (!String.IsNullOrEmpty (libstubsPath)) {
304+
libs.Add (Path.Combine (libstubsPath, "libc.so"));
305+
libs.Add (Path.Combine (libstubsPath, "libm.so"));
306+
}
305307
}
306308

307309
if (libs.Count > 0) {

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,7 @@ InputFiles GatherFilesForABI (string runtimeSharedLibrary, string abi, ITaskItem
212212
{
213213
AndroidTargetArch arch = MonoAndroidHelper.AbiToTargetArch (abi);
214214
var libDirs = new HashSet<string> (StringComparer.OrdinalIgnoreCase) {
215-
MonoAndroidHelper.GetNativeLibsRootDirectoryPath (Log, RuntimePackLibraryDirectories, arch),
216-
MonoAndroidHelper.GetLibstubsArchDirectoryPath (RuntimePackLibraryDirectories, arch),
215+
MonoAndroidHelper.GetRuntimePackNativeLibDir (arch, RuntimePackLibraryDirectories),
217216
};
218217

219218
string RID = MonoAndroidHelper.AbiToRid (abi);

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,19 @@ public Config (Dictionary<AndroidTargetArch, string> stubPaths, string androidBi
5555
//
5656
const ulong PayloadSectionAlignment = 0x4000;
5757

58-
public static Config GetConfig (TaskLoggingHelper log, string androidBinUtilsDirectory, ITaskItem[] runtimePacks, string baseOutputDirectory)
58+
public static Config GetConfig (TaskLoggingHelper log, string androidBinUtilsDirectory, ITaskItem[] runtimePackLibraryDirs, string baseOutputDirectory)
5959
{
6060
var stubPaths = new Dictionary<AndroidTargetArch, string> ();
6161

62-
foreach (ITaskItem maybePack in runtimePacks) {
63-
if (!MonoAndroidHelper.IsAndroidRuntimePack (maybePack, out string? packRID) || String.IsNullOrEmpty (packRID)) {
62+
foreach (ITaskItem packLibDir in runtimePackLibraryDirs) {
63+
string ?packRID = packLibDir.GetMetadata ("RuntimeIdentifier");
64+
if (String.IsNullOrEmpty (packRID)) {
6465
continue;
6566
}
6667

67-
string packDir = MonoAndroidHelper.GetAndroidRuntimePackDir (maybePack);
68-
string stubRelPath = Path.Combine ("runtimes", packRID, "native", StubFileName);
69-
string stubPath = Path.Combine (packDir, stubRelPath);
68+
string stubPath = Path.Combine (packLibDir.ItemSpec, StubFileName);
7069
if (!File.Exists (stubPath)) {
71-
throw new InvalidOperationException ($"Internal error: archive DSO stub file '{stubRelPath}' does not exist in runtime pack at {packDir}");
70+
throw new InvalidOperationException ($"Internal error: archive DSO stub file '{stubPath}' does not exist in runtime pack at {packLibDir}");
7271
}
7372

7473
AndroidTargetArch arch = MonoAndroidHelper.RidToArch (packRID);

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

Lines changed: 9 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -570,67 +570,21 @@ static string GetToolsRootDirectoryRelativePath (string androidBinUtilsDirectory
570570
}
571571

572572
#if MSBUILD
573-
public static bool IsAndroidRuntimePack (ITaskItem maybePack, out string? packRID)
573+
public static string? GetRuntimePackNativeLibDir (AndroidTargetArch arch, IEnumerable<ITaskItem> runtimePackLibDirs)
574574
{
575-
string? framework = maybePack.GetMetadata ("FrameworkName");
576-
if (String.IsNullOrEmpty (framework) || String.Compare ("Microsoft.Android", framework, StringComparison.Ordinal) != 0) {
577-
packRID = null;
578-
return false;
579-
}
580-
581-
packRID = maybePack.GetMetadata ("RuntimeIdentifier");
582-
return !String.IsNullOrEmpty (packRID);
583-
}
584-
585-
public static string GetAndroidRuntimePackDir (ITaskItem pack)
586-
{
587-
return pack.GetMetadata ("PackageDirectory");
588-
}
589-
590-
public static string GetAndroidRuntimePackNativeDir (ITaskItem[] runtimePacks, AndroidTargetArch arch)
591-
{
592-
string rid = ArchToRid (arch);
593-
ITaskItem? androidRuntimePack = null;
594-
595-
foreach (ITaskItem pack in runtimePacks) {
596-
if (!IsAndroidRuntimePack (pack, out string? packRID) || String.Compare (rid, packRID, StringComparison.OrdinalIgnoreCase) != 0) {
575+
foreach (ITaskItem item in runtimePackLibDirs) {
576+
string? rid = item.GetMetadata ("RuntimeIdentifier");
577+
if (String.IsNullOrEmpty (rid)) {
597578
continue;
598579
}
599580

600-
androidRuntimePack = pack;
601-
break;
602-
}
603-
604-
if (androidRuntimePack == null) {
605-
throw new InvalidOperationException ($"Internal error: Android runtime pack for architecture {arch} not found");
606-
}
607-
608-
string? packageDir = GetAndroidRuntimePackDir (androidRuntimePack);
609-
if (String.IsNullOrEmpty (packageDir)) {
610-
throw new InvalidOperationException ($"Internal error: Android runtime pack for architecture {arch} is missing package directory metadata");
611-
}
612-
613-
return Path.Combine (packageDir, "runtimes", rid, "native");
614-
}
615-
616-
public static string GetLibstubsArchDirectoryPath (ITaskItem[] runtimePacks, AndroidTargetArch arch)
617-
{
618-
return GetAndroidRuntimePackNativeDir (runtimePacks, arch);
619-
}
620-
621-
public static string GetDSOStubsRootDirectoryPath (ITaskItem[] runtimePacks, AndroidTargetArch arch)
622-
{
623-
return GetAndroidRuntimePackNativeDir (runtimePacks, arch);
624-
}
625-
626-
public static string GetNativeLibsRootDirectoryPath (TaskLoggingHelper log, ITaskItem[] runtimePacks, AndroidTargetArch arch)
627-
{
628-
log.LogWarning ("Potential runtime packs:");
629-
foreach (ITaskItem item in runtimePacks) {
630-
log.LogWarning ($" {item}");
581+
AndroidTargetArch itemArch = RidToArch (rid);
582+
if (itemArch == arch) {
583+
return item.ItemSpec;
584+
}
631585
}
632586

633-
return GetAndroidRuntimePackNativeDir (runtimePacks, arch);
587+
return null;
634588
}
635589
#endif // MSBUILD
636590

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,7 +1474,7 @@ because xbuild doesn't support framework reference assemblies.
14741474

14751475
<!-- _PrepareAssemblies lives in Microsoft.Android.Sdk.AssemblyResolution.targets -->
14761476

1477-
<Target Name="_PrepareNativeAssemblySources" Condition=" '$(_AndroidRuntime)' == 'MonoVM' ">
1477+
<Target Name="_PrepareNativeAssemblySources" Condition=" '$(_AndroidRuntime)' != 'CoreCLR' ">
14781478
<PrepareAbiItems
14791479
BuildTargetAbis="@(_BuildTargetAbis)"
14801480
NativeSourcesDir="$(_NativeAssemblySourceDir)"
@@ -1776,7 +1776,7 @@ because xbuild doesn't support framework reference assemblies.
17761776
</Target>
17771777

17781778
<Target Name="_GeneratePackageManagerJava"
1779-
Condition=" '$(_AndroidRuntime)' == 'MonoVM' "
1779+
Condition=" '$(_AndroidRuntime)' != 'NativeAOT' "
17801780
DependsOnTargets="$(_GeneratePackageManagerJavaDependsOn)"
17811781
Inputs="@(_GeneratePackageManagerJavaInputs)"
17821782
Outputs="$(_AndroidStampDirectory)_GeneratePackageManagerJava.stamp">
@@ -1998,7 +1998,7 @@ because xbuild doesn't support framework reference assemblies.
19981998

19991999
<!-- Shrink Mono.Android.dll by removing attribute only needed for GenerateJavaStubs -->
20002000
<RemoveRegisterAttribute
2001-
Condition="'$(AndroidLinkMode)' != 'None' and '$(AndroidIncludeDebugSymbols)' != 'true' and '$(AndroidStripILAfterAOT)' != 'true' and '$(_AndroidRuntime)' == 'MonoVM' "
2001+
Condition="'$(AndroidLinkMode)' != 'None' and '$(AndroidIncludeDebugSymbols)' != 'true' and '$(AndroidStripILAfterAOT)' != 'true' and '$(_AndroidRuntime)' != 'NativeAOT' "
20022002
ShrunkFrameworkAssemblies="@(_ShrunkAssemblies)" />
20032003

20042004
<MakeDir Directories="$(MonoAndroidIntermediateAssemblyDir)shrunk" />
@@ -2093,7 +2093,7 @@ because xbuild doesn't support framework reference assemblies.
20932093
AndroidBinUtilsDirectory="$(AndroidBinUtilsDirectory)"
20942094
ZipAlignmentPages="$(AndroidZipAlignment)"
20952095
TargetsCLR="$(_AndroidUseCLR)"
2096-
RuntimePackLibraryDirectories="@(RuntimePackLibraryDirectory)"
2096+
RuntimePackLibraryDirectories="@(_RuntimePackLibraryDirectory)"
20972097
/>
20982098
<ItemGroup>
20992099
<FileWrites Include="@(_ApplicationSharedLibrary)" />
@@ -2220,7 +2220,7 @@ because xbuild doesn't support framework reference assemblies.
22202220
ResolvedAssemblies="@(_BuildApkAssembliesToAddToArchive)"
22212221
SupportedAbis="@(_BuildTargetAbis)"
22222222
UseAssemblyStore="$(AndroidUseAssemblyStore)"
2223-
RuntimePackLibraryDirectories="@(RuntimePackLibraryDirectory)">
2223+
RuntimePackLibraryDirectories="@(_RuntimePackLibraryDirectory)">
22242224
<Output TaskParameter="WrappedAssemblies" ItemName="FilesToAddToArchive" />
22252225
</WrapAssembliesAsSharedLibraries>
22262226

@@ -2247,7 +2247,7 @@ because xbuild doesn't support framework reference assemblies.
22472247
IntermediateOutputPath="$(IntermediateOutputPath)"
22482248
RuntimeConfigBinFilePath="$(_BinaryRuntimeConfigPath)"
22492249
SupportedAbis="@(_BuildTargetAbis)"
2250-
RuntimePackLibraryDirectories="@(RuntimePackLibraryDirectory)">
2250+
RuntimePackLibraryDirectories="@(_RuntimePackLibraryDirectory)">
22512251
<Output TaskParameter="FilesToAddToArchive" ItemName="FilesToAddToArchive" />
22522252
</CollectRuntimeConfigFilesForArchive>
22532253

@@ -2265,7 +2265,7 @@ because xbuild doesn't support framework reference assemblies.
22652265
ZipAlignmentPages="$(AndroidZipAlignment)"
22662266
AndroidBinUtilsDirectory="$(AndroidBinUtilsDirectory)"
22672267
IntermediateOutputPath="$(IntermediateOutputPath)"
2268-
RuntimePackLibraryDirectories="@(RuntimePackLibraryDirectory)">
2268+
RuntimePackLibraryDirectories="@(_RuntimePackLibraryDirectory)">
22692269
<Output TaskParameter="OutputFiles" ItemName="ApkFiles" />
22702270
<Output TaskParameter="FilesToAddToArchive" ItemName="FilesToAddToArchive" />
22712271
<Output TaskParameter="DSODirectoriesToDelete" ItemName="DSODirectoriesToDelete" />

0 commit comments

Comments
 (0)