# libgcc host-specific configuration file.
# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
# 2008, 2009 Free Software Foundation, Inc.

#This file is part of GCC.

#GCC is free software; you can redistribute it and/or modify it under
#the terms of the GNU General Public License as published by the Free
#Software Foundation; either version 3, or (at your option) any later
#version.

#GCC is distributed in the hope that it will be useful, but WITHOUT
#ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
#FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
#for more details.

#You should have received a copy of the GNU General Public License
#along with GCC; see the file COPYING3.  If not see
#<http://www.gnu.org/licenses/>.

# This is the libgcc host-specific configuration file
# where a configuration type is mapped to different system-specific
# definitions and files.  This is invoked by the autoconf-generated
# configure script.  Putting it in a separate shell file lets us skip
# running autoconf when modifying host-specific information.

# This file bears an obvious resemblance to gcc/config.gcc.  The cases
# should be kept similar, to ease moving library-specific settings
# from config.gcc to this file.  That is also why tmake_file is
# left as tmake_file, rather than hmake_file, even though this library
# switches on ${host}.

# This file switches on the shell variable ${host}, and also uses the
# following shell variables:
#
#  with_*		Various variables as set by configure.

# This file sets the following shell variables for use by the
# autoconf-generated configure script:
#
#  asm_hidden_op	The assembler pseudo-op to use for hide
#			lists for object files implemented in
#			assembly (with -fvisibility=hidden for C).
#			The default is ".hidden".
#  cpu_type		The name of the cpu, if different from the first
#			chunk of the canonical host name.
#  extra_parts		List of extra object files that should be compiled
#			for this target machine.  This may be overridden
#			by setting EXTRA_PARTS in a tmake_file fragment.
#			If either is set, EXTRA_PARTS and
#			EXTRA_MULTILIB_PARTS inherited from the GCC
#			subdirectory will be ignored.
#  tmake_file		A list of machine-description-specific
#			makefile-fragments, if different from
#			"$cpu_type/t-$cpu_type".

asm_hidden_op=.hidden
extra_parts=
tmake_file=

# Set default cpu_type so it can be updated in each machine entry.
cpu_type=`echo ${host} | sed 's/-.*$//'`
case ${host} in
m32c*-*-*)
        cpu_type=m32c
        ;;
alpha*-*-*)
	cpu_type=alpha
	;;
am33_2.0-*-linux*)
	cpu_type=mn10300
	;;
arm*-*-*)
	cpu_type=arm
	;;
avr-*-*)
	cpu_type=avr
	;;    
bfin*-*)
	cpu_type=bfin
	;;
fido-*-*)
	cpu_type=m68k
	;;
frv*)	cpu_type=frv
	;;
i[34567]86-*-*)
	cpu_type=i386
	;;
x86_64-*-*)
	cpu_type=i386
	;;
ia64-*-*)
	;;
hppa*-*-*)
	cpu_type=pa
	;;
m32r*-*-*)
        cpu_type=m32r
        ;;
m68k-*-*)
	;;
mips*-*-*)
	cpu_type=mips
	;;
powerpc*-*-*)
	cpu_type=rs6000
	;;
rs6000*-*-*)
	;;
score*-*-*)
	cpu_type=score
	;;
sparc64*-*-*)
	cpu_type=sparc
	;;
sparc*-*-*)
	cpu_type=sparc
	;;
spu*-*-*)
	cpu_type=spu
	;;
s390*-*-*)
	cpu_type=s390
	;;
# Note the 'l'; we need to be able to match e.g. "shle" or "shl".
sh[123456789lbe]*-*-*)
	cpu_type=sh
	;;
esac

# Common parts for widely ported systems.
case ${host} in
*-*-darwin*)
  asm_hidden_op=.private_extern
  tmake_file="t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin"
  ;;
*-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
  # This is the place-holder for the generic a.out configuration
  # of FreeBSD.  No actual configuration resides here since
  # there was only ever a bare-bones ix86 configuration for
  # a.out and it exists solely in the machine-specific section.
  # This place-holder must exist to avoid dropping into
  # the generic ELF configuration of FreeBSD (i.e. it must be
  # ordered before that section).
  ;;
