# This is the target specific configuration file.  This is invoked by the
# autoconf generated configure script.  Putting it in a separate shell file
# lets us skip running autoconf when modifying target specific information.

# This file switches on the shell variable ${target}, and sets the
# following shell variables:
#  config_path		An ordered list of directories to search for
#			sources and headers.  This is relative to the
#			config subdirectory of the source tree.
#  XCFLAGS		Add extra compile flags to use.
#  XLDFLAGS		Add extra link flags to use.

# Optimize TLS usage by avoiding the overhead of dynamic allocation.
if test $gcc_cv_have_tls = yes ; then
  case "${target}" in

    *-*-k*bsd*-gnu*)
	;;

    *-*-linux* | *-*-gnu*)
	XCFLAGS="${XCFLAGS} -ftls-model=initial-exec"
	;;

    *-*-rtems*)
	XCFLAGS="${XCFLAGS} -ftls-model=local-exec"
	;;
  esac
fi

# Since we require POSIX threads, assume a POSIX system by default.
config_path="posix"

# Check for futex enabled all at once.
if test x$enable_linux_futex = xyes; then
  case "${target}" in

    aarch64*-*-linux*)
	config_path="linux posix"
	;;

    alpha*-*-linux*)
	config_path="linux/alpha linux posix"
	;;

    arm*-*-linux*)
	config_path="linux posix"
	;;

    ia64*-*-linux*)
	config_path="linux/ia64 linux posix"
	;;

    mips*-*-linux*)
	config_path="linux/mips linux posix"
	;;

    powerpc*-*-linux*)
	config_path="linux/powerpc linux posix"
	;;

    s390*-*-linux*)
	config_path="linux/s390 linux posix"
	;;

    tile*-*-linux*)
	config_path="linux/tile linux posix"
	;;

    # Note that bare i386 is not included here.  We need cmpxchg.
    i[456]86-*-linux*)
	config_path="linux/x86 linux posix"
	case " ${CC} ${CFLAGS} " in
	  *" -m64 "*|*" -mx32 "*)
	    ;;
	  *)
	    if test -z "$with_arch"; then
	      XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
	    fi
	esac
	;;

    # Similar jiggery-pokery for x86_64 multilibs, except here we
    # can't rely on the --with-arch configure option, since that
    # applies to the 64-bit side.
    x86_64-*-linux*)
	config_path="linux/x86 linux posix"
	case " ${CC} ${CFLAGS} " in
	  *" -m32 "*)
	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
	    ;;
	esac
	;;

    # Note that sparcv7 and sparcv8 is not included here.  We need cas.
    sparcv9-*-linux* | sparc64-*-linux*)
	echo "int i;" > conftestx.c
	if ${CC} ${CFLAGS} -c -o conftestx.o conftestx.c > /dev/null 2>&1; then
	  config_path="linux/sparc linux posix"
	  case "`/usr/bin/file conftestx.o`" in
	    *32-bit*)
	      case " ${CC} ${CFLAGS}" in
		*" -mcpu=ultrasparc"*)
		  ;;
		*)
		  XCFLAGS="${XCFLAGS} -mcpu=v9"
		  ;;
	      esac
	      ;;
	  esac
	fi
	rm -f conftestx.c conftestx.o
	;;
  esac
fi

# Other system configury
case "${target}" in

  *-*-hpux*)
	config_path="hpux posix"
	case "${target}" in
	  *-*-hpux11*)
	     # HPUX v11.x requires -lrt to resolve sem_init in libgomp.la
	     XLDFLAGS="${XLDFLAGS} -lrt"
	     ;;
	esac
	case "${target}" in
	  hppa[12]*-*-hpux*)
	    # PA 32 HP-UX needs -frandom-seed for bootstrap compare.
	    XCFLAGS="${XCFLAGS} -frandom-seed=fixed-seed"
	    ;;
	esac
	;;

  *-*-mingw32*)
	config_path="mingw32 posix"
	;;

  *-*-darwin*)
	config_path="bsd darwin posix"
	;;

  *-*-freebsd*)
	# Need to link with -lpthread so libgomp.so is self-contained.
	XLDFLAGS="${XLDFLAGS} -lpthread"
	;;

  *-*-aix*)
	config_path="posix"
	# Need to link with -lpthread so libgomp.so is self-contained.
	XLDFLAGS="${XLDFLAGS} -lpthread"
	# AIX needs -frandom-seed for bootstrap compare.
	XCFLAGS="${XCFLAGS} -frandom-seed=\$@"
	;;

  nvptx*-*-*)
	config_path="nvptx"
	;;

  *-*-rtems*)
	# Use self-contained synchronization objects if provided by Newlib
	if test "x$ac_cv_type_struct__Mutex_Control" = xyes ; then
	    config_path="rtems posix"
	fi
	;;

  *)
	;;

esac
