Date: Sat, 25 Sep 1999 13:26:10 -0400 (EDT) From: Mikhail Teterin <mi@aldan.algebra.com> To: eischen@vigrid.com, jb@cimlogic.com.au, java@FreeBSD.org, jdp@polstra.com, obrien@FreeBSD.org Cc: java-discuss@sourceware.cygnus.com Subject: porting libjava to FreeBSD Message-ID: <199909251726.NAA44892@rtfm.newton>
next in thread | raw e-mail | index | archive | help
Hello! I'm trying to make a port of libjava (to give some meaning to the currently useless gcj installed by the egcs port on -stable, for example). It also seems to provide A LOT faster java compiler... Obviously, I'd like to enable the use of threads as well. The closest match to c_r in the set of possible threading libraries seems to be "Linux threads". However, the low level code in libgcj-2.95.1/boehm-gc/linux_threads.c uses the non-existent (on FreeBSD) signal SIGPWR. With the following comment: /* * The only way to suspend threads given the pthread * interface is to send signals. We can't use SIGSTOP * directly, because we need to get the thread to save * its stack pointer in the GC thread table before * suspending. So we have to reserve a signal of our own * for this. This means we have to intercept client * calls to change the signal mask. The linuxthreads * package already uses SIGUSR1 and SIGUSR2, so we need * to reuse something else. I chose SIGPWR. (Perhaps * SIGUNUSED would be a better choice.) */ #define SIG_SUSPEND SIGPWR Any suggestions on what should be used on FreeBSD instead? Or, perhaps, this is not going to work and a new freebsd_threads.c needs to be written for libjava? Thanks, -mi P.S. If you wish to take a look yourself, here is the half-baked, but almost functional port I have so far. # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # libgcj # libgcj/pkg # libgcj/pkg/COMMENT # libgcj/pkg/DESCR # libgcj/pkg/PLIST # libgcj/patches # libgcj/patches/patch-aa # libgcj/patches/patch-ab # libgcj/patches/patch-ac # libgcj/patches/patch-ad # libgcj/patches/patch-ae # libgcj/files # libgcj/files/md5 # libgcj/Makefile # libgcj/work # libgcj/work/.extract_done # libgcj/work/.patch_done # libgcj/work/.configure_done # echo c - libgcj mkdir -p libgcj > /dev/null 2>&1 echo c - libgcj/pkg mkdir -p libgcj/pkg > /dev/null 2>&1 echo x - libgcj/pkg/COMMENT sed 's/^X//' >libgcj/pkg/COMMENT << 'END-of-libgcj/pkg/COMMENT' XGNU Java Library -- needed by GNU Java Compiler (gcj) END-of-libgcj/pkg/COMMENT echo x - libgcj/pkg/DESCR sed 's/^X//' >libgcj/pkg/DESCR << 'END-of-libgcj/pkg/DESCR' XThis library enables you to use gcj -- now part of the GNU Compiler XSuit. Threading support is not ported yet. END-of-libgcj/pkg/DESCR echo x - libgcj/pkg/PLIST sed 's/^X//' >libgcj/pkg/PLIST << 'END-of-libgcj/pkg/PLIST' END-of-libgcj/pkg/PLIST echo c - libgcj/patches mkdir -p libgcj/patches > /dev/null 2>&1 echo x - libgcj/patches/patch-aa sed 's/^X//' >libgcj/patches/patch-aa << 'END-of-libgcj/patches/patch-aa' X--- ../libjava/configure.orig Sat Aug 21 10:26:13 1999 X+++ ../libjava/configure Sat Sep 25 12:29:35 1999 X@@ -2541,3 +2541,3 @@ X- *-*-linux*) X+ *-*-linux*|*-*-freebsd*) X # FIXME: this isn't correct in all cases. X THREADS=posix X@@ -2570,3 +2570,3 @@ X THREADS=posix X case "$host" in X- *-*-linux*) X+ *-*-linux*|*-*-freebsd*) X@@ -2597,4 +2597,12 @@ X case "$THREADS" in X posix) X- THREADLIBS=-lpthread X- THREADSPEC=-lpthread X+ case "$host" in X+ *-*-linux*) X+ THREADLIBS=-lpthread X+ THREADSPEC=-lpthread X+ ;; X+ *-*-freebsd*) X+ THREADLIBS=-lc_r X+ THREADSPEC=-pthread X+ ;; X+ esac END-of-libgcj/patches/patch-aa echo x - libgcj/patches/patch-ab sed 's/^X//' >libgcj/patches/patch-ab << 'END-of-libgcj/patches/patch-ab' X--- ../Makefile.in.orig Wed May 5 06:13:21 1999 X+++ ../Makefile.in Sat Sep 25 11:14:08 1999 X@@ -65 +64,0 @@ X-INSTALL = $(SHELL) $$s/install-sh -c END-of-libgcj/patches/patch-ab echo x - libgcj/patches/patch-ac sed 's/^X//' >libgcj/patches/patch-ac << 'END-of-libgcj/patches/patch-ac' X--- ../libjava/Makefile.in.orig Mon Aug 2 23:14:26 1999 X+++ ../libjava/Makefile.in Sat Sep 25 12:12:15 1999 X@@ -131,6 +131 @@ X-@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = \ X-@CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/zip/zip$(EXEEXT) X-@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = \ X-@CANADIAN_TRUE@@NULL_TARGET_FALSE@zip X-@CANADIAN_FALSE@ZIP = \ X-@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/zip/zip$(EXEEXT) X+ZIP = ${PREFIX}/bin/zip END-of-libgcj/patches/patch-ac echo x - libgcj/patches/patch-ad sed 's/^X//' >libgcj/patches/patch-ad << 'END-of-libgcj/patches/patch-ad' X--- ../boehm-gc/configure.orig Wed Aug 4 16:53:52 1999 X+++ ../boehm-gc/configure Sat Sep 25 12:33:47 1999 X@@ -2273,3 +2273,3 @@ X- *-*-linux*) X+ *-*-linux*|*-*-freebsd*) X # FIXME: this isn't correct in all cases. X THREADS=posix X@@ -2303,3 +2303,3 @@ X THREADS=posix X case "$host" in X- *-*-linux*) X+ *-*-linux*|*-*-freebsd*) END-of-libgcj/patches/patch-ad echo x - libgcj/patches/patch-ae sed 's/^X//' >libgcj/patches/patch-ae << 'END-of-libgcj/patches/patch-ae' X--- ../boehm-gc/config.h.orig Mon Jul 19 15:32:38 1999 X+++ ../boehm-gc/config.h Sat Sep 25 12:41:24 1999 X@@ -989,3 +989,3 @@ X # endif X-# if defined(LINUX_THREADS) && !defined(LINUX) X+# if defined(LINUX_THREADS) && !defined(LINUX) && !defined(__FreeBSD__) X --> inconsistent configuration END-of-libgcj/patches/patch-ae echo c - libgcj/files mkdir -p libgcj/files > /dev/null 2>&1 echo x - libgcj/files/md5 sed 's/^X//' >libgcj/files/md5 << 'END-of-libgcj/files/md5' XMD5 (libgcj-2.95.1.tar.gz) = 63f61b33ef099caf55ec55553a668576 END-of-libgcj/files/md5 echo x - libgcj/Makefile sed 's/^X//' >libgcj/Makefile << 'END-of-libgcj/Makefile' X# New ports collection makefile for: Java Servlet Developpers Kit X# Version required: 2.95.1 X# Date created: 1999/09/23 X# Whom: Mikhail Teterin <mi@aldan.algebra.com> X# X# $FreeBSD:$ X# X XDISTNAME= libgcj-2.95.1 XCATEGORIES= java XMASTER_SITES= ftp://sourceware.cygnus.com/pub/java/ X XMAINTAINER= mi@aldan.algebra.com X XBUILD_DEPENDS= g++295:${PORTSDIR}/lang/egcs \ X gcj:${PORTSDIR}/lang/egcs \ X zip:${PORTSDIR}/archivers/zip X XGNU_CONFIGURE= YES XUSE_GMAKE= YES XCONFIGURE_SCRIPT=../configure XCONFIGURE_ENV= CC=gcc295 CXX=g++295 CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" XCONFIGURE_ARGS= --with-system-zlib X X.if defined(USE_THREADS) X# Currently broken! XCONFIGURE_ARGS+=--enable-threads=posix X.endif X XMAKE_ENV= INSTALL="${INSTALL}" PREFIX="${PREFIX}" X XWRKSRC= ${WRKDIR}/libgcj-2.95.1/build X Xpost-extract: X ${MKDIR} ${WRKSRC} X ${RM} -rf ${WRKSRC}/../zip ${WRKSRC}/../zlib X Xpost-configure: X cd ${WRKSRC} && ${GMAKE} configure-target-boehm-gc \ X configure-target-libjava X X.include <bsd.port.mk> END-of-libgcj/Makefile exit To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-java" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199909251726.NAA44892>