*-*-freebsd*)
  # This is the generic ELF configuration of FreeBSD.  Later
  # machine-specific sections may refine and add to this
  # configuration.
  ;;
*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu*)
  extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
  ;;
*-*-netbsd*)
  ;;
*-*-openbsd*)
  ;;
*-*-rtems*)
  ;;
*-*-vxworks*)
  ;;
*-*-elf)
  ;;
esac

case ${host} in
# Support site-specific machine types.
*local*)
	rest=`echo ${host} | sed -e "s/$cpu_type-//"`
	if test -f $srcdir/config/${cpu_type}/t-$rest
	then tmake_file=${cpu_type}/t-$rest
	fi
	;;
alpha*-*-linux* | alpha*-*-gnu*)
	tmake_file="${tmake_file} alpha/t-crtfm"
	extra_parts="$extra_parts crtfastmath.o"
	;;
alpha*-*-freebsd*)
	;;
alpha*-*-netbsd*)
	;;
alpha*-*-openbsd*)
	;;
alpha*-dec-osf[45]*)
	;;
alpha64-dec-*vms*)
	;;
alpha*-dec-*vms*)
	;;
arc-*-elf*)
	;;
arm-*-coff* | armel-*-coff*)
	;;
arm-semi-aof | armel-semi-aof)
	;;
arm-wrs-vxworks)
	;;
arm*-*-freebsd*)
	;;
arm*-*-netbsdelf*)
	;;
arm*-*-netbsd*)
	;;
arm*-*-linux*)			# ARM GNU/Linux with ELF
	;;
arm*-*-uclinux*)		# ARM ucLinux
	;;
arm*-*-ecos-elf)
	;;
arm*-*-eabi* | arm*-*-symbianelf* )
	;;
arm*-*-rtems*)
	;;
arm*-*-elf)
	;;
arm*-wince-pe*)
	;;
arm-*-pe*)
	;;
avr-*-rtems*)
	;;
avr-*-*)
    # Make HImode functions for AVR
    tmake_file=${cpu_type}/t-avr
	;;
bfin*-elf*)
        ;;
bfin*-uclinux*)
        ;;
bfin*-linux-uclibc*)
	# No need to build crtbeginT.o on uClibc systems.  Should probably
	# be moved to the OS specific section above.
	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
	;;
bfin*-*)
        ;;
crisv32-*-elf | crisv32-*-none | cris-*-elf | cris-*-none)
	extra_parts="crtbegin.o crtend.o"
	;;
cris-*-linux* | crisv32-*-linux*)
	;;
crx-*-elf)
	;;
fido-*-elf)
	;;
fr30-*-elf)
	;;
frv-*-elf)
	;;
frv-*-*linux*)
	;;
h8300-*-rtems*)
	;;
h8300-*-elf*)
	;;
h8300-*-*)
	;;
hppa*64*-*-linux*)
	;;
hppa*-*-linux*)
	;;
hppa[12]*-*-hpux10*)
	;;
hppa*64*-*-hpux11*)
	;;
hppa[12]*-*-hpux11*)
	;;
i[34567]86-*-darwin*)
	;;
x86_64-*-darwin*)
	tmake_file="t-darwin ${cpu_type}/t-darwin64 t-slibgcc-darwin"
	;;
i[34567]86-*-elf*)
	;;
x86_64-*-elf*)
	;;
i[34567]86-*-aout*)
	;;
i[34567]86-*-freebsd*)
	;;
x86_64-*-freebsd*)
	;;
i[34567]86-*-netbsdelf*)
	;;
i[34567]86-*-netbsd*)
	;;
x86_64-*-netbsd*)
	;;
i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123])
	;;
i[34567]86-*-openbsd*)
	;;
i[34567]86-*-coff*)
	;;
i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i[34567]86-*-gnu*)
	extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
	tmake_file="${tmake_file} i386/t-crtpc i386/t-crtfm"
	;;
x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
	extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
	tmake_file="${tmake_file} i386/t-crtpc i386/t-crtfm"
	;;
i[34567]86-pc-msdosdjgpp*)
	;;
i[34567]86-*-lynxos*)
	;;
i[3456x]86-*-netware*)
	case /${with_ld} in
	*/nwld)
	 	tmake_file="${tmake_file} i386/t-nwld"
		;;
	esac
	;;
