# configure.host

# This shell script handles all host based configuration for libgcj.
# It sets various shell variables based on the the host and the
# configuration options.  You can modify this shell script without
# needing to rerun autoconf.

# This shell script should be invoked as
#   . configure.host
# If it encounters an error, it will exit with a message.

# It uses the following shell variables:
#   host		The configuration host
#   host_cpu		The configuration host CPU
#   target_optspace	--enable-target-optspace ("yes", "no", "")

# It sets the following shell variables:
#   libgcj_cflags	Special CFLAGS to use when building
#   libgcj_cxxflags	Special CXXFLAGS to use when building
#   libgcj_javaflags	Special JAVAFLAGS to use when building
#   libgcj_sublib_ltflags  Special Libtool flags to use when building sublibs
#   libgcj_sublib_core_extra_deps  Extra dependencies to add to core sublib
#   libgcj_interpreter  If the bytecode interpreter supports this platform.
#   enable_java_net_default  If java.net native code should be enabled by
#                            default.
#   enable_hash_synchronization_default  If hash synchronization should be
#                                        enabled by default.
#   enable_libgcj_sublibs_default  Whether to build libgcj as a bunch of
#                                  separate shared libraries or in one 
#                                  monolithic one.
#   sysdeps_dir		Directory containing system-dependent headers
#   slow_pthread_self   The synchronization code should try to avoid 
#			pthread_self calls by caching thread IDs in a hashtable
#   can_unwind_signal   Set to "yes" if the EH unwinder supports throwing
#			from a signal handler.
#   fallback_backtrace_h  Header to use for fallback backtrace implementation
#			  (only for targets that don't support DWARF2 unwind)
#   descriptor_h	Header to use for looking past function descriptors
#   use_libgcj_bc	Whether to build a "libgcj-bc" library for BC-ABI
#			binaries to link against.

libgcj_flags=
libgcj_cflags=
libgcj_cxxflags=
libgcj_javaflags=
libgcj_sublib_ltflags=
libgcj_sublib_core_extra_deps=
libgcj_interpreter=
enable_java_net_default=yes
enable_hash_synchronization_default=no
enable_libgcj_sublibs_default=no
sysdeps_dir=generic
slow_pthread_self=
can_unwind_signal=no
fallback_backtrace_h=sysdep/generic/backtrace.h

case "${target_optspace}:${host}" in
  yes:*)
    libgcj_flags="${libgcj_flags} -Os"
    ;;
  :m32r-* | :d10v-* | :d30v-*)
    libgcj_flags="${libgcj_flags} -Os"
    ;;
  no:* | :*)
    # Nothing.
    ;;
esac

AM_RUNTESTFLAGS= 

# Set any host dependent compiler flags.
# THIS TABLE IS SORTED.  KEEP IT THAT WAY.

echo "$target"

DIVIDESPEC=-fuse-divide-subroutine
EXCEPTIONSPEC=-fnon-call-exceptions
CHECKREFSPEC=
BACKTRACESPEC=
ATOMICSPEC=

