diff --git a/build-tools/scripts/Ndk.projitems.in b/build-tools/scripts/Ndk.projitems.in
index fbc98d84a4b..03399a8bf48 100644
--- a/build-tools/scripts/Ndk.projitems.in
+++ b/build-tools/scripts/Ndk.projitems.in
@@ -11,6 +11,7 @@
@NDK_X86_API_NET@
@NDK_X86_64_API@
@NDK_X86_64_API_NET@
+ @NDK_ARMEABI_V7_API_NON_MONO@
@NDK_ARM64_V8A_API_NON_MONO@
@NDK_X86_64_API_NON_MONO@
@@ -21,10 +22,11 @@
Condition=" $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains (':armeabi-v7a:')) ">
$(AndroidNdkApiLevel_ArmV7a)
$(AndroidNdkApiLevel_Arm)
+ $(AndroidNdkApiLevelNonMono_Arm)
android-arm
True
- False
- False
+ True
+ True
ArchToApiLevelNonMono = new () {
- { AndroidTargetArch.Arm64, @NDK_ARM64_V8A_NONMONO_API@ },
+ { AndroidTargetArch.Arm, @NDK_ARMEABI_V7_NONMONO_API@ },
+ { AndroidTargetArch.Arm64, @NDK_ARM64_V8A_NONMONO_API@ },
{ AndroidTargetArch.X86_64, @NDK_X86_64_NONMONO_API@ },
};
}
diff --git a/build-tools/scripts/xa_build_configuration.cmake.in b/build-tools/scripts/xa_build_configuration.cmake.in
index c7ed213f87f..cfa5a23c7dd 100644
--- a/build-tools/scripts/xa_build_configuration.cmake.in
+++ b/build-tools/scripts/xa_build_configuration.cmake.in
@@ -3,5 +3,6 @@ set(NETCORE_APP_RUNTIME_DIR_ARM64 "@NETCORE_APP_RUNTIME_ANDROID_ARM64@")
set(NETCORE_APP_RUNTIME_DIR_X86 "@NETCORE_APP_RUNTIME_ANDROID_X86@")
set(NETCORE_APP_RUNTIME_DIR_X86_64 "@NETCORE_APP_RUNTIME_ANDROID_X86_64@")
+set(CORECLR_APP_RUNTIME_DIR_ARM "@CORECLR_APP_RUNTIME_ANDROID_ARM@")
set(CORECLR_APP_RUNTIME_DIR_ARM64 "@CORECLR_APP_RUNTIME_ANDROID_ARM64@")
set(CORECLR_APP_RUNTIME_DIR_X86_64 "@CORECLR_APP_RUNTIME_ANDROID_X86_64@")
diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs
index 77a9c8a440a..a6bc4ccc826 100644
--- a/build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs
+++ b/build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs
@@ -163,6 +163,7 @@ public static partial class Defaults
/// build-tools/scripts/Ndk.projitems.in.
///
public static readonly HashSet NativeAotSupportedAbis = new (StringComparer.Ordinal) {
+ "armeabi-v7a",
"arm64-v8a",
"x86_64",
};
diff --git a/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs b/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs
index 3198bc73d29..f3f104b4588 100644
--- a/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs
+++ b/build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs
@@ -99,6 +99,7 @@ GeneratedFile Get_Cmake_XA_Build_Configuration (Context context)
{ "@NETCORE_APP_RUNTIME_ANDROID_X86@", Utilities.EscapePathSeparators (Configurables.Paths.NetcoreAppRuntimeAndroidX86) },
{ "@NETCORE_APP_RUNTIME_ANDROID_X86_64@", Utilities.EscapePathSeparators (Configurables.Paths.NetcoreAppRuntimeAndroidX86_64) },
+ { "@CORECLR_APP_RUNTIME_ANDROID_ARM@", Utilities.EscapePathSeparators (Configurables.Paths.CoreClrAppRuntimeAndroidARM) },
{ "@CORECLR_APP_RUNTIME_ANDROID_ARM64@", Utilities.EscapePathSeparators (Configurables.Paths.CoreClrAppRuntimeAndroidARM64) },
{ "@CORECLR_APP_RUNTIME_ANDROID_X86_64@", Utilities.EscapePathSeparators (Configurables.Paths.CoreClrAppRuntimeAndroidX86_64) },
};
@@ -124,8 +125,9 @@ GeneratedFile GetCmakePresetsCommon (Context context, string sourcesDir)
{ "@NDK_ARM64_V8A_API_NET@", BuildAndroidPlatforms.NdkMinimumAPI },
{ "@NDK_X86_API_NET@", BuildAndroidPlatforms.NdkMinimumAPILegacy32 },
{ "@NDK_X86_64_API_NET@", BuildAndroidPlatforms.NdkMinimumAPI },
- { "@NDK_ARM64_V8A_NONMONO_API_NET@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
- { "@NDK_X86_64_NONMONO_API_NET@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
+ { "@NDK_ARMEABI_V7_NONMONO_API_NET@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
+ { "@NDK_ARM64_V8A_NONMONO_API_NET@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
+ { "@NDK_X86_64_NONMONO_API_NET@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
{ "@XA_BUILD_CONFIGURATION@", context.Configuration },
{ "@XA_TEST_OUTPUT_DIR@", Utilities.EscapePathSeparators (props.GetRequiredValue (KnownProperties.TestOutputDirectory)) },
};
@@ -197,6 +199,7 @@ GeneratedFile Get_XABuildConfig_cs (Context context)
{ "@NDK_ARM64_V8A_API@", BuildAndroidPlatforms.NdkMinimumAPI.ToString () },
{ "@NDK_X86_API@", BuildAndroidPlatforms.NdkMinimumAPILegacy32.ToString ().ToString () },
{ "@NDK_X86_64_API@", BuildAndroidPlatforms.NdkMinimumAPI.ToString ().ToString () },
+ { "@NDK_ARMEABI_V7_NONMONO_API@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
{ "@NDK_ARM64_V8A_NONMONO_API@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
{ "@NDK_X86_64_NONMONO_API@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
{ "@XA_SUPPORTED_ABIS@", context.Properties.GetRequiredValue (KnownProperties.AndroidSupportedTargetJitAbis).Replace (':', ';') },
@@ -257,6 +260,7 @@ GeneratedFile Get_Ndk_projitems (Context context)
{ "@NDK_X86_64_API@", BuildAndroidPlatforms.NdkMinimumAPI.ToString () },
{ "@NDK_X86_64_API_NET@", BuildAndroidPlatforms.NdkMinimumAPI.ToString () },
{ "@NDK_ARM64_V8A_API_NON_MONO@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
+ { "@NDK_ARMEABI_V7_API_NON_MONO@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
{ "@NDK_X86_64_API_NON_MONO@", BuildAndroidPlatforms.NdkMinimumNonMonoAPI },
};
diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets
index 3b7c6203ad6..ee69f814884 100644
--- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets
+++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets
@@ -22,7 +22,7 @@ This file contains the NativeAOT-specific MSBuild logic for .NET for Android.
true
true
-
+
<_IsPublishing Condition=" '$(_IsPublishing)' == '' ">true
@@ -86,9 +86,16 @@ This file contains the NativeAOT-specific MSBuild logic for .NET for Android.
<_NdkAbi Condition=" '$(RuntimeIdentifier)' == 'android-arm64' ">aarch64
<_NdkAbi Condition=" '$(RuntimeIdentifier)' == 'android-x64' ">x86_64
+ <_NdkAbi Condition=" '$(RuntimeIdentifier)' == 'android-arm' ">arm
<_NDKApiLevel Condition=" '$(RuntimeIdentifier)' == 'android-arm64' ">$(AndroidNdkApiLevel_Arm64)
<_NDKApiLevel Condition=" '$(RuntimeIdentifier)' == 'android-x64' ">$(AndroidNdkAPiLevel_X64)
- <_NdkSysrootAbi>$(_NdkAbi)-linux-android
+ <_NDKApiLevel Condition=" '$(RuntimeIdentifier)' == 'android-arm' ">$(AndroidNdkApiLevel_Arm)
+ <_NdkClangPrefix Condition=" '$(RuntimeIdentifier)' == 'android-arm64' ">aarch64-linux-android
+ <_NdkClangPrefix Condition=" '$(RuntimeIdentifier)' == 'android-x64' ">x86_64-linux-android
+ <_NdkClangPrefix Condition=" '$(RuntimeIdentifier)' == 'android-arm' ">armv7a-linux-androideabi
+ <_NdkSysrootAbi Condition=" '$(RuntimeIdentifier)' == 'android-arm64' ">aarch64-linux-android
+ <_NdkSysrootAbi Condition=" '$(RuntimeIdentifier)' == 'android-x64' ">x86_64-linux-android
+ <_NdkSysrootAbi Condition=" '$(RuntimeIdentifier)' == 'android-arm' ">arm-linux-androideabi
<_NdkPrebuiltAbi Condition=" $([MSBuild]::IsOSPlatform('windows')) ">windows-x86_64
<_NdkPrebuiltAbi Condition=" $([MSBuild]::IsOSPlatform('osx')) ">darwin-x86_64
<_NdkPrebuiltAbi Condition=" $([MSBuild]::IsOSPlatform('linux')) ">linux-x86_64
@@ -124,8 +131,8 @@ This file contains the NativeAOT-specific MSBuild logic for .NET for Android.
application. If, for some reason, `clang++` has to be used, `` need to be
added to pass `-nostdlib` to it.
-->
- $(_NdkAbi)-linux-android$(_NDKApiLevel)-clang$(_NdkWrapperScriptExt)
- $(_NdkAbi)-linux-android$(_NDKApiLevel)-clang$(_NdkWrapperScriptExt)
+ $(_NdkClangPrefix)$(_NDKApiLevel)-clang$(_NdkWrapperScriptExt)
+ $(_NdkClangPrefix)$(_NDKApiLevel)-clang$(_NdkWrapperScriptExt)
llvm-objcopy
@@ -210,6 +217,7 @@ This file contains the NativeAOT-specific MSBuild logic for .NET for Android.
+ <_PrivateBuildTargetAbi Condition=" '$(RuntimeIdentifier)' == 'android-arm' " Include="armeabi-v7a" />
<_PrivateBuildTargetAbi Condition=" '$(RuntimeIdentifier)' == 'android-arm64' " Include="arm64-v8a" />
<_PrivateBuildTargetAbi Condition=" '$(RuntimeIdentifier)' == 'android-x64' " Include="x86_64" />
diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json
index 53fe8f57e0f..6a3a324bc61 100644
--- a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json
+++ b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json
@@ -12,8 +12,10 @@
"Microsoft.Android.Runtime.Mono.37.android-arm64",
"Microsoft.Android.Runtime.Mono.37.android-x86",
"Microsoft.Android.Runtime.Mono.37.android-x64",
+ "Microsoft.Android.Runtime.CoreCLR.37.android-arm",
"Microsoft.Android.Runtime.CoreCLR.37.android-arm64",
"Microsoft.Android.Runtime.CoreCLR.37.android-x64",
+ "Microsoft.Android.Runtime.NativeAOT.37.android-arm",
"Microsoft.Android.Runtime.NativeAOT.37.android-arm64",
"Microsoft.Android.Runtime.NativeAOT.37.android-x64",
"Microsoft.Android.Templates"
@@ -78,6 +80,10 @@
"kind": "framework",
"version": "@WORKLOAD_VERSION@"
},
+ "Microsoft.Android.Runtime.CoreCLR.37.android-arm": {
+ "kind": "framework",
+ "version": "@WORKLOAD_VERSION@"
+ },
"Microsoft.Android.Runtime.CoreCLR.37.android-arm64": {
"kind": "framework",
"version": "@WORKLOAD_VERSION@"
@@ -86,6 +92,10 @@
"kind": "framework",
"version": "@WORKLOAD_VERSION@"
},
+ "Microsoft.Android.Runtime.NativeAOT.37.android-arm": {
+ "kind": "framework",
+ "version": "@WORKLOAD_VERSION@"
+ },
"Microsoft.Android.Runtime.NativeAOT.37.android-arm64": {
"kind": "framework",
"version": "@WORKLOAD_VERSION@"
diff --git a/src/native/CMakeLists.txt b/src/native/CMakeLists.txt
index ba9267c5623..b91d716fb32 100644
--- a/src/native/CMakeLists.txt
+++ b/src/native/CMakeLists.txt
@@ -177,9 +177,11 @@ if(IS_CLR_RUNTIME)
set(LOCAL_CORECLR_CONFIG Release)
endif()
+ set(RUNTIME_DIR_ARM "${LOCAL_CORECLR_PATH}/${CLR_PACKAGE_NAME_STEM}-arm/${LOCAL_CORECLR_CONFIG}/runtimes/android-arm")
set(RUNTIME_DIR_ARM64 "${LOCAL_CORECLR_PATH}/${CLR_PACKAGE_NAME_STEM}-arm64/${LOCAL_CORECLR_CONFIG}/runtimes/android-arm64")
set(RUNTIME_DIR_X86_64 "${LOCAL_CORECLR_PATH}/${CLR_PACKAGE_NAME_STEM}-x64/${LOCAL_CORECLR_CONFIG}/runtimes/android-x64")
else()
+ set(RUNTIME_DIR_ARM "${CORECLR_APP_RUNTIME_DIR_ARM}")
set(RUNTIME_DIR_ARM64 "${CORECLR_APP_RUNTIME_DIR_ARM64}")
set(RUNTIME_DIR_X86_64 "${CORECLR_APP_RUNTIME_DIR_X86_64}")
endif()
diff --git a/src/native/CMakePresets.json.in b/src/native/CMakePresets.json.in
index fb5c77267de..4cd1233a7ef 100644
--- a/src/native/CMakePresets.json.in
+++ b/src/native/CMakePresets.json.in
@@ -97,6 +97,17 @@
}
},
+ {
+ "name": "nonmono-common-armeabi-v7a",
+ "hidden": true,
+ "cacheVariables": {
+ "ANDROID_ABI": "armeabi-v7a",
+ "ANDROID_NATIVE_API_LEVEL": "@NDK_ARMEABI_V7_NONMONO_API_NET@",
+ "ANDROID_PLATFORM": "android-@NDK_ARMEABI_V7_NONMONO_API_NET@",
+ "ANDROID_RID": "android-arm"
+ }
+ },
+
{
"name": "common-arm64-v8a",
"hidden": true,
@@ -173,11 +184,31 @@
"inherits": ["default-common", "common-debug", "common-armeabi-v7a"]
},
+ {
+ "name": "nativeaot-default-debug-armeabi-v7a",
+ "inherits": ["nativeaot-default-common", "common-debug", "nonmono-common-armeabi-v7a"]
+ },
+
+ {
+ "name": "coreclr-default-debug-armeabi-v7a",
+ "inherits": ["default-common", "common-debug", "nonmono-common-armeabi-v7a"]
+ },
+
{
"name": "default-release-armeabi-v7a",
"inherits": ["default-common", "common-release", "common-armeabi-v7a"]
},
+ {
+ "name": "nativeaot-default-release-armeabi-v7a",
+ "inherits": ["nativeaot-default-common", "common-release", "nonmono-common-armeabi-v7a"]
+ },
+
+ {
+ "name": "coreclr-default-release-armeabi-v7a",
+ "inherits": ["default-common", "common-release", "nonmono-common-armeabi-v7a"]
+ },
+
{
"name": "analyzers-debug-armeabi-v7a",
"hidden": true,
diff --git a/src/native/clr/host/typemap.cc b/src/native/clr/host/typemap.cc
index 85e5a37a3a5..8a52077d360 100644
--- a/src/native/clr/host/typemap.cc
+++ b/src/native/clr/host/typemap.cc
@@ -146,7 +146,7 @@ auto TypeMapper::managed_to_java_debug (const char *typeName, const uint8_t *mvi
dynamic_local_path_string full_type_name;
full_type_name.append (typeName);
- hash_t mvid_hash = xxhash::hash (mvid, 16z); // we must hope managed land called us with valid data
+ hash_t mvid_hash = xxhash::hash (reinterpret_cast(mvid), 16z); // we must hope managed land called us with valid data
auto equal = [](TypeMapAssembly const& entry, hash_t key) -> bool { return entry.mvid_hash == key; };
auto less_than = [](TypeMapAssembly const& entry, hash_t key) -> bool { return entry.mvid_hash < key; };
diff --git a/src/native/native-clr.csproj b/src/native/native-clr.csproj
index bb3445fafb0..fdb3ffdd6c3 100644
--- a/src/native/native-clr.csproj
+++ b/src/native/native-clr.csproj
@@ -7,9 +7,8 @@
Exe
false
-
arm64:x86_64
- arm64-v8a:x86_64
+ armeabi-v7a:arm64-v8a:x86_64
diff --git a/src/native/native-nativeaot.csproj b/src/native/native-nativeaot.csproj
index ff0f4ac6750..ce3028acbbb 100644
--- a/src/native/native-nativeaot.csproj
+++ b/src/native/native-nativeaot.csproj
@@ -8,7 +8,7 @@
false
arm64:x86_64
- arm64-v8a:x86_64
+ armeabi-v7a:arm64-v8a:x86_64