# configure.host
#
# This shell script handles all host based configuration for libffi.
#

# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
# Most of the time we can define all the variables all at once...
case "${host}" in
  aarch64*-*-*)
	TARGET=AARCH64; TARGETDIR=aarch64
	SOURCES="ffi.c sysv.S"
	;;

  alpha*-*-*)
	TARGET=ALPHA; TARGETDIR=alpha;
	# Support 128-bit long double, changeable via command-line switch.
	HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)'
	SOURCES="ffi.c osf.S"
	;;

  arc*-*-*)
	TARGET=ARC; TARGETDIR=arc
	SOURCES="ffi.c arcompact.S"
	;;

  arm*-*-*)
	TARGET=ARM; TARGETDIR=arm
	SOURCES="ffi.c sysv.S"
	;;

  avr32*-*-*)
	TARGET=AVR32; TARGETDIR=avr32
	SOURCES="ffi.c sysv.S"
	;;

  bfin*)
	TARGET=BFIN; TARGETDIR=bfin
	SOURCES="ffi.c sysv.S"
	;;

  cris-*-*)
	TARGET=LIBFFI_CRIS; TARGETDIR=cris
	SOURCES="ffi.c sysv.S"
	;;

  frv-*-*)
	TARGET=FRV; TARGETDIR=frv
	SOURCES="ffi.c eabi.S"
	;;

  hppa*-*-linux* | parisc*-*-linux* | hppa*-*-openbsd*)
	TARGET=PA_LINUX; TARGETDIR=pa
	SOURCES="ffi.c linux.S"
	;;
  hppa*64-*-hpux*)
	TARGET=PA64_HPUX; TARGETDIR=pa
	;;
  hppa*-*-hpux*)
	TARGET=PA_HPUX; TARGETDIR=pa
	SOURCES="ffi.c hpux32.S"
	;;

  i?86-*-freebsd* | i?86-*-openbsd*)
	TARGET=X86_FREEBSD; TARGETDIR=x86
	;;

  i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix* \
  | x86_64-*-cygwin* | x86_64-*-mingw*)
	TARGETDIR=x86
	if test $ac_cv_sizeof_size_t = 4; then
	  TARGET=X86_WIN32
	else
	  TARGET=X86_WIN64
	fi
	# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
	# We must also check with_cross_host to decide if this is a native
	# or cross-build and select where to install dlls appropriately.
	if test -n "$with_cross_host" &&
	   test x"$with_cross_host" != x"no"; then
	  AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
	else
	  AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
	fi
	;;

  i?86-*-darwin* | x86_64-*-darwin*)
	TARGETDIR=x86
	if test $ac_cv_sizeof_size_t = 4; then
	  TARGET=X86_DARWIN
	else
	  TARGET=X86_64_DARWIN
	fi
	;;

  i?86-*-* | x86_64-*-* | amd64-*)
	TARGETDIR=x86
	if test $ac_cv_sizeof_size_t = 4; then
	  case "$host" in
	    *-gnux32)
	      TARGET=X86_64
	      ;;
	    *)
	      TARGET=X86
	      ;;
          esac
	else
	  TARGET=X86_64;
	fi
	;;

  ia64*-*-*)
	TARGET=IA64; TARGETDIR=ia64
	SOURCES="ffi.c unix.S"
	;;

  m32r*-*-*)
	TARGET=M32R; TARGETDIR=m32r
	SOURCES="ffi.c sysv.S"
	;;

  m68k-*-*)
	TARGET=M68K; TARGETDIR=m68k
	SOURCES="ffi.c sysv.S"
	;;

  m88k-*-*)
	TARGET=M88K; TARGETDIR=m88k
	SOURCES="ffi.c obsd.S"
	;;

  microblaze*-*-*)
	TARGET=MICROBLAZE; TARGETDIR=microblaze
	SOURCES="ffi.c sysv.S"
	;;

  moxie-*-*)
	TARGET=MOXIE; TARGETDIR=moxie
	SOURCES="ffi.c eabi.S"
	;;

  metag-*-*)
	TARGET=METAG; TARGETDIR=metag
	SOURCES="ffi.c sysv.S"
	;;

  mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*)
	TARGET=MIPS; TARGETDIR=mips
	;;
  mips*-*linux* | mips*-*-openbsd*)
	# Support 128-bit long double for NewABI.
	HAVE_LONG_DOUBLE='defined(__mips64)'
	TARGET=MIPS; TARGETDIR=mips
	;;

  nios2*-linux*)
	TARGET=NIOS2; TARGETDIR=nios2
	SOURCES="ffi.c sysv.S"
	;;

  or1k*-linux*)
	TARGET=OR1K; TARGETDIR=or1k
	SOURCES="ffi.c sysv.S"
	;;

  powerpc*-*-linux* | powerpc-*-sysv*)
	TARGET=POWERPC; TARGETDIR=powerpc
	HAVE_LONG_DOUBLE_VARIANT=1
	;;
  powerpc-*-amigaos*)
	TARGET=POWERPC; TARGETDIR=powerpc
	;;
  powerpc-*-beos*)
	TARGET=POWERPC; TARGETDIR=powerpc
	;;
  powerpc-*-darwin* | powerpc64-*-darwin*)
	TARGET=POWERPC_DARWIN; TARGETDIR=powerpc
	;;
  powerpc-*-aix* | rs6000-*-aix*)
	TARGET=POWERPC_AIX; TARGETDIR=powerpc
	;;
  powerpc-*-freebsd* | powerpc-*-openbsd*)
	TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
	HAVE_LONG_DOUBLE_VARIANT=1
	;;
  powerpc64-*-freebsd*)
	TARGET=POWERPC; TARGETDIR=powerpc
	;;
  powerpc*-*-rtems*)
	TARGET=POWERPC; TARGETDIR=powerpc
	;;

  s390-*-* | s390x-*-*)
	TARGET=S390; TARGETDIR=s390
	SOURCES="ffi.c sysv.S"
	;;

  sh-*-* | sh[[34]]*-*-*)
	TARGET=SH; TARGETDIR=sh
	SOURCES="ffi.c sysv.S"
	;;
  sh64-*-* | sh5*-*-*)
	TARGET=SH64; TARGETDIR=sh64
	SOURCES="ffi.c sysv.S"
	;;

  sparc*-*-*)
	TARGET=SPARC; TARGETDIR=sparc
	SOURCES="ffi.c ffi64.c v8.S v9.S"
	;;

  tile*-*)
        TARGET=TILE; TARGETDIR=tile
	SOURCES="ffi.c tile.S"
        ;;

  vax-*-*)
	TARGET=VAX; TARGETDIR=vax
	SOURCES="ffi.c elfbsd.S"
	;;

  xtensa*-*)
	TARGET=XTENSA; TARGETDIR=xtensa
	SOURCES="ffi.c sysv.S"
	;;
