diff options
author | Rodrigo Kumpera <kumpera@gmail.com> | 2017-03-16 02:30:34 +0300 |
---|---|---|
committer | Rodrigo Kumpera <kumpera@gmail.com> | 2017-03-16 02:30:34 +0300 |
commit | fc662e3ffeb9c4d150a69507f1909fb5b906d651 (patch) | |
tree | ffbcf029c5fc6a154089544fba86dbae0c70c8b7 /mcs/class/Mono.Posix | |
parent | c37ef087cf74f314b939fe33101666cb50be41e1 (diff) |
[Mono.Posix] Add file that was on the xamarin-android repo so it can be built from mono.
Diffstat (limited to 'mcs/class/Mono.Posix')
-rw-r--r-- | mcs/class/Mono.Posix/Mono.Unix.Android/AndroidUtils.cs | 47 | ||||
-rw-r--r-- | mcs/class/Mono.Posix/Mono.Unix.Native/NativeConvert.cs | 15 | ||||
-rw-r--r-- | mcs/class/Mono.Posix/monodroid_Mono.Posix.dll.sources | 2 |
3 files changed, 63 insertions, 1 deletions
diff --git a/mcs/class/Mono.Posix/Mono.Unix.Android/AndroidUtils.cs b/mcs/class/Mono.Posix/Mono.Unix.Android/AndroidUtils.cs new file mode 100644 index 00000000000..3b40a82c072 --- /dev/null +++ b/mcs/class/Mono.Posix/Mono.Unix.Android/AndroidUtils.cs @@ -0,0 +1,47 @@ +using System; +using System.Reflection; + +// using Android.Runtime; +// using Android.Util; + +namespace Mono.Unix.Android +{ + internal sealed class AndroidUtils + { + const string TAG = "Mono.Posix"; + + delegate void DetectCPUAndArchitecture (out ushort builtForCPU, out ushort runningOnCPU, out bool is64bit); + + readonly static DetectCPUAndArchitecture detectCPUAndArchitecture; + + static AndroidUtils () + { + Type androidRuntime = Type.GetType ("Android.Runtime.AndroidEnvironment, Mono.Android", true); + + MethodInfo mi = androidRuntime.GetMethod ("DetectCPUAndArchitecture", BindingFlags.NonPublic | BindingFlags.Static); + detectCPUAndArchitecture = (DetectCPUAndArchitecture) Delegate.CreateDelegate (typeof(DetectCPUAndArchitecture), mi); + } + + public static bool AreRealTimeSignalsSafe () + { + ushort built_for_cpu; + ushort running_on_cpu; + bool is64bit; + + detectCPUAndArchitecture (out built_for_cpu, out running_on_cpu, out is64bit); + + // CPUArchitecture builtForCPU = Enum.IsDefined (typeof (CPUArchitecture), built_for_cpu) ? (CPUArchitecture)built_for_cpu : CPUArchitecture.Unknown; + // CPUArchitecture runningOnCPU = Enum.IsDefined (typeof (CPUArchitecture), running_on_cpu) ? (CPUArchitecture)running_on_cpu : CPUArchitecture.Unknown; + + // Log.Info (TAG, " Built for CPU: {0}", builtForCPU); + // Log.Info (TAG, "Running on CPU: {0}", runningOnCPU); + // Log.Info (TAG, "64-bit process: {0}", is64bit ? "yes" : "no"); + + // For now real-time signals aren't safe at all, alas + bool safe = false; + // Log.Info (TAG, "Real-time signals are {0}safe on this platform", safe ? String.Empty : "not "); + + return safe; + } + } +}
\ No newline at end of file diff --git a/mcs/class/Mono.Posix/Mono.Unix.Native/NativeConvert.cs b/mcs/class/Mono.Posix/Mono.Unix.Native/NativeConvert.cs index 57c03140112..810e13a7ca8 100644 --- a/mcs/class/Mono.Posix/Mono.Unix.Native/NativeConvert.cs +++ b/mcs/class/Mono.Posix/Mono.Unix.Native/NativeConvert.cs @@ -8,6 +8,9 @@ using System; using System.IO; using System.Runtime.InteropServices; using Mono.Unix.Native; +#if MONODROID +using Mono.Unix.Android; +#endif namespace Mono.Unix.Native { @@ -17,7 +20,17 @@ namespace Mono.Unix.Native { // // Non-generated exports // -#if !MONODROID +#if MONODROID + [DllImport (LIB, EntryPoint="Mono_Posix_FromRealTimeSignum")] + static extern int HelperFromRealTimeSignum (Int32 offset, out Int32 rval); + + static int FromRealTimeSignum (Int32 offset, out Int32 rval) + { + if (!AndroidUtils.AreRealTimeSignalsSafe ()) + throw new PlatformNotSupportedException ("Real-time signals are not supported on this Android architecture"); + return HelperFromRealTimeSignum (offset, out rval); + } +#else [DllImport (LIB, EntryPoint="Mono_Posix_FromRealTimeSignum")] private static extern int FromRealTimeSignum (Int32 offset, out Int32 rval); #endif diff --git a/mcs/class/Mono.Posix/monodroid_Mono.Posix.dll.sources b/mcs/class/Mono.Posix/monodroid_Mono.Posix.dll.sources new file mode 100644 index 00000000000..0d242e6ef3e --- /dev/null +++ b/mcs/class/Mono.Posix/monodroid_Mono.Posix.dll.sources @@ -0,0 +1,2 @@ +#include Mono.Posix.dll.sources +./Mono.Unix.Android/AndroidUtils.cs |