# 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_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.
#   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_interpreter=
enable_java_net_default=yes
enable_hash_synchronization_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=

# This case statement supports per-CPU defaults.
case "${host}" in
  arm*-elf | strongarm*-elf | xscale*-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
	;;
  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
	;;
  mipsel-*|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"
	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=x86-64
	# 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"
	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
	;;
  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*-*)
	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* | \
  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=x86-64
	DIVIDESPEC=-f%{m32:no-}%{!m32:%{!m64:no-}}%{m64:}use-divide-subroutine
	;;
  mips*-*-linux* )
  	sysdeps_dir=mips
  	can_unwind_signal=yes
	DIVIDESPEC=-fno-use-divide-subroutine
	case "${host}" in
	    mipsel*-linux* | mipsisa32el*-linux*)
		enable_hash_synchronization_default=yes
	    ;;
	esac
	;;
  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
	;;
  *-*-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
	;;
esac

case "${host}" in
  *-cygwin* | *-mingw*)
	fallback_backtrace_h=sysdep/i386/backtrace.h  
	# We need a frame pointer on Windows, so override BACKTRACESPEC
  	BACKTRACESPEC=
  ;;
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)
    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}"
