# 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

    *-*-linux*)
	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

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

    arm*-*-linux*)
	config_path="linux/arm 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"
	;;

    # 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 "*)
	    ;;
	  *)
	    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
	;;

  *-*-ros*)
	config_path="ros 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"
	;;

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

esac