# This case statement supports per-CPU defaults.
case "${host}" in
  arm*-elf)
	with_libffi_default=no
	PROCESS=Ecos
	FILE=Posix
	CHECKREFSPEC=-fcheck-references
	EXCEPTIONSPEC=
	enable_java_net_default=no
	enable_getenv_properties_default=no
	enable_main_args_default=no
	sysdeps_dir=arm
	;;
  arm*-linux*)
	libgcj_interpreter=yes
	sysdeps_dir=arm
	fallback_backtrace_h=sysdep/arm/backtrace.h
	libgcj_cxxflags=-Wno-abi
	ATOMICSPEC=-fuse-atomic-builtins
	# Work around a strange libtool feature that causes libraries
	# to be linked with libgcc_s but not libgcc.  
	LDFLAGS="${LDFLAGS} -Wl,-lgcc"
	;;
  mips-tx39-*|mipstx39-unknown-*)
	libgcj_flags="${libgcj_flags} -G 0"
	LDFLAGS="$LDFLAGS -Tjmr3904dram.ld"
	AM_RUNTESTFLAGS="--target_board=jmr3904-sim"	
	# Use "Ecos" processes since they are a no-op.
	PROCESS=Ecos
	FILE=Posix
 	enable_java_net_default=no
 	enable_getenv_properties_default=no
	;;
  mips*-*)
	libgcj_interpreter=yes
	;;
  i686-*|i586-*|i486-*|i386-*)
	sysdeps_dir=i386
	# With -fomit-frame-pointer -maccumulate-outgoing-args (implied),
	# the .text section of libgcj.so is 30k larger, and the .eh_frame
	# section is 1.4M smaller.
	libgcj_flags="${libgcj_flags} -ffloat-store -fomit-frame-pointer"
	# On Solaris we have defined 'sun' which later conflicts with 
	# namespace usage. So to work this away we use the below undefine.
	libgcj_flags="${libgcj_flags} -Usun"
	libgcj_interpreter=yes
	libgcj_cxxflags=
	libgcj_cflags=
	DIVIDESPEC=-fno-use-divide-subroutine
	enable_hash_synchronization_default=yes
	slow_pthread_self=yes
	;;
  x86_64-*)
	sysdeps_dir=i386
	# For 64-bit we always use SSE registers for arithmetic,
	# which doesn't have the extra precision problems of the fpu.
	# But be careful about 32-bit multilibs.
	case " $CC " in
	*" -m32 "*)
		libgcj_flags="${libgcj_flags} -ffloat-store" ;;
	esac
	libgcj_flags="${libgcj_flags} -fomit-frame-pointer"
	# On Solaris we have defined 'sun' which later conflicts with 
	# namespace usage. So to work this away we use the below undefine.
	libgcj_flags="${libgcj_flags} -Usun"
	libgcj_cxxflags=
	libgcj_cflags=
	DIVIDESPEC=-fno-use-divide-subroutine
	enable_hash_synchronization_default=yes
	slow_pthread_self=yes
	libgcj_interpreter=yes
	;;
  alpha*-*)
	sysdeps_dir=alpha
	libgcj_flags="${libgcj_flags} -mieee"
	libgcj_interpreter=yes
	enable_hash_synchronization_default=yes
	IEEESPEC=-mieee
	;;
  hppa*-*)
	sysdeps_dir=pa
	libgcj_interpreter=yes
	enable_hash_synchronization_default=no
	;;
  m68k-*)
	sysdeps_dir=m68k
	libgcj_interpreter=yes
	;;
  powerpc64*-*)
	sysdeps_dir=powerpc
	libgcj_interpreter=yes
	if [ x`$CC -print-multi-os-directory` = x../lib64 ]; then
	    libgcj_flags="${libgcj_flags} -mminimal-toc"
	fi
	enable_hash_synchronization_default=yes
	slow_pthread_self=yes
	;;
  powerpc*-*)
	sysdeps_dir=powerpc
	libgcj_interpreter=yes
	enable_hash_synchronization_default=yes
	slow_pthread_self=yes
	;;
  s390*-*)
	sysdeps_dir=s390
	libgcj_interpreter=yes
	DIVIDESPEC=-fno-use-divide-subroutine
	enable_hash_synchronization_default=yes
	;;
  sparc*-*)
	sysdeps_dir=sparc
	# On Solaris we have defined 'sun' which later conflicts with 
	# namespace usage. So to work this away we use the below undefine.
	libgcj_flags="${libgcj_flags} -Usun"
	libgcj_interpreter=yes
        ;;
  ia64-*)
	sysdeps_dir=ia64
        libgcj_flags="${libgcj_flags} -funwind-tables"
	libgcj_interpreter=yes
	enable_hash_synchronization_default=yes
	;;
  sh-* | sh[34]*-*)
	sysdeps_dir=sh
	libgcj_flags="${libgcj_flags} -mieee"
	libgcj_interpreter=yes
	enable_hash_synchronization_default=yes
	IEEESPEC=-mieee
	;;
esac

# This case statement supports generic port properties and may refine
# the above per-CPU defaults.  Note: If your OS implements
# MD_FALLBACK_FRAME_STATE_FOR, then you want to set can_unwind_signal
# here.
case "${host}" in
  i[34567]86*-linux* | \
  powerpc*-linux* | \
  alpha*-linux* | \
  s390*-linux* | \
  sparc*-linux* | \
  ia64-* | \
  x86_64*-linux* | \
  hppa*-linux* | \
  m68k*-linux* | \
  sh-linux* | sh[34]*-linux*)
  	can_unwind_signal=yes
	libgcj_ld_symbolic='-Wl,-Bsymbolic'
	if test x$slow_pthread_self = xyes \
	   && test x$cross_compiling != xyes; then
	  cat > conftest.c <<EOF
#define _GNU_SOURCE 1
#include <pthread.h>
#include <stdlib.h>
#include <sys/resource.h>
#include <limits.h>

void *
tf (void *arg __attribute__ ((unused)))
{
  pthread_attr_t a;
  size_t s;

  if (pthread_getattr_np (pthread_self (), &a)
      || pthread_attr_getstacksize (&a, &s)
      || s > 2 * PTHREAD_STACK_MIN)
    exit (1);
  exit (0);
}

