X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=configure.in;h=415d88bd23d12dc6173d0cd664744599fd72ba95;hb=7056a4453f18384324a45b4694e1c39fb8076239;hp=f573989efde3ba0d4bdb4cd6a7941456d897e4c0;hpb=e9691fa116bd9c3f69422fcc02632af08fc36f10;p=cacao.git diff --git a/configure.in b/configure.in index f573989ef..415d88bd2 100644 --- a/configure.in +++ b/configure.in @@ -1,67 +1,107 @@ dnl autoconf; autoheader; automake dnl Process this file with autoconf to produce a configure script. -AC_INIT(jit.c) +AC_INIT(cacao, 0.40, cacao@complang.tuwien.ac.at) +AC_CONFIG_SRCDIR(main.c) AC_CANONICAL_HOST +AC_PREREQ(2.59) +AM_INIT_AUTOMAKE -AM_INIT_AUTOMAKE(cacao, 0.40) -AM_CONFIG_HEADER(config.h) +AM_CONFIG_HEADER([config.h]) AC_PREFIX_DEFAULT(/usr/local/cacao) dnl system type -ASMPART="asmpart.S" case "$host_cpu" in alpha* ) - SYSDEP_DIR="alpha" - CFLAGS="-ieee -O2 -g3" - COMPILER_OBJECTS="compiler.$(OBJEXT)" - AC_DEFINE(OLD_COMPILER) - AC_DEFINE(TRACE_ARGS_NUM, 6) - AC_DEFINE(USE_CODEMMAP) + ARCH_DIR="alpha" + STATIC_CLASSPATH="1" + CFLAGS="-mieee -D__ALPHA__" + AC_DEFINE([TRACE_ARGS_NUM], 6, [Defines integer argument register count]) + AC_DEFINE([USE_CODEMMAP], 1, [use code mmap]) + ;; + +i386* | i486* | i586* | i686* ) + ARCH_DIR="i386" + STATIC_CLASSPATH="0" + CFLAGS="-D__I386__" ;; mips* ) - SYSDEP_DIR="mips" - ASMPART="asmpart.s" - CFLAGS="-64 -g -DMAP_ANONYMOUS=0 -woff 1048,1110,1164,1515" + ARCH_DIR="mips" + STATIC_CLASSPATH="1" + CFLAGS="-64 -O2 -OPT:Olimit=0 -g -woff 1110,1164,1515 -D__MIPS__" LIBS="-lelfutil" - COMPILER_OBJECTS="" - AC_DEFINE(TRACE_ARGS_NUM, 8) + AC_DEFINE([TRACE_ARGS_NUM], 8, [Defines integer argument register count]) ;; -i386* | i486* | i586* | i686* ) - SYSDEP_DIR="i386" - CFLAGS="-O0 -g3 -D__I386__" - COMPILER_OBJECTS="i386/libdisass.a" - AC_DEFINE(TRACE_ARGS_NUM, 6) - AC_DEFINE(USE_CODEMMAP) +powerpc* | ppc* ) + ARCH_DIR="powerpc" + STATIC_CLASSPATH="1" + CFLAGS="-D__POWERPC__" + AC_DEFINE([TRACE_ARGS_NUM], 8, [Defines integer argument register count]) + ;; + +x86_64* ) + ARCH_DIR="x86_64" + STATIC_CLASSPATH="1" + CFLAGS="-D__X86_64__" ;; -sparc* | powerpc* | ppc* | * ) - AC_MSG_ERROR($host-cpu systems are not supported at this time) ;; +sparc* | * ) + AC_MSG_ERROR($host_cpu systems are not supported at this time) + ;; +esac +case "$host_os" in +*linux* | *Linux* ) + CFLAGS="-ansi -pedantic -Wall -Wno-long-long -O0 -g3 $CFLAGS -D__LINUX__ -D_POSIX_C_SOURCE=199506L -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D_BSD_SOURCE" + ;; +*darwin* ) + CFLAGS="-ansi -pedantic -Wall -Wno-long-long -O0 -g3 $CFLAGS -D__DARWIN__" + ;; +*irix* ) + CFLAGS="$CFLAGS -D__IRIX__" + ;; +* ) + ;; esac -AC_SUBST(COMPILER_OBJECTS) -AC_SUBST(ASMPART) -AC_DEFINE_UNQUOTED(SYSDEP_DIR, "$SYSDEP_DIR") -AC_SUBST(SYSDEP_DIR) +AC_DEFINE_UNQUOTED([ARCH_DIR], "$ARCH_DIR", [Architecture directory]) +AC_SUBST(ARCH_DIR) + +AC_ARG_ENABLE([dynamicclasspath], [AS_HELP_STRING(--disable-dynamicclasspath, link classpath native code static even on platforms supporting dynamic loading)], [use_dynamicclasspath=$enableval], [use_dynamicclasspath=yes]) +dnl force static classpath linking ?? +AC_MSG_CHECKING(Link classpath static) +if test "xno" == "x$use_dynamicclasspath"; then + STATIC_CLASSPATH="1" +fi + +if test "$STATIC_CLASSPATH" == "1"; then + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi +AC_SUBST(STATIC_CLASSPATH) dnl Checks for programs. AC_PROG_CC +AM_PROG_AS AC_PROG_RANLIB AC_PROG_MAKE_SET dnl Checks for libraries. -AC_CHECK_LIB(m, sin) +dnl AC_CHECK_LIB(m, sin) dnl Checks for header files. AC_HEADER_DIRENT AC_HEADER_STDC -AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h) +AC_CHECK_HEADERS([fcntl.h]) +AC_CHECK_HEADERS([sys/time.h]) +AC_CHECK_HEADERS([unistd.h]) +AC_CHECK_HEADERS([sys/ioctl.h]) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST @@ -100,12 +140,26 @@ if test $ac_cv_func_mmap_fixed_mapped = yes; then ac_cv_map_anonymous=yes, ac_cv_map_anonymous=no)) + AC_CACHE_CHECK(whether MAP_ANON is defined, + ac_cv_map_anon, + AC_EGREP_CPP(yes, + [#include + #ifdef MAP_ANON + yes + #endif], + ac_cv_map_anon=yes, + ac_cv_map_anon=no)) + if test $ac_cv_map_failed = yes; then - AC_DEFINE(HAVE_MAP_FAILED) + AC_DEFINE([HAVE_MAP_FAILED], 1, [Define if defines MAP_FAILED]) fi if test $ac_cv_map_anonymous = yes; then - AC_DEFINE(HAVE_MAP_ANONYMOUS) + AC_DEFINE([HAVE_MAP_ANONYMOUS], 1, [Define if defines MAP_ANONYMOUS]) + fi + + if test $ac_cv_map_anon = yes; then + AC_DEFINE([HAVE_MAP_ANON], 1, [Define if defines MAP_ANON]) fi fi @@ -113,64 +167,205 @@ fi dnl Features dnl check arguments -AC_ARG_ENABLE(threads, [ --enable-threads enable threads support]) -AC_ARG_WITH(gc, [ --with-gc[=ARG] use garbage collector [gc2,gc1,boehm]]) +AC_ARG_ENABLE([threads], [AS_HELP_STRING(--enable-threads,enable threads support (none,green,native) [[default=native]])]) +AC_ARG_ENABLE([__thread], [AS_HELP_STRING(--disable-__thread,do not use TLS features even when supporting them)], [use__thread=$enableval], [use__thread=yes]) + dnl threads AC_MSG_CHECKING(whether to include threads support) -if test x"$enable_threads" = "xno"; then +enable_threads=${enable_threads:-native} +case "$enable_threads" in +no | none | single) AC_MSG_RESULT(no) -else - AC_MSG_RESULT(yes) - - AC_DEFINE(USE_THREADS) - AC_DEFINE(EXTERNAL_OVERFLOW) - AC_DEFINE(DONT_FREE_FIRST) + dnl no threads for boehm + ac_configure_args="$ac_configure_args --disable-boehm-threads" + ;; +green | native | posix | pthreads) + AC_DEFINE([USE_THREADS], 1, [use threads]) + AC_DEFINE([EXTERNAL_OVERFLOW], 1, [external overflow]) + AC_DEFINE([DONT_FREE_FIRST], 1, [don't free first]) LIBTHREAD="libthreads.a" THREAD_OBJ="threads/libthreads.a" AC_SUBST(LIBTHREAD) AC_SUBST(THREAD_OBJ) -fi -dnl garbage collector version -AC_MSG_CHECKING(which garbage collector to use) -case "$with_gc" in -boehm ) - AC_MSG_RESULT(Boehm garbage collector) - GC_OBJ="mm/libboehm.a libgc.a" - if test ! -e libgc.a; then - AC_MSG_ERROR([libgc.a not found, see README.boehm]) + if test x"$enable_threads" != "xgreen"; then + AC_DEFINE([NATIVE_THREADS], 1, [use pthreads]) + THREAD_LIB="-lpthread" + AC_SUBST(THREAD_LIB) + AC_MSG_RESULT(yes, native) + AC_CHECK_LIB(pthread, main) + + CFLAGS="$CFLAGS -D_REENTRANT" + + dnl tell boehm to support threads as well and classpath to + dnl synchronize VM threads portably + ac_configure_args="$ac_configure_args --enable-boehm-threads=posix --enable-portable-native-sync" + else + AC_MSG_RESULT(yes, green) + + dnl no threads for boehm + ac_configure_args="$ac_configure_args --disable-boehm-threads" fi - AC_DEFINE(USE_BOEHM) - BOEHM_LIB=libboehm.a - ;; -gc1 ) - AC_MSG_RESULT(old garbage collector) - GC_OBJ="mm/libmm_old.a" - ;; -gc2 | "" ) - AC_MSG_RESULT(new garbage collector) - GC_OBJ="mm/libmm_new.a" - ;; -* ) - AC_MSG_ERROR(Invalid GC) - ;; + ;; +*) + AC_MSG_ERROR($enable_threads is an unknown thread package) + ;; esac -AC_SUBST(GC_OBJ) -AC_SUBST(BOEHM_LIB) + + +dnl Check whether the compiler supports the __thread keyword. +if test "x$use__thread" != xno; then + AC_CACHE_CHECK([for __thread], ac_cv_gcc___thread, + [cat > conftest.c <<\EOF +__thread int a = 42; +EOF + if AC_TRY_COMMAND([${CC-cc} $CFLAGS -c conftest.c >&AS_MESSAGE_LOG_FD]); then + ac_cv_gcc___thread=yes + else + ac_cv_gcc___thread=no + fi + rm -f conftest*]) + if test "$ac_cv_gcc___thread" = yes; then + AC_DEFINE([HAVE___THREAD], 1, [have __thread]) + fi +else + ac_cv_gcc___thread=no +fi + + +dnl check if zlib should be used +AC_ARG_ENABLE([zlib], [AS_HELP_STRING(--enable-zlib,enable zip archive class storage (needs zlib) [[default=yes]])]) + +AC_MSG_CHECKING(whether zip archives should be supported) +if test x"$enable_zlib" = "xno"; then + AC_MSG_RESULT(no) +else + AC_DEFINE([USE_ZLIB], 1, [use zlib]) + AC_MSG_RESULT(yes) + AC_CHECK_HEADERS([zlib.h]) + AC_CHECK_LIB(z, main) +fi +AM_CONDITIONAL([USE_ZLIB], [test x"$enable_zlib" != "xno"]) + + +dnl set some essential classpath options, even if their classpath default is +dnl suitable for us +ac_configure_args="$ac_configure_args --enable-jni --disable-cni --disable-regen-headers --enable-static --enable-shared --enable-load-library" + + +dnl check arguments +AC_ARG_ENABLE([gtk-peer], [AS_HELP_STRING(--enable-gtk-peer,compile GTK native peers [[default=no]])]) + + +dnl enable gtk peer +AC_MSG_CHECKING(whether to use gtk awt peers) +if test x"$enable_gtk_peer" = "xyes"; then + AC_MSG_RESULT(yes) + CACAO_GTK=yes + AWTPEERS="java.awt.peer.ComponentPeer \ + java.awt.Graphics\ + java.awt.Window\ + java.awt.peer.MenuPeer \ + java.awt.peer.MenuItemPeer \ + gnu.java.awt.peer.gtk.GdkPixbufDecoder \ + gnu.java.awt.peer.gtk.GtkGenericPeer \ + gnu.java.awt.peer.gtk.GtkMenuBarPeer \ + gnu.java.awt.peer.gtk.GtkScrollPanePeer \ + gnu.java.awt.peer.gtk.GtkMenuPeer \ + gnu.java.awt.peer.gtk.GtkTextComponentPeer \ + gnu.java.awt.peer.gtk.GtkComponentPeer \ + gnu.java.awt.peer.gtk.GtkPopupMenuPeer \ + gnu.java.awt.peer.gtk.GtkCheckboxPeer \ + gnu.java.awt.peer.gtk.GtkCheckboxGroupPeer \ + gnu.java.awt.peer.gtk.GtkMenuItemPeer \ + gnu.java.awt.peer.gtk.GdkGraphics \ + gnu.java.awt.peer.gtk.GtkToolkit \ + gnu.java.awt.peer.gtk.GtkCanvasPeer \ + gnu.java.awt.peer.gtk.GtkFramePeer \ + gnu.java.awt.peer.gtk.GdkFontMetrics \ + gnu.java.awt.peer.gtk.GtkScrollbarPeer \ + gnu.java.awt.peer.gtk.GtkListPeer \ + gnu.java.awt.peer.gtk.GtkLabelPeer \ + gnu.java.awt.peer.gtk.GtkTextAreaPeer \ + gnu.java.awt.peer.gtk.GtkFileDialogPeer \ + gnu.java.awt.peer.gtk.GtkImagePainter \ + gnu.java.awt.peer.gtk.GtkChoicePeer \ + gnu.java.awt.peer.gtk.GtkPanelPeer \ + gnu.java.awt.peer.gtk.GtkMainThread \ + gnu.java.awt.peer.gtk.GtkButtonPeer \ + gnu.java.awt.peer.gtk.GtkTextFieldPeer \ + gnu.java.awt.peer.gtk.GtkCheckboxMenuItemPeer \ + gnu.java.awt.peer.gtk.GtkClipboard \ + gnu.java.awt.peer.gtk.GtkWindowPeer" + AWT_OBJS="classpath/native/jni/gtk-peer/.libs/libgtkpeer.a \ + -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 \ + -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 \ + -lgthread-2.0 -lart_lgpl_2" + USEGTK="yes" + AC_SUBST(USEGTK) + AC_SUBST(AWTPEERS) + AC_SUBST(AWT_OBJS) + AC_DEFINE([USE_GTK], 1, [use gtk]) + +else + CACAO_GTK=no + AWT_OBJS="" + AWTPEERS="" + USEGTK="no" + AC_SUBST(USEGTK) + AC_SUBST(AWTPEERS) + AC_SUBST(AWT_OBJS) + AC_MSG_RESULT(no) + + ac_configure_args="$ac_configure_args --disable-gtk-peer" +fi + + +if test "x1" == "x$STATIC_CLASSPATH"; then + STATIC_CLASSPATH_LIBS=" \ + classpath/native/jni/java-io/.libs/libjavaio.a \ + classpath/native/jni/java-nio/.libs/libjavanio.a \ + classpath/native/jni/java-net/.libs/libjavanet.a \ + classpath/native/jni/java-util/.libs/libjavautil.a \ + classpath/native/jni/java-lang/.libs/libjavalang.a \ + classpath/native/jni/java-lang/.libs/libjavalangreflect.a" + DYNAMIC_CLASSPATH_LIBS="" + AC_SUBST(STATIC_CLASSPATH_LIBS) + AC_SUBST(DYNAMIC_CLASSPATH_LIBS) + AC_DEFINE([STATIC_CLASSPATH], 1, [use classpath statically linked]) + +else + DYNAMIC_CLASSPATH_LIBS="-ldl -Wl,--export-dynamic" + STATIC_CLASSPATH_LIBS="" + AC_SUBST(STATIC_CLASSPATH_LIBS) + AC_SUBST(DYNAMIC_CLASSPATH_LIBS) +fi + + + + +dnl now configure boehm gc and gnu classpath +dnl the export is not my favorite (is there another way?) +export CFLAGS +export CACAO_GTK +AC_CONFIG_SUBDIRS(mm/boehm-gc classpath) + AC_OUTPUT(Makefile \ - toolbox/Makefile \ mm/Makefile \ + toolbox/Makefile \ threads/Makefile \ jit/Makefile \ - alpha/Makefile \ - mips/Makefile \ - i386/Makefile \ + jit/loop/Makefile \ + jit/alpha/Makefile \ + jit/i386/Makefile \ + jit/mips/Makefile \ + jit/powerpc/Makefile \ + jit/x86_64/Makefile \ nat/Makefile \ doc/Makefile \ - comp/Makefile \ - narray/Makefile \ tst/Makefile \ + tst/kaffe/Makefile \ jvmtst/Makefile )