[oe-commits] org.oe.dev cacao: first support of cacao in oe

woglinde2 commit openembedded-commits at lists.openembedded.org
Thu Aug 9 02:14:53 UTC 2007


cacao: first support of cacao in oe
* for now we only support cacao-cldc
* with cacao-cldc and midapth wie have midp support in oe
* opera-mini and serval other midlets should work now
* installing the packages is not enough
* you have to write shellscripts which looks like
  http://midpath.svn.sourceforge.net/viewvc/midpath/trunk/bin/midpath-test-cacao-cldc.sh?view=markup
* arm is the only support platform for now, others will breakout at not finding
  genoffset.h, which can only generate at the target device with the 
  binary genoffset, upstream is working on diffrent solution, feel free to
  submit genoffset.h for your architecture or machine

Author: woglinde2 at openembedded.org
Branch: org.openembedded.dev
Revision: 36843ed17320bc85c468fd1b0c75b2458b55b8ac
ViewMTN: http://monotone.openembedded.org/revision.psp?id=36843ed17320bc85c468fd1b0c75b2458b55b8ac
Files:
1
packages/cacao
packages/cacao/files
packages/cacao/cacao-cldc_0.98.bb
packages/cacao/cacao.inc
packages/cacao/cacaoh-cldc-native_0.98.bb
packages/cacao/files/arm_mmap.patch
packages/cacao/files/classpath_var.patch
packages/cacao/files/libmath.patch
packages/cacao/files/midpath.patch
packages/cacao/files/offset.h_arm.patch
packages/cacao/files/offsets_make.patch
Diffs:

