Skip to content

Commit 13bbd93

Browse files
committed
Build deps + application config for CLR
1 parent 4f1aaf5 commit 13bbd93

12 files changed

+534
-39
lines changed

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

+50-25
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ public class GeneratePackageManagerJava : AndroidTask
6161
[Required]
6262
public bool EnablePreloadAssembliesDefault { get; set; }
6363

64+
[Required]
65+
public bool TargetsCLR { get; set; }
66+
6467
public bool EnableMarshalMethods { get; set; }
6568
public string RuntimeConfigBinFilePath { get; set; }
6669
public string BoundExceptionType { get; set; }
@@ -321,31 +324,53 @@ void AddEnvironment ()
321324

322325
bool haveRuntimeConfigBlob = !String.IsNullOrEmpty (RuntimeConfigBinFilePath) && File.Exists (RuntimeConfigBinFilePath);
323326
var jniRemappingNativeCodeInfo = BuildEngine4.GetRegisteredTaskObjectAssemblyLocal<GenerateJniRemappingNativeCode.JniRemappingNativeCodeInfo> (ProjectSpecificTaskObjectKey (GenerateJniRemappingNativeCode.JniRemappingNativeCodeInfoKey), RegisteredTaskObjectLifetime.Build);
324-
var appConfigAsmGen = new ApplicationConfigNativeAssemblyGenerator (environmentVariables, systemProperties, Log) {
325-
UsesMonoAOT = usesMonoAOT,
326-
UsesMonoLLVM = EnableLLVM,
327-
UsesAssemblyPreload = environmentParser.UsesAssemblyPreload,
328-
MonoAOTMode = aotMode.ToString ().ToLowerInvariant (),
329-
AotEnableLazyLoad = AndroidAotEnableLazyLoad,
330-
AndroidPackageName = AndroidPackageName,
331-
BrokenExceptionTransitions = environmentParser.BrokenExceptionTransitions,
332-
PackageNamingPolicy = pnp,
333-
BoundExceptionType = boundExceptionType,
334-
JniAddNativeMethodRegistrationAttributePresent = NativeCodeGenState.TemplateJniAddNativeMethodRegistrationAttributePresent,
335-
HaveRuntimeConfigBlob = haveRuntimeConfigBlob,
336-
NumberOfAssembliesInApk = assemblyCount,
337-
BundledAssemblyNameWidth = assemblyNameWidth,
338-
MonoComponents = (MonoComponent)monoComponents,
339-
NativeLibraries = uniqueNativeLibraries,
340-
HaveAssemblyStore = UseAssemblyStore,
341-
AndroidRuntimeJNIEnvToken = android_runtime_jnienv_class_token,
342-
JNIEnvInitializeToken = jnienv_initialize_method_token,
343-
JNIEnvRegisterJniNativesToken = jnienv_registerjninatives_method_token,
344-
JniRemappingReplacementTypeCount = jniRemappingNativeCodeInfo == null ? 0 : jniRemappingNativeCodeInfo.ReplacementTypeCount,
345-
JniRemappingReplacementMethodIndexEntryCount = jniRemappingNativeCodeInfo == null ? 0 : jniRemappingNativeCodeInfo.ReplacementMethodIndexEntryCount,
346-
MarshalMethodsEnabled = EnableMarshalMethods,
347-
IgnoreSplitConfigs = ShouldIgnoreSplitConfigs (),
348-
};
327+
LLVMIR.LlvmIrComposer appConfigAsmGen;
328+
329+
if (TargetsCLR) {
330+
appConfigAsmGen = new ApplicationConfigNativeAssemblyGeneratorCLR (environmentVariables, systemProperties, Log) {
331+
UsesAssemblyPreload = environmentParser.UsesAssemblyPreload,
332+
AndroidPackageName = AndroidPackageName,
333+
PackageNamingPolicy = pnp,
334+
JniAddNativeMethodRegistrationAttributePresent = NativeCodeGenState.TemplateJniAddNativeMethodRegistrationAttributePresent,
335+
HaveRuntimeConfigBlob = haveRuntimeConfigBlob,
336+
NumberOfAssembliesInApk = assemblyCount,
337+
BundledAssemblyNameWidth = assemblyNameWidth,
338+
NativeLibraries = uniqueNativeLibraries,
339+
AndroidRuntimeJNIEnvToken = android_runtime_jnienv_class_token,
340+
JNIEnvInitializeToken = jnienv_initialize_method_token,
341+
JNIEnvRegisterJniNativesToken = jnienv_registerjninatives_method_token,
342+
JniRemappingReplacementTypeCount = jniRemappingNativeCodeInfo == null ? 0 : jniRemappingNativeCodeInfo.ReplacementTypeCount,
343+
JniRemappingReplacementMethodIndexEntryCount = jniRemappingNativeCodeInfo == null ? 0 : jniRemappingNativeCodeInfo.ReplacementMethodIndexEntryCount,
344+
MarshalMethodsEnabled = EnableMarshalMethods,
345+
IgnoreSplitConfigs = ShouldIgnoreSplitConfigs (),
346+
};
347+
} else {
348+
appConfigAsmGen = new ApplicationConfigNativeAssemblyGenerator (environmentVariables, systemProperties, Log) {
349+
UsesMonoAOT = usesMonoAOT,
350+
UsesMonoLLVM = EnableLLVM,
351+
UsesAssemblyPreload = environmentParser.UsesAssemblyPreload,
352+
MonoAOTMode = aotMode.ToString ().ToLowerInvariant (),
353+
AotEnableLazyLoad = AndroidAotEnableLazyLoad,
354+
AndroidPackageName = AndroidPackageName,
355+
BrokenExceptionTransitions = environmentParser.BrokenExceptionTransitions,
356+
PackageNamingPolicy = pnp,
357+
BoundExceptionType = boundExceptionType,
358+
JniAddNativeMethodRegistrationAttributePresent = NativeCodeGenState.TemplateJniAddNativeMethodRegistrationAttributePresent,
359+
HaveRuntimeConfigBlob = haveRuntimeConfigBlob,
360+
NumberOfAssembliesInApk = assemblyCount,
361+
BundledAssemblyNameWidth = assemblyNameWidth,
362+
MonoComponents = (MonoComponent)monoComponents,
363+
NativeLibraries = uniqueNativeLibraries,
364+
HaveAssemblyStore = UseAssemblyStore,
365+
AndroidRuntimeJNIEnvToken = android_runtime_jnienv_class_token,
366+
JNIEnvInitializeToken = jnienv_initialize_method_token,
367+
JNIEnvRegisterJniNativesToken = jnienv_registerjninatives_method_token,
368+
JniRemappingReplacementTypeCount = jniRemappingNativeCodeInfo == null ? 0 : jniRemappingNativeCodeInfo.ReplacementTypeCount,
369+
JniRemappingReplacementMethodIndexEntryCount = jniRemappingNativeCodeInfo == null ? 0 : jniRemappingNativeCodeInfo.ReplacementMethodIndexEntryCount,
370+
MarshalMethodsEnabled = EnableMarshalMethods,
371+
IgnoreSplitConfigs = ShouldIgnoreSplitConfigs (),
372+
};
373+
}
349374
LLVMIR.LlvmIrModule appConfigModule = appConfigAsmGen.Construct ();
350375

