Android Builds of OpenJDK Mobile project now available

Ali Ebrahimi ali.ebrahimi1781 at gmail.com
Wed Feb 17 11:38:56 UTC 2016


Hi Bob,
I finally built mobile jdk for x86 and arm with some modifications:
I used:
*OS: Ubuntu 15.10*
*NDK: android-ndk-r10e-linux-x86_64 with --platform=android-21 for building
toolchain*

But my modifications:
*JDK:*
*Errors:*
*1) error: static declaration of <some method> follows non-static
declaration*

diff -r 91482de10f40
src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c
--- a/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Wed Feb
10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Tue Feb
16 21:06:55 2016 +0330
@@ -242,7 +242,7 @@
 }

 #ifdef __ANDROID__
-static int getline(char **line, size_t *len, FILE *fp) {
+int getline(char **line, size_t *len, FILE *fp) {
   char *buf;
   size_t bufLen;
   if (*line != NULL) {

diff -r 91482de10f40
src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c
--- a/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c Wed Feb
10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c Tue Feb
16 21:06:55 2016 +0330
@@ -174,7 +174,7 @@
 }

 #ifdef __ANDROID__
-static struct mntent* getmntent_r(FILE* fp, struct mntent* m, char* buf,
int buflen) {
+struct mntent* getmntent_r(FILE* fp, struct mntent* m, char* buf, int
buflen) {
     if (m) {
         char *str;
         char *last;
diff -r 91482de10f40
src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c
--- a/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c Wed Feb 10
14:17:12 2016 -0500
+++ b/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c Tue Feb 16
21:06:55 2016 +0330
@@ -115,7 +115,7 @@
  * support.  Determine if the following are the most suitable alternatives.
  *
  */
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
+int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen,
struct passwd** result)
 {
   *result = NULL;
   errno = 0;
diff -r 91482de10f40
src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c
--- a/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c Wed Feb 10
14:17:12 2016 -0500
+++ b/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c Tue Feb 16
21:06:55 2016 +0330
@@ -160,7 +160,7 @@
  * support.  Determine if the following are the most suitable alternatives.
  *
  */
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
+int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen,
struct passwd** result)
 {
   *result = NULL;
   errno = 0;
@@ -173,7 +173,7 @@
   return 0;
 }

-static int getpwnam_r(const char *name, struct passwd* pwd, char* buf,
size_t buflen, struct passwd** result)
+int getpwnam_r(const char *name, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
 {
   *result = NULL;
   errno = 0;
@@ -186,7 +186,7 @@
   return 0;
 }

-static int getgrgid_r(gid_t gid, struct group* grp, char* buf, size_t
buflen, struct group** result)
+int getgrgid_r(gid_t gid, struct group* grp, char* buf, size_t buflen,
struct group** result)
 {
   *result = NULL;
   errno = 0;
@@ -199,7 +199,7 @@
   return 0;
 }

-static int getgrnam_r(const char *name, struct group* grp, char* buf,
size_t buflen, struct group** result)
+int getgrnam_r(const char *name, struct group* grp, char* buf, size_t
buflen, struct group** result)
 {
   *result = NULL;
   errno = 0;
diff -r 91482de10f40 src/jdk.security.auth/unix/native/libjaas/Unix.c
--- a/src/jdk.security.auth/unix/native/libjaas/Unix.c Wed Feb 10 14:17:12
2016 -0500
+++ b/src/jdk.security.auth/unix/native/libjaas/Unix.c Tue Feb 16 21:06:55
2016 +0330
@@ -39,7 +39,7 @@
 #include <errno.h>

 #ifdef __ANDROID__
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
+int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen,
struct passwd** result)
 {
   *result = NULL;
   errno = 0;

2)
Error “initializer element is not constant” when trying to initialize
variable
<http://stackoverflow.com/questions/3025050/error-initializer-element-is-not-constant-when-trying-to-initialize-variable-w>
I only commented line: this is only workaound

diff -r 91482de10f40 src/java.base/linux/native/libnet/linux_close.c
--- a/src/java.base/linux/native/libnet/linux_close.c Wed Feb 10 14:17:12
2016 -0500
+++ b/src/java.base/linux/native/libnet/linux_close.c Tue Feb 16 21:06:55
2016 +0330
@@ -57,7 +57,7 @@
  * Signal to unblock thread
  */
 #ifdef __ANDROID__
-#define __SIGRTMAX SIGRTMAX
+//#define __SIGRTMAX SIGRTMAX
 #endif
 static int sigWakeup = (__SIGRTMAX - 2);

*Hotspot:*

1) *error: static declaration of <some method> follows non-static
declaration*

diff -r de1d92b01bae src/os/linux/vm/perfMemory_linux.cpp
--- a/src/os/linux/vm/perfMemory_linux.cpp Wed Feb 10 14:15:17 2016 -0500
+++ b/src/os/linux/vm/perfMemory_linux.cpp Tue Feb 16 20:32:38 2016 +0330
@@ -44,7 +44,7 @@
 # include <pwd.h>

 #ifdef __ANDROID__
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
+int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen,
struct passwd** result)
 {
   *result = NULL;
   errno = 0;

2) error: conflicting declaration 'typedef elf_greg_t greg_t'
android-x86-toolchain/sysroot/usr/include/sys/ucontext.h:123:13: note:
previous declaration as 'typedef int greg_t'

I forced redefinition with #define macro. I don't know if redefinition is
required here

diff -r de1d92b01bae src/os_cpu/linux_x86/vm/os_linux_x86.cpp
--- a/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Wed Feb 10 14:15:17 2016
-0500
+++ b/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Tue Feb 16 20:32:38 2016
+0330
@@ -89,6 +89,7 @@
 #endif

 #ifdef __ANDROID__
+#define greg_t elf_greg_t
 typedef elf_greg_t greg_t;
 #define SPELL_REG_SP "esp"
 #define SPELL_REG_FP "ebp"
 #define CTX_REG_AX eax

*3) error: conflicting declaration 'typedef struct asm_ucontext ucontext_t'*
 typedef struct ucontext ucontext_t;
..
android-x86-toolchain/sysroot/usr/include/sys/ucontext.h:161:3: note:
previous declaration as 'typedef struct ucontext ucontext_t'
 } ucontext_t;

This is my hack��

diff -r de1d92b01bae src/share/vm/utilities/globalDefinitions_gcc.hpp
--- a/src/share/vm/utilities/globalDefinitions_gcc.hpp Wed Feb 10 14:15:17
2016 -0500
+++ b/src/share/vm/utilities/globalDefinitions_gcc.hpp Tue Feb 16 20:32:38
2016 +0330
@@ -78,15 +78,18 @@
 #include <asm/sigcontext.h>
 /* avoid conflicting ucontext definitions */
 #define ucontext asm_ucontext
-struct ucontext {
+struct custom_ucontext {
   unsigned long uc_flags;
-  struct ucontext *uc_link;
+  struct custom_ucontext *uc_link;
   stack_t uc_stack;
   struct sigcontext uc_mcontext;
   sigset_t uc_sigmask;
 };
-
-typedef struct ucontext ucontext_t;
+#define ucontext_t custom_ucontext
+typedef struct custom_ucontext ucontext_t;
 #endif //__ANDROID__


Also in my toolchain for platform android-21 following files is missing I
copied them from android-19
asm/elf.h
asm/user.h


With all of this and adding:
export CC=$ANDROID_DEVKIT/bin/arm-linux-androideabi-gcc
export CXX=$ANDROID_DEVKIT/bin/arm-linux-androideabi-g++
export LD=$ANDROID_DEVKIT/bin/arm-linux-androideabi-ld
export AR=$ANDROID_DEVKIT/bin/arm-linux-androideabi-ar
export MT=$ANDROID_DEVKIT/bin/arm-linux-androideabi-mt
export NM=$ANDROID_DEVKIT/bin/arm-linux-androideabi-nm
export OBJDUMP=$ANDROID_DEVKIT/bin/arm-linux-androideabi-objdump
export RANLIB=$ANDROID_DEVKIT/bin/arm-linux-androideabi-ranlib
export STRIP=$ANDROID_DEVKIT/bin/arm-linux-androideabi-strip

I ran my Hello World program in android jvm.

On Thu, Feb 11, 2016 at 10:33 PM, Bob Vandette <bob.vandette at oracle.com>
wrote:

> The OpenJDK Mobile project was recently merged with JDK 9 build 102 and
> as of today nows has the ability to build both iOS and Android Java 9
> binaries
> for execution on both x86 and arm devices.
>
> I’ve updated the iOS and Android Platform specific project pages with up
> to date
> build instructions.
>
> http://openjdk.java.net/projects/mobile/ios.html
> http://openjdk.java.net/projects/mobile/android.html
>
> Enjoy,
> Bob Vandette
> Mobile Project Lead
>
>
>
>
>
>


-- 

Best Regards,
Ali Ebrahimi


More information about the mobile-dev mailing list