i[34567]86-*-nto-qnx*)
	;;
i[34567]86-*-rtems*)
	;;
i[34567]86-*-solaris2*)
	tmake_file="${tmake_file} i386/t-sol2"
	case ${host} in
	*-*-solaris2.1[0-9]*)
		# Solaris 2.10 provides crt1.o, crti.o, crtn.o, and gcrt1.o as
		# part of the base system.
		extra_parts="gmon.o crtbegin.o crtend.o"
		;;
	*)
		extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
		;;
	esac
	;;
i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae)
	;;
i[34567]86-*-pe)
	;;
i[34567]86-*-cygwin* | i[34567]86-*-mingw*)
	extra_parts="crtbegin.o crtend.o crtfastmath.o"
	tmake_file="i386/t-cygming i386/t-crtfm"
	;;
x86_64-*-mingw*)
	;;
i[34567]86-*-interix3*)
	;;
ia64*-*-elf*)
	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
	tmake_file="ia64/t-ia64"
	;;
ia64*-*-freebsd*)
	;;
ia64*-*-linux*)
	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
	tmake_file="ia64/t-ia64 t-softfp ia64/t-fprules-softfp ia64/t-softfp-compat"
	;;
ia64*-*-hpux*)
	;;
iq2000*-*-elf*)
        ;;
m32r-*-elf*|m32r-*-rtems*)
 	;;
m32rle-*-elf*)
	;;
m32r-*-linux*)
 	;;
m32rle-*-linux*)
	;;
m68hc11-*-*|m6811-*-*)
        ;;
m68hc12-*-*|m6812-*-*)
        ;;
m68k-*-aout*)
	;;
m68k-*-coff*)
	;;
m68k-*-elf*)
	;;
m68k*-*-netbsdelf*)
	;;
m68k*-*-openbsd*)
	;;
m68k-*-uclinux*)		# Motorola m68k/ColdFire running uClinux with uClibc
	;;
m68k-*-linux*)		# Motorola m68k's running GNU/Linux
				# with ELF format using glibc 2
				# aka the GNU/Linux C library 6.
	;;
m68k-*-rtems*)
	;;
mcore-*-elf)
	;;
mcore-*-pe*)
	;;
mips-sgi-irix[56]*)
	;;
mips*-*-netbsd*)			# NetBSD/mips, either endian.
	;;
mips64*-*-linux*)
	;;
mips*-*-linux*)				# Linux MIPS, either endian.
	;;
mips*-*-openbsd*)
	;;
mipsisa32-*-elf* | mipsisa32el-*-elf*)
	;;
mipsisa32r2-*-elf* | mipsisa32r2el-*-elf*)
	;;
mipsisa64-*-elf* | mipsisa64el-*-elf*)
	;;
mipsisa64r2-*-elf* | mipsisa64r2el-*-elf*)
	;;
mipsisa64sr71k-*-elf*)
        ;;
mipsisa64sb1-*-elf* | mipsisa64sb1el-*-elf*)
	;;
mips-*-elf* | mipsel-*-elf*)
	;;
mips64-*-elf* | mips64el-*-elf*)
	;;
mips64vr-*-elf* | mips64vrel-*-elf*)
        ;;
mips64orion-*-elf* | mips64orionel-*-elf*)
	;;
mips*-*-rtems*)
	;;
mips-wrs-vxworks)
	;;
mipstx39-*-elf* | mipstx39el-*-elf*)
	;;
mmix-knuth-mmixware)
	;;
mn10300-*-*)
	;;
pdp11-*-bsd)
        ;;
pdp11-*-*)
	;;
picochip-*-*)
        ;;
powerpc64-*-linux*)
	tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128 t-softfp"
	;;
powerpc64-*-gnu*)
	tmake_file="${tmake_file} rs6000/t-ldbl128 t-softfp"
	;;
powerpc-*-darwin*)
	;;
powerpc64-*-darwin*)
	;;
powerpc*-*-freebsd*)
	;;
powerpc-*-netbsd*)
	;;
powerpc-*-eabispe*)
	;;
powerpc-*-eabisimaltivec*)
	;;