351376
foreach (string abi in SupportedAbis) {

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

+6-2
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ sealed class InputFiles
4343
[Required]
4444
public string AndroidBinUtilsDirectory { get; set; }
4545

46+
[Required]
47+
public bool TargetsCLR { get; set; }
48+
4649
public int ZipAlignmentPages { get; set; } = AndroidZipAlign.DefaultZipAlignment64Bit;
4750

4851
public override System.Threading.Tasks.Task RunTaskAsync ()
@@ -123,11 +126,12 @@ IEnumerable<Config> GetLinkerConfigs ()
123126
abis [abi] = GatherFilesForABI (item.ItemSpec, abi, ObjectFiles, runtimeNativeLibsDir, runtimeNativeLibStubsDir);
124127
}
125128

126-
const string commonLinkerArgs =
129+
string soname = TargetsCLR ? "libxamarin-app-clr.so" : "libxamarin-app.so";
130+
string commonLinkerArgs =
127131
"--shared " +
128132
"--allow-shlib-undefined " +
129133
"--export-dynamic " +
130-
"-soname libxamarin-app.so " +
134+
$"-soname {soname} " +
131135
"-z relro " +
132136
"-z noexecstack " +
133137
"--enable-new-dtags " +
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
3+
namespace Xamarin.Android.Tasks;
4+
5+
// Declaration order of fields and their types must correspond *exactly* to that in
6+
// src/native-clr/xamarin-app-stub/xamarin-app.hh ApplicationConfig structure
7+
//
8+
// Type mappings:
9+
//
10+
// C++ C#
11+
// -----------|----------
12+
// bool | bool
13+
// uint8_t | byte
14+
// int8_t | sbyte
15+
// uint16_t | ushort
16+
// int16_t | short
17+
// uint32_t | uint
18+
// int32_t | int
19+
// uint64_t | ulong
20+
// int64_t | long
21+
// char* | string
22+
//
23+
// Names should be the same as in the above struct, but it's not a requirement
24+
// (they will be used only to generate comments in the native code)
25+
sealed class ApplicationConfigCLR
26+
{
27+
public bool uses_assembly_preload;
28+
public bool jni_add_native_method_registration_attribute_present;
29+
public bool have_runtime_config_blob;
30+
public bool marshal_methods_enabled;
31+
public bool ignore_split_configs;
32+
public uint package_naming_policy;
33+
public uint environment_variable_count;
34+
public uint system_property_count;
35+
public uint number_of_assemblies_in_apk;
36+
public uint bundled_assembly_name_width;
37+
public uint number_of_dso_cache_entries;
38+
public uint number_of_aot_cache_entries;
39+
public uint number_of_shared_libraries;
40+
41+
[NativeAssembler (NumberFormat = LLVMIR.LlvmIrVariableNumberFormat.Hexadecimal)]
42+
public uint android_runtime_jnienv_class_token;
43+
44+
[NativeAssembler (NumberFormat = LLVMIR.LlvmIrVariableNumberFormat.Hexadecimal)]
45+
public uint jnienv_initialize_method_token;
46+
47+
[NativeAssembler (NumberFormat = LLVMIR.LlvmIrVariableNumberFormat.Hexadecimal)]
48+
public uint jnienv_registerjninatives_method_token;
49+
public uint jni_remapping_replacement_type_count;
50+
public uint jni_remapping_replacement_method_index_entry_count;
51+
public string android_package_name = String.Empty;
52+
}

0 commit comments

Comments
 (0)