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