esac

# ... but some of the cases above share configury.
case "${TARGET}" in
  MIPS)
	SOURCES="ffi.c o32.S n32.S"
	;;
  POWERPC)
	SOURCES="ffi.c ffi_sysv.c ffi_linux64.c sysv.S ppc_closure.S"
	SOURCES="${SOURCES} linux64.S linux64_closure.S"
	;;
  POWERPC_AIX)
	SOURCES="ffi_darwin.c aix.S aix_closure.S"
	;;
  POWERPC_DARWIN)
	SOURCES="ffi_darwin.c darwin.S darwin_closure.S"
	;;
  POWERPC_FREEBSD)
	SOURCES="ffi.c ffi_sysv.c sysv.S ppc_closure.S"
	;;
  X86 | X86_FREEBSD | X86_WIN32)
	SOURCES="ffi.c sysv.S"
	;;
  X86_64)
	SOURCES="ffi64.c unix64.S"
	;;
  X86_WIN64)
	SOURCES="ffiw64.c win64.S"
	;;
  X86_DARWIN)
	SOURCES="darwin_c.c darwin.S"
	;;
  X86_64_DARWIN)
	SOURCES="darwin64_c.c darwin64.S"
	;;
esac

# If we failed to configure SOURCES, we can't do anything.
if test -z "${SOURCES}"; then
  UNSUPPORTED=1
fi
