* adaint.c Add file macro definitions missing on Android.
* adaint.h Avoid definitions related to task affinity and CPU
sets since this functionality is missing on the Android
* errno.c (__set_errno): Android already contains such a named
procedure so do include again.
* gsocket.h: Sockets not supported on Android.
* init.c: Avoid linux related code not supported on Android.
* sysdep.c (sigismember, sigaddset, sigdelset, sigemptyset,
sigfillset): wrapper functions since sig routines are defined
as inline macros on Android.
* terminals.c: Add stubs for terminal related functions not
supported on Android.
From-SVN: r193213
+2012-11-06 Bernard Banner <banner@adacore.com>
+
+ * adaint.c Add file macro definitions missing on Android.
+ * adaint.h Avoid definitions related to task affinity and CPU
+ sets since this functionality is missing on the Android
+ * errno.c (__set_errno): Android already contains such a named
+ procedure so do include again.
+ * gsocket.h: Sockets not supported on Android.
+ * init.c: Avoid linux related code not supported on Android.
+ * sysdep.c (sigismember, sigaddset, sigdelset, sigemptyset,
+ sigfillset): wrapper functions since sig routines are defined
+ as inline macros on Android.
+ * terminals.c: Add stubs for terminal related functions not
+ supported on Android.
+
2012-11-06 Hristian Kirtchev <kirtchev@adacore.com>
* sem_prag.adb (Analyze_Pragma): Do not
#include <unixio.h>
#endif
-#ifdef __vxworks
-/* S_IREAD and S_IWRITE are not defined in VxWorks */
+#if defined (__vxworks) || defined (__ANDROID__)
+/* S_IREAD and S_IWRITE are not defined in VxWorks or Android */
#ifndef S_IREAD
#define S_IREAD (S_IRUSR | S_IRGRP | S_IROTH)
#endif
#endif
#endif
-#if defined (linux)
+#if defined (__ANDROID__)
+
+#include <pthread.h>
+
+void *__gnat_lwp_self (void)
+{
+ return (void *) pthread_self ();
+}
+
+#elif defined (linux)
/* There is no function in the glibc to retrieve the LWP of the current
thread. We need to do a system call in order to retrieve this
information. */
extern char * __gnat_locate_file_with_predicate (char *, char *,
int (*)(char*));
-#if defined (linux)
+#if defined (__ANDROID__)
+#undef linux
+extern void *__gnat_lwp_self (void);
+
+#elif defined (linux)
extern void *__gnat_lwp_self (void);
/* Routines for interface to required CPU set primitives */
return errno;
}
+#ifndef __ANDROID__
void
__set_errno(int err)
{
errno = err;
}
+#endif
* *
****************************************************************************/
-#if defined(__nucleus__) || defined(VTHREADS)
+#if defined(__nucleus__) || defined(VTHREADS) || defined(__ANDROID__)
#warning Sockets not supported on these platforms
#undef HAVE_SOCKETS
#include "vxWorks.h"
#endif
+#ifdef __ANDROID__
+#undef linux
+#endif
+
#ifdef IN_RTS
#include "tconfig.h"
#include "tsystem.h"
#include "vxWorks.h"
#endif
+#ifdef __ANDROID__
+#undef linux
+#endif
+
#ifdef IN_RTS
#define POSIX
#include "tconfig.h"
return 0;
}
}
+
+#ifdef __ANDROID__
+
+/* Provide extern symbols for sig* as needed by the tasking run-time, instead
+ of static inline functions. */
+
+#define sigismember android_sigismember
+#define sigaddset android_sigaddset
+#define sigdelset android_sigdelset
+#define sigemptyset android_sigemptyset
+#define sigfillset android_sigfillset
+
+#include <signal.h>
+
+#undef sigismember
+#undef sigaddset
+#undef sigdelset
+#undef sigemptyset
+#undef sigfillset
+
+int
+sigismember (sigset_t *set, int signum)
+{
+ return android_sigismember (set, signum);
+}
+
+int
+sigaddset (sigset_t *set, int signum)
+{
+ return android_sigaddset (set, signum);
+}
+
+int
+sigdelset (sigset_t *set, int signum)
+{
+ return android_sigdelset (set, signum);
+}
+
+int
+sigemptyset (sigset_t *set)
+{
+ return android_sigemptyset (set);
+}
+
+int
+sigfillset(sigset_t *set)
+{
+ return android_sigfillset (set);
+}
+#endif
/* First all usupported platforms. Add stubs for exported routines. */
-#if defined (VMS) || defined (__vxworks) || defined (__Lynx__)
+#if defined (VMS) || defined (__vxworks) || defined (__Lynx__) || \
+ defined (__ANDROID__)
void * __gnat_new_tty (void) { return (void*)0; }
char * __gnat_tty_name (void* t) { return (char*)0; }