powerpc-*-eabisim*)
	;;
powerpc-*-elf*)
	;;
powerpc-*-eabialtivec*)
	;;
powerpc-*-eabi*)
	;;
powerpc-*-rtems*)
	;;
powerpc-*-linux*altivec*)
	tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128"
	;;
powerpc-*-linux*spe*)
	tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128 t-softfp"
	;;
powerpc-*-linux*)
	tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128 t-softfp"
	;;
powerpc-*-gnu-gnualtivec*)
	tmake_file="${tmake_file} rs6000/t-ldbl128"
	;;
powerpc-*-gnu*)
	tmake_file="${tmake_file} rs6000/t-ldbl128"
	;;
powerpc-wrs-vxworks|powerpc-wrs-vxworksae)
	;;
powerpc-*-lynxos*)
	;;
powerpcle-*-elf*)
	;;
powerpcle-*-eabisim*)
	;;
powerpcle-*-eabi*)
	;;
rs6000-ibm-aix4.[12]* | powerpc-ibm-aix4.[12]*)
	;;
rs6000-ibm-aix4.[3456789]* | powerpc-ibm-aix4.[3456789]*)
	;;
rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1.*)
	;;
rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
	;;
s390-*-linux*)
	;;
s390x-*-linux*)
	;;
s390x-ibm-tpf*)
	;;
score-*-elf)
        ;;
sh-*-elf* | sh[12346l]*-*-elf* | \
sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
  sh-*-linux* | sh[2346lbe]*-*-linux* | \
  sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
   sh64-*-netbsd* | sh64l*-*-netbsd*)
	case ${host} in
	sh*-*-linux*)
		tmake_file="${tmake_file} sh/t-linux"
		;;
	esac
	;;
sh-*-rtems*)
	;;
sh-wrs-vxworks)
	;;
sh-*-*)
	;;
sparc-*-netbsdelf*)
	;;
sparc64-*-openbsd*)
	;;
sparc-*-elf*)
	;;
sparc-*-linux*)		# SPARC's running GNU/Linux, libc6
	extra_parts="$extra_parts crtfastmath.o"
	tmake_file="${tmake_file} sparc/t-crtfm"
	;;
sparc-*-rtems*)
	;;
sparc64-*-solaris2* | sparcv9-*-solaris2*)
	;;
sparc-*-solaris2*)
	;;
sparc64-*-elf*)
	;;
sparc-wrs-vxworks)
	;;
sparc64-*-freebsd*|ultrasparc-*-freebsd*)
	;;
sparc64-*-linux*)		# 64-bit SPARC's running GNU/Linux
	extra_parts="$extra_parts crtfastmath.o"
	tmake_file="${tmake_file} sparc/t-crtfm"
	;;
sparc64-*-netbsd*)
	;;
spu-*-elf*)
	;;
v850e1-*-*)
	;;
v850e-*-*)
	;;
v850-*-*)
	;;
vax-*-netbsdelf*)
	;;
vax-*-netbsd*)
	;;
vax-*-openbsd*)
	;;
xstormy16-*-elf)
	;;
xtensa*-*-elf*)
	;;
xtensa*-*-linux*)
	;;
am33_2.0-*-linux*)
	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
	;;
m32c-*-elf*|m32c-*-rtems*)
 	;;
*)
	echo "*** Configuration ${host} not supported" 1>&2
	exit 1
	;;
esac

case ${host} in
i[34567]86-*-linux* | x86_64-*-linux* | \
  i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | \
  i[34567]86-*-gnu*)
	tmake_file="${tmake_file} t-tls"
	;;
esac

case ${host} in
i[34567]86-*-darwin* | x86_64-*-darwin* | \
  i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
  i[34567]86-*-linux* | x86_64-*-linux*)
	if test "${host_address}" = 32; then
		tmake_file="${tmake_file} t-softfp i386/${host_address}/t-fprules-softfp"
	fi
	;;
esac

case ${host} in
i[34567]86-*-linux* | x86_64-*-linux*)
	# Provide backward binary compatibility for 64bit Linux/x86.
	if test "${host_address}" = 64; then
		tmake_file="${tmake_file} i386/${host_address}/t-softfp-compat"
	fi
	;;
esac
