# libgcc host-specific configuration file.
# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
# 2008, 2009, 2010 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
	;;
moxie*)	cpu_type=moxie
	;;
i[34567]86-*-*)
	cpu_type=i386
	;;
x86_64-*-*)
	cpu_type=i386
	;;
ia64-*-*)
	;;
hppa*-*-*)
	cpu_type=pa
	;;
lm32*-*-*)
	cpu_type=lm32
	;;
m32r*-*-*)
        cpu_type=m32r
        ;;
m68k-*-*)
	;;
mep*-*-*)
	;;
microblaze*-*-*)
	cpu_type=microblaze
	;;
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-osf5.1*)
	;;
alpha64-dec-*vms*)
	tmake_file="vms/t-vms vms/t-vms64 alpha/t-vms"
	;;
alpha*-dec-*vms*)
	tmake_file="vms/t-vms alpha/t-vms"
	;;
arc-*-elf*)
	;;
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*)
	;;
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-*-freebsd*)
	tmake_file="${tmake_file} i386/t-freebsd"
	;;
x86_64-*-freebsd*)
	tmake_file="${tmake_file} i386/t-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-*-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*)
	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
	tmake_file="ia64/t-ia64"
	;;
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*)
	;;
ia64-hp-*vms*)
	tmake_file="vms/t-vms vms/t-vms64 ia64/t-vms"
	;;
iq2000*-*-elf*)
        ;;
lm32-*-elf*|lm32-*-rtems*)
        extra_parts="crtbegin.o crtend.o crti.o crtn.o"
        tmake_file="lm32/t-lm32 lm32/t-elf t-softfp"
	;;
lm32-*-uclinux*)
        extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
        tmake_file="lm32/t-lm32 lm32/t-uclinux t-softfp"
	;;	
m32r-*-elf*|m32r-*-rtems*)
 	;;
m32rle-*-elf*)
	;;
m32r-*-linux*)
 	;;
m32rle-*-linux*)
	;;
m68hc11-*-*|m6811-*-*)
        ;;
m68hc12-*-*|m6812-*-*)
        ;;
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*)
	;;
microblaze*-*-*)
        tmake_file="microblaze/t-microblaze"
	;;
mips-sgi-irix[56]*)
	;;
mips*-*-netbsd*)			# NetBSD/mips, either endian.
	;;
mips64*-*-linux*)
	extra_parts="$extra_parts crtfastmath.o"
	tmake_file="{$tmake_file} mips/t-crtfm"
	;;
mips*-*-linux*)				# Linux MIPS, either endian.
	extra_parts="$extra_parts crtfastmath.o"
	tmake_file="{$tmake_file} mips/t-crtfm"
	;;
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)
	extra_parts="crti.o crtn.o crtbegin.o crtend.o"
	tmake_file="${tmake_file} ${cpu_type}/t-${cpu_type}"
	;;
mn10300-*-*)
	;;
moxie-*-*)
	tmake_file="moxie/t-moxie moxie/t-moxie-softfp"
	extra_parts="crtbegin.o crtend.o crti.o crtn.o"
	;;
pdp11-*-*)
	;;
picochip-*-*)
        ;;
powerpc-*-darwin*)
	;;
powerpc64-*-darwin*)
	;;
powerpc-*-freebsd*)
	tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-freebsd t-softfp"
	;;
powerpc-*-netbsd*)
	;;
powerpc-*-eabispe*)
	tmake_file="${tmake_file} rs6000/t-ppccomm"
	;;
powerpc-*-eabisimaltivec*)
	;;
powerpc-*-eabisim*)
	;;
powerpc-*-elf*)
	;;
powerpc-*-eabialtivec*)
	;;
powerpc-*-eabi*)
	tmake_file="${tmake_file} rs6000/t-ppccomm"
	;;
powerpc-*-rtems*)
	;;
powerpc-*-linux* | 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-*-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.[3456789]* | powerpc-ibm-aix4.[3456789]*)
	;;
rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1.*)
	;;
rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
	;;
rx-*-elf)
	extra_parts="crtbegin.o crtend.o"
	tmake_file="rx/t-rx"
	;;
s390-*-linux*)
	tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux s390/32/t-floattodi"
	;;
s390x-*-linux*)
	tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux"
	;;
s390x-ibm-tpf*)
	tmake_file="${tmake_file} s390/t-crtstuff s390/t-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)
	;;
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-*-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-*-linux*)
	;;
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*)
 	;;
mep*-*-*)
	;;
*)
	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"
	if test "$libgcc_cv_cfi" = "yes"; then
		tmake_file="${tmake_file} t-stack i386/t-stack-i386"
	fi
	;;
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* | \
  i[34567]86-*-gnu* | \
  i[34567]86-*-solaris2* | \
  i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw* | \
  i[34567]86-*-freebsd* | x86_64-*-freebsd*)
	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
