# 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
  aarch64*-linux*)
	libgcj_interpreter=yes
	sysdeps_dir=aarch64
	ATOMICSPEC=-fuse-atomic-builtins
	;;
  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
	;;
  aarch64*-linux* )
	slow_pthread_self=no
	can_unwind_signal=no
	CHECKREFSPEC=-fcheck-references
	DIVIDESPEC=-fuse-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=
	can_unwind_signal=yes
	DIVIDESPEC=-fuse-divide-subroutine
	;;
  *-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
  x86_64-*-cygwin* | x86_64-*-mingw*)
	# 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
  ;;
  *-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}"
