# 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.
#  tmake_file		A list of machine-description-specific
#			makefile fragments.

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

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

    *-*-musl*)
	;;

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

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

tmake_file=
# 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"
	;;

    riscv64*-*-linux*)
	config_path="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* | x86_64-*-linux*)
	config_path="linux/x86 linux posix"
	cat > conftestx.c <<EOF
#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
#error need -march=i486
#endif
EOF
	if ${CC} ${CFLAGS} -E conftestx.c > /dev/null 2>&1; then
	  :
	else
	  if test "${target_cpu}" = x86_64; then
	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
	  else
	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
	  fi
	fi
	rm -f conftestx.c
	;;

    # 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=\$@"
	# Create AIX-style "FAT" libraries.
	tmake_file="t-aix"
	;;

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

  *-*-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
	;;

  amdgcn*-*-*)
	config_path="gcn accel"

	#TODO PR101484
	XCFLAGS="$XCFLAGS -Wno-error=array-bounds"
	;;

  *)
	;;

esac