int
main (int argc, char **argv)
{
  pthread_t p;
  void *ret;
  struct rlimit r;

  if (argc == 2)
    {
      r.rlim_cur = 2 * PTHREAD_STACK_MIN;
      r.rlim_max = 2 * PTHREAD_STACK_MIN;
      if (setrlimit (RLIMIT_STACK, &r))
	exit (1);
      execl (argv[1], argv[0], NULL);
      exit (1);
    }

  if (pthread_create (&p, NULL, tf, NULL)
      || pthread_join (p, &ret))
    exit (1);
  exit (1);
}
EOF
	  $CC -o conftest conftest.c -lpthread > /dev/null 2>&1 && \
	  ./conftest ./conftest && slow_pthread_self=
	  rm -f conftest conftest.c
	fi
	;;
  i[34567]86*-kfreebsd*-gnu | x86_64*-kfreebsd*-gnu)
        libgcj_ld_symbolic='-Wl,-Bsymbolic'
        slow_pthread_self=
        ;;
  i[34567]86-*-solaris2.1[0-9]* )
	sysdeps_dir=i386
	DIVIDESPEC=-f%{m32:no-}%{!m32:%{!m64:no-}}%{m64:}use-divide-subroutine
	;;
  x86_64-*-solaris2.1[0-9]* )
	sysdeps_dir=i386
	DIVIDESPEC=-f%{m32:no-}use-divide-subroutine
	;;
  arm*-linux* )
	slow_pthread_self=no
	can_unwind_signal=no
	CHECKREFSPEC=-fcheck-references
	DIVIDESPEC=-fuse-divide-subroutine
	;;
  mips*-*-linux* )
  	sysdeps_dir=mips
  	can_unwind_signal=yes
	DIVIDESPEC=-fno-use-divide-subroutine
	enable_hash_synchronization_default=yes
	;;
  powerpc*-*-darwin*)
	enable_hash_synchronization_default=yes
	slow_pthread_self=
	can_unwind_signal=yes
	;;
  i?86-*-darwin*)
	enable_hash_synchronization_default=yes
	slow_pthread_self=
	can_unwind_signal=no
	;;
  i?86-*-darwin[912]*)
	can_unwind_signal=yes
	DIVIDESPEC=-f%{m32:no-}%{!m32:%{!m64:no-}}%{m64:}use-divide-subroutine
        ;;
  x86_64-*-darwin[912]*)
	enable_hash_synchronization_default=yes
	slow_pthread_self=
	can_unwind_signal=yes
	DIVIDESPEC=-fuse-divide-subroutine
	CHECKREFSPEC=-fcheck-references
	;;
  i?86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
	can_unwind_signal=yes
	;;
  *-*-freebsd*)
	slow_pthread_self=
	;;
  *-mingw*)
        libgcj_flags="${libgcj_flags} -fno-omit-frame-pointer"
  	# FIXME: win32_exception_handler( ) in win32.cc does not do the
	# right stuff yet w.r.t. SEH. Live with the following for now.
	can_unwind_signal=no
	CHECKREFSPEC=-fcheck-references
	DIVIDESPEC=-fuse-divide-subroutine
	;;
  *-cygwin*)
  	# The cygwin linker doesn't do 8-byte alignment by default, so
	# disable hash synchronization for now.
	enable_hash_synchronization_default=no
	slow_pthread_self=
	;;
  hppa*-hp-hpux11.*)
	slow_pthread_self=no
	can_unwind_signal=yes
	DIVIDESPEC=-fuse-divide-subroutine
	;;
  sparc*-sun-solaris2.*)
	slow_pthread_self=
	can_unwind_signal=yes
	;;
esac

case "${host}" in
  *-cygwin* | *-mingw*)
	fallback_backtrace_h=sysdep/i386/backtrace.h  
	# We need a frame pointer on Windows, so override BACKTRACESPEC
  	BACKTRACESPEC=
	# Win32 DLLs are limited to 64k exported symbols each.
	enable_libgcj_sublibs_default=yes
	libgcj_sublib_ltflags='$(lt_host_flags) \
	    -Wl,-u,__ZN3org4ietf4jgss10GSSManagerC1Ev,-L..,-lgcj-noncore-dummy'
	libgcj_sublib_core_extra_deps=libgcj-noncore-dummy.dll.a
  ;;
esac

case "${host}" in
  ia64-*)
	descriptor_h=sysdep/descriptor-y.h
	;;

  hppa*64*-*-hpux*)
	descriptor_h=sysdep/pa/descriptor-pa64-hpux.h
	;;

  hppa*-*-hpux*)
	descriptor_h=sysdep/pa/descriptor-pa32-hpux.h
	;;

  hppa*-*)
	descriptor_h=sysdep/pa/descriptor.h
	;;

  rs6000-* | powerpc*-*)
	descriptor_h=sysdep/powerpc/descriptor.h
	;;

  *)
	descriptor_h=sysdep/descriptor-n.h
	;;
esac

case "${host}" in
  *linux*|*-kfreebsd*-gnu|*-gnu*)
    use_libgcj_bc=yes
  ;;
  *)
    use_libgcj_bc=no
  ;;
esac    

libgcj_cflags="${libgcj_cflags} ${libgcj_flags}"
libgcj_cxxflags="${libgcj_cxxflags} ${libgcj_flags}"
libgcj_javaflags="${libgcj_javaflags} ${libgcj_flags}"
