# 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"
  ;;
*-*-ros*)
  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*)
	;;
riscv*-*-ros*)
	;;
i[34567]86-*-ros* | 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-*-ros* | 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-*-ros* | \
  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