#
# mt diff -r846702a83117f9be37751d88c1620641d3e6be5d -r36843ed17320bc85c468fd1b0c75b2458b55b8ac
#
# 
# 
# add_dir "packages/cacao"
# 
# add_dir "packages/cacao/files"
# 
# add_file "packages/cacao/cacao-cldc_0.98.bb"
#  content [638b504328b4b00e7847c72728b8fd48190cd126]
# 
# add_file "packages/cacao/cacao.inc"
#  content [850a3631e55de6c25da31b955be07c7b8c2a42e3]
# 
# add_file "packages/cacao/cacaoh-cldc-native_0.98.bb"
#  content [80dbefd60462f32de95373690a2c248477fe9183]
# 
# add_file "packages/cacao/files/arm_mmap.patch"
#  content [45dbc46941b95102aa800f44e7356566d102196c]
# 
# add_file "packages/cacao/files/classpath_var.patch"
#  content [c04e83ae51270d3ebec918b295178a033c94e4be]
# 
# add_file "packages/cacao/files/libmath.patch"
#  content [1d4cb756e5ac08cb73324e178057ad65823a9f0b]
# 
# add_file "packages/cacao/files/midpath.patch"
#  content [39901dc0bb8c438d3b35d8dd264a4a45f4f5e75e]
# 
# add_file "packages/cacao/files/offset.h_arm.patch"
#  content [c08ba4ebdc4862d862425c5621819991c19fcd8e]
# 
# add_file "packages/cacao/files/offsets_make.patch"
#  content [ef9ca31e88c88aae677d9160a0019830f3aa4b19]
# 
============================================================
--- packages/cacao/cacao-cldc_0.98.bb	638b504328b4b00e7847c72728b8fd48190cd126
+++ packages/cacao/cacao-cldc_0.98.bb	638b504328b4b00e7847c72728b8fd48190cd126
@@ -0,0 +1,35 @@
+
+require cacao.inc
+
+SRC_URI +="file://midpath.patch;patch=1 \
+           file://offsets_make.patch;patch=1 \
+	   file://classpath_var.patch;patch=1 \
+	   file://libmath.patch;patch=1 \
+	   file://arm_mmap.patch;patch=1 \
+          "
+SRC_URI_append_arm = "file://offset.h_arm.patch;patch=1"
+
+DEPENDS = "cacaoh-cldc-native ecj-native classpath-minimal-native virtual/cldc-api-1.1 libtool zlib"
+RDEPENDS = "virtual/cldc-api-1.1"
+RPROVIDES = "virtual/java"
+
+EXTRA_OECONF += "--with-classpath-libdir=${STAGING_LIBDIR}/classpath-minimal \
+                 --with-classpath-includedir=${STAGING_INCDIR}/classpath-minimal \
+		 --enable-jni \
+                 --enable-java=cldc1.1 \
+                 --with-classpath=cldc1.1 \
+                 --with-classpath-classes=${STAGING_LIBDIR}/java/cldc1.1.jar \
+		 --with-target-classpath-classes=${libdir}/java/cldc1.1.jar \
+		 --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh \
+		 --disable-libjvm \
+                "
+
+PACKAGES = "${PN} ${PN}-doc ${PN}-dbg" 
+
+FILES_${PN} = "${bindir}/cacao"
+FILES_${PN}-doc = "${datadir}/man"
+FILES_${PN}-dbg = "${bindir}/.debug ${libdir}/.debug/lib*.so*"
+
+ALTERNATIVE_NAME = "java"
+ALTERNATIVE_PATH = "${bindir}/cacao"
+ALTERNATIVE_PRIORITY = "10"
============================================================
--- packages/cacao/cacao.inc	850a3631e55de6c25da31b955be07c7b8c2a42e3
+++ packages/cacao/cacao.inc	850a3631e55de6c25da31b955be07c7b8c2a42e3
@@ -0,0 +1,15 @@
+DESCRIPTION = "cacao is a Java Virtual Machine, which uses GNU Classpath as default Java core library"
+HOMEPAGE = "http://www.cacaojvm.org/"
+LICENSE  = "GPL"
+PRIORITY = "optional"
+SECTION  = "interpreters"
+
+inherit autotools
+
+SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-0.98/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346"
+
+S = "${WORKDIR}/cacao-${PV}"
+
+EXTRA_OECONF = "--disable-debug \
+		${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \
+	       "
============================================================
--- packages/cacao/cacaoh-cldc-native_0.98.bb	80dbefd60462f32de95373690a2c248477fe9183
+++ packages/cacao/cacaoh-cldc-native_0.98.bb	80dbefd60462f32de95373690a2c248477fe9183
@@ -0,0 +1,16 @@
+
+require cacao.inc
+
+DEPENDS = "ecj-native classpath-minimal-native virtual/cldc-api-1.1 libtool-native zlib-native"
+
+inherit native
+
+EXTRA_OECONF += "--with-classpath-includedir=${STAGING_INCDIR}/classpath-minimal \
+		 --enable-jni \
+                 --enable-java=cldc1.1 \
+                 --with-classpath=cldc1.1 \
+		 --with-classpath-classes=${STAGING_LIBDIR}/java/cldc1.1.jar \
+                "
+do_stage() {
+	install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/
+}
============================================================
--- packages/cacao/files/arm_mmap.patch	45dbc46941b95102aa800f44e7356566d102196c
+++ packages/cacao/files/arm_mmap.patch	45dbc46941b95102aa800f44e7356566d102196c
@@ -0,0 +1,21 @@
+--- cacao-0.98/src/vm/exceptions.c	2007/06/27 09:04:17	8146
++++ cacao-0.98/src/vm/exceptions.c	2007/07/02 14:07:24	8175
+@@ -92,6 +92,10 @@
+ 
+ bool exceptions_init(void)
+ {
++#if !(defined(__ARM__) && defined(__LINUX__))
++	/* On arm-linux the first memory page can't be mmap'ed, as it
++	   contains the exception vectors. */
++
+ 	int pagesize;
+ 
+ 	/* mmap a memory page at address 0x0, so our hardware-exceptions
+@@ -100,6 +104,7 @@
+ 	pagesize = getpagesize();
+ 
+ 	(void) memory_mmap_anon(NULL, pagesize, PROT_NONE, MAP_PRIVATE | MAP_FIXED);
++#endif
+ 
+ 	/* check if we get into trouble with our hardware-exceptions */
+ 
============================================================
--- packages/cacao/files/classpath_var.patch	c04e83ae51270d3ebec918b295178a033c94e4be
+++ packages/cacao/files/classpath_var.patch	c04e83ae51270d3ebec918b295178a033c94e4be
@@ -0,0 +1,66 @@
+Index: cacao-0.98/configure.ac
+===================================================================
+--- cacao-0.98.orig/configure.ac	2007-06-06 11:24:23.000000000 +0200
++++ cacao-0.98/configure.ac	2007-07-18 23:26:43.000000000 +0200
+@@ -842,6 +842,7 @@
+ AC_CHECK_WITH_CLASSPATH
+ AC_CHECK_WITH_CLASSPATH_PREFIX
+ AC_CHECK_WITH_CLASSPATH_CLASSES
++AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES
+ AC_CHECK_WITH_CLASSPATH_LIBDIR
+ AC_CHECK_WITH_CLASSPATH_INCLUDEDIR
+ 
+Index: cacao-0.98/src/vm/vm.c
+===================================================================
+--- cacao-0.98.orig/src/vm/vm.c	2007-06-05 09:44:38.000000000 +0200
++++ cacao-0.98/src/vm/vm.c	2007-07-18 23:26:43.000000000 +0200
+@@ -621,7 +621,7 @@
+ #if defined(WITH_CLASSPATH_GNU)
+ 	puts("  java.boot.class.path           : "CACAO_VM_ZIP":"CLASSPATH_CLASSES"");
+ #else
+-	puts("  java.boot.class.path           : "CLASSPATH_CLASSES"");
++	puts("  java.boot.class.path           : "TARGET_CLASSPATH_CLASSES"");
+ #endif
+ 	puts("  gnu.classpath.boot.library.path: "CLASSPATH_LIBDIR"/classpath\n");
+ 
+@@ -873,7 +873,7 @@
+ 			strlen(CACAO_VM_ZIP) +
+ 			strlen(":") +
+ # endif
+-			strlen(CLASSPATH_CLASSES) +
++			strlen(TARGET_CLASSPATH_CLASSES) +
+ 			strlen("0");
+ 
+ 		_Jv_bootclasspath = MNEW(char, len);
+@@ -881,7 +881,7 @@
+ 		strcat(_Jv_bootclasspath, CACAO_VM_ZIP);
+ 		strcat(_Jv_bootclasspath, ":");
+ # endif
+-		strcat(_Jv_bootclasspath, CLASSPATH_CLASSES);
++		strcat(_Jv_bootclasspath, TARGET_CLASSPATH_CLASSES);
+ #endif
+ 	}
+ 
+Index: cacao-0.98/m4/classpath.m4
+===================================================================
+--- cacao-0.98.orig/m4/classpath.m4	2007-04-23 22:06:07.000000000 +0200
++++ cacao-0.98/m4/classpath.m4	2007-07-18 23:38:06.000000000 +0200
+@@ -82,6 +82,18 @@
+ AC_SUBST(CLASSPATH_CLASSES)
+ ])
+ 
++dnl where are Java core library classes installed on the target
++
++AC_DEFUN([AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES],[
++AC_MSG_CHECKING(where Java core library classes are installed on the target)
++AC_ARG_WITH([target-classpath-classes],
++            [AS_HELP_STRING(--with-target-classpath-classes=<path>,path to Java core library classes (includes the name of the file and may be flat) [[default=/usr/local/classpath/share/classpath/glibj.zip]])],
++            [TARGET_CLASSPATH_CLASSES=${withval}],
++            [TARGET_CLASSPATH_CLASSES=${CLASSPATH_PREFIX}/share/classpath/glibj.zip])
++AC_MSG_RESULT(${TARGET_CLASSPATH_CLASSES})
++AC_DEFINE_UNQUOTED([TARGET_CLASSPATH_CLASSES], "${TARGET_CLASSPATH_CLASSES}", [Java core library classes on the target])
++AC_SUBST(TARGET_CLASSPATH_CLASSES)
++])
+ 
+ dnl where are Java core library native libraries installed
+ 
============================================================
--- packages/cacao/files/libmath.patch	1d4cb756e5ac08cb73324e178057ad65823a9f0b
+++ packages/cacao/files/libmath.patch	1d4cb756e5ac08cb73324e178057ad65823a9f0b
@@ -0,0 +1,53 @@
+Index: cacao-0.98/configure.ac
+===================================================================
+--- cacao-0.98.orig/configure.ac	2007-07-21 12:11:47.000000000 +0200
++++ cacao-0.98/configure.ac	2007-07-21 13:36:40.000000000 +0200
+@@ -234,6 +234,48 @@
+ AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1, [Define to 1 if you have BSD u_int32_t]))
+ AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1, [Define to 1 if you have BSD u_int32_t]))
+ 
++dnl The idea of this solutions comes from bochs-project configure.in
++dnl 
++dnl Add the -lm library if math functions cannot be used without it.
++dnl This check is important on cygwin because of the bizarre way that they
++dnl have organized functions into libraries.  On cygwin, both libc.a and
++dnl libm.a are symbolic links to a single lib libcygwin.a.  This means that
++dnl   1) linking with -lm is not necessary, and
++dnl   2) linking with -lm is dangerous if the order of libraries is wrong
++dnl In particular, if you compile any program with -mno-cygwin and link with
++dnl -lm, it will crash instantly when it is run.  This happens because the
++dnl linker incorrectly links the Cygwin libm.a (==libcygwin.a), which replaces
++dnl the ___main function instead of allowing it to be defined by
++dnl /usr/lib/mingw/libmingw32.a as it should be.
++dnl
++dnl On MacOS X, this test will find that -lm is unnecessary and leave it out.
++dnl
++dnl With uClibc and without libjvm cacao needs to be linked with -lm because of
++dnl the function scalbn 
++dnl
++dnl Just check this math functions. If it is found without
++dnl -lm, then we must not need -lm.
++have_scalbn=0
++AC_CHECK_FUNCS(scalbn, have_scalbn=1)
++AC_MSG_CHECKING(if math functions link without -lm)
++if test "$have_scalbn" = 1; then
++    AC_MSG_RESULT(yes)
++else
++    AC_MSG_RESULT(no)
++    LIBS="$LIBS -lm"
++    # use different functions to bypass configure caching
++    have_scalbl=0
++    AC_CHECK_FUNCS(scalbl, have_scalbl=1)
++    AC_MSG_CHECKING(if math functions link with -lm)
++    if test "$have_scalbl" = 1; then
++        AC_MSG_RESULT(yes)
++    else
++        AC_MSG_RESULT(no)
++        # not sure we should warn the user, crash, etc.
++	# expect link failure
++    fi
++fi
++
+ dnl Checks for typedefs, structures, and compiler characteristics.
+ AC_C_CONST
+ AC_C_INLINE
============================================================
--- packages/cacao/files/midpath.patch	39901dc0bb8c438d3b35d8dd264a4a45f4f5e75e
+++ packages/cacao/files/midpath.patch	39901dc0bb8c438d3b35d8dd264a4a45f4f5e75e
@@ -0,0 +1,372 @@
+Index: cacao-0.98/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c
+===================================================================
+--- cacao-0.98.orig/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c	2007-05-16 10:06:15.000000000 +0200
++++ cacao-0.98/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c	2007-07-22 00:15:55.000000000 +0200
+@@ -26,25 +26,53 @@
+ 
+ */
+ 
++#include <sys/stat.h>
++#include <stdlib.h>
+ 
+ #include "config.h"
+-#include "vm/types.h"
++
++#include "arch.h"
++#include "mm/memory.h"
+ 
+ #include "native/jni.h"
+ #include "native/native.h"
+ 
+ #include "native/include/java_lang_Object.h"
+ #include "native/include/java_lang_String.h"
+-
++#include "native/include/java_lang_Integer.h"
+ #include "native/include/com_sun_cldc_io_ResourceInputStream.h"
++#include "native/include/com_sun_cldchi_jvm_FileDescriptor.h"
+ 
++#include "vm/types.h"
++#include "vm/builtin.h"
+ #include "vm/vm.h" /* REMOVE ME: temporarily */
++#include "vm/exceptions.h"
++#include "vm/initialize.h"
++#include "vm/stringlocal.h"
++#include "vm/properties.h"
++
++#include "vmcore/class.h"
++#include "vmcore/classcache.h"
++#include "vmcore/linker.h"
++#include "vmcore/loader.h"
++#include "vmcore/options.h"
++#include "vmcore/statistics.h"
++#include "vmcore/suck.h"
++#include "vmcore/zip.h"
++
++#include "toolbox/list.h"
++#include "toolbox/logging.h"
++#include "toolbox/util.h"
+ 
+ 
+ /* native methods implemented by this file ************************************/
+  
+ static JNINativeMethod methods[] = {
+ 	{ "open", "(Ljava/lang/String;)Ljava/lang/Object;", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_open },
++	{ "bytesRemain", "(Ljava/lang/Object;)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_bytesRemain },
++	{ "readByte", "(Ljava/lang/Object;)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_readByte },
++	{ "readBytes", "(Ljava/lang/Object;[BII)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_readBytes },
++	{ "clone", "(Ljava/lang/Object;)Ljava/lang/Object;", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_clone },
+ };
+  
+ /* _Jv_com_sun_cldc_io_ResourceInputStream_init ********************************
+@@ -68,13 +96,209 @@
+  * Method:    open
+  * Signature: (Ljava/lang/String;)Ljava/lang/Object;
+  */
+-JNIEXPORT java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_open(JNIEnv *env, jclass clazz, java_lang_String *name)
++JNIEXPORT struct java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_open(JNIEnv *env, jclass clazz, java_lang_String *name)
+ {
+-	vm_abort("Java_com_sun_cldc_io_ResourceInputStream_open: IMPLEMENT ME!");
++	
++	list_classpath_entry *lce;
++	char                 *filename;
++	s4                    filenamelen;
++	char                 *path;
++	FILE                 *classfile;
++	/*struct stat           statBuffer;
++	int bufferSize = -1;*/
++	utf *uname;
++	/*java_lang_Integer *fhandler;*/
++	com_sun_cldchi_jvm_FileDescriptor *fileDescriptor; 
++	classinfo *ci;
++	
++	
++	/* get the classname as char string (do it here for the warning at
++       the end of the function) */
++
++	uname = javastring_toutf((java_objectheader *)name, false);
++	filenamelen = utf_bytes(uname) + strlen("0");
++	filename = MNEW(char, filenamelen);
++	utf_copy(filename, uname);
++	classfile = NULL;
++	
++
++	/* walk through all classpath entries */
++
++	for (lce = list_first(list_classpath_entries); lce != NULL;
++		 lce = list_next(list_classpath_entries, lce)) {
++
++			path = MNEW(char, lce->pathlen + filenamelen);
++			strcpy(path, lce->path);
++			strcat(path, filename);  
++
++			classfile = fopen(path, "r");
++			
++			MFREE(path, char, lce->pathlen + filenamelen);
++
++			if (classfile) { /* file exists */
++				break;
++			}
++	}
++
++	MFREE(filename, char, filenamelen);
++
++	if (classfile) {
++		ci = load_class_bootstrap(utf_new_char("com/sun/cldchi/jvm/FileDescriptor"));
++		fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) native_new_and_init(ci);
++		fileDescriptor->handle = (int) classfile;
++		fileDescriptor->valid = (int) 0;
++		return (java_lang_Object*) fileDescriptor;
++	} else {
++		return NULL;
++	}
++	
++}
++
++
++/*
++ * Class:     com_sun_cldc_io_ResourceInputStream
++ * Method:    bytesRemain
++ * Signature: (Ljava/lang/Object;)I
++ */
++JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_bytesRemain(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) {
++	
++	com_sun_cldchi_jvm_FileDescriptor *fileDescriptor;
++	struct stat statBuffer;
++	FILE *file;
++	int fd;
++	int position;
++	int hposition;
++	
++	fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj;
++	file = (FILE *)fileDescriptor->handle;
++	
++	/* Change access position if needed */
++	hposition = fileDescriptor->valid;
++	position = ftell(file);
++	if (position != hposition) {
++		fseek(file, hposition, SEEK_SET);
++	}
++	
++	fd = fileno(file);
++	if (fstat(fd, &statBuffer) != -1) {
++		return (statBuffer.st_size - hposition);
++	} else {
++		/* TODO Throw an IOException */
++		return 0; 
++	}
+ 
+-	return NULL;
+ }
+ 
++/*
++ * Class:     com_sun_cldc_io_ResourceInputStream
++ * Method:    readByte
++ * Signature: (Ljava/lang/Object;)I
++ */
++JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_readByte(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) {
++	
++	com_sun_cldchi_jvm_FileDescriptor *fileDescriptor;
++	int readBytes = -1;
++	char byte;
++	FILE * file;
++	int position;
++	int hposition;
++	
++	fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj;
++	file = (FILE *)fileDescriptor->handle;
++%s
>>> DIFF TRUNCATED @ 16K






More information about the Openembedded-commits mailing list