# 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"
	;;
  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 $enable_linux_futex = yes; 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=i686"
	    ;;
	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*)
	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
	;;

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

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

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

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

  *)
	;;

esac
