# GCC host-specific configuration file.
# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003
# 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 2, 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 COPYING.  If not, write to the Free
#Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#02111-1307, USA.

# This is the GCC 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 switches on the shell variable ${host}.  As much of this as
# is reasonable should be replaced with autoconf tests in the future.

# This file sets the following shell variables for use by the
# autoconf-generated configure script:
#
#  host_xm_file         List of files to include when compiling for the
#                       host machine.
#
#  host_xm_defines      List of macros to define when compiling for the
#                       host machine.
#
#  host_xmake_file      List of host-specific makefile-fragments.
#
#  host_exeext          Set to the suffix, if the host machine requires
#                       executables to have a file name suffix.
#
#  host_extra_objs      List of extra host-dependent objects that should
#                       be linked into the compiler proper.
#
#  host_extra_gcc_objs  List of extra host-dependent objects that should
#                       be linked into the gcc driver.
#
#  out_host_hook_obj    An object file that provides the host hooks.

# When setting any of these variables, check to see if a corresponding
# variable is present in config.build; if so, you will likely want to 
# set it in both places.

# Default settings.
host_xm_file=
host_xm_defines=
host_xmake_file=
host_exeext=
host_extra_objs=
host_extra_gcc_objs=
out_host_hook_obj=host-default.o

# Unsupported hosts list.  Generally, only include hosts known to fail here,
# since we allow hosts not listed to be supported generically.
case ${host} in
   i[34567]86-sequent-sysv \
 | i[34567]86-sequent-sysv[123]* \
 | i[34567]86-go32-* \
 | i[34567]86-*-go32* \
 | vax-*-vms*)
    echo "*** Configuration for host ${host} not supported" 1>&2
    exit 1
    ;;
esac

# Machine-specific settings.
case ${host} in
  alpha*-dec-*vms*)
    host_xm_file=alpha/xm-vms.h
    host_xmake_file=alpha/x-vms
    host_exeext=.exe
    # This removes the cpu type and manufacturer components and
    #  replaces "." with "_" in the operating system version.
    target_noncanonical=`echo $host | sed 's/.*-.*-\(.*\)$/\1/' | sed 's/\./_/g'`
    prefix=/gnu
    local_prefix=/gnu
    ;;
  hppa1.1-*-pro*)
    host_xmake_file="pa/x-ada"
    ;;
  hppa1.1-*-osf*)
    host_xmake_file="pa/x-ada"
    ;;
  hppa1.1-*-rtems*)
    host_xmake_file="pa/x-ada"
    ;;
  hppa1.1-*-bsd*)
    host_xmake_file="pa/x-ada"
    ;;
  hppa1.0-*-hpux10* | hppa1.1-*-hpux10* | hppa2*-*-hpux10* | \
  hppa1.0-*-hpux11* | hppa1.1-*-hpux11* | hppa2*-*-hpux11* | \
  hppa*64*-*-hpux11*)
    host_xmake_file="pa/x-ada"
    ;;
  i370-*-opened* | i370-*-mvs* ) # IBM 360/370/390 Architecture
    host_xm_defines='FATAL_EXIT_CODE=12'
    ;;
  i[34567]86-sequent-ptx4*)
    host_xm_defines="SMALL_ARG_MAX"
    ;;
  i[34567]86-*-solaris2*)
    host_xm_defines="SMALL_ARG_MAX"
    ;;
  i[34567]86-*-sysv4*) # Intel 80386's running System V Release 4
    host_xm_defines="SMALL_ARG_MAX"
    ;;
  i[34567]86-pc-msdosdjgpp*)
    host_xm_file=i386/xm-djgpp.h
    host_exeext=.exe
    # Shorten $target_noncanonical for 8.3 filename conventions.
    case ${target} in
      *pc-msdosdjgpp*)
        target_noncanonical=djgpp
        ;;
    esac
    ;;
  i[34567]86-*-pe | i[34567]86-*-cygwin*)
    host_xm_file=i386/xm-cygwin.h
    host_exeext=.exe
    ;;
  i[34567]86-*-mingw32*)
    host_xm_file=i386/xm-mingw32.h
    host_xmake_file=i386/x-mingw32
    host_exeext=.exe
    ;;
  i[34567]86-*-uwin*)
    echo "*** UWIN may not be used as a host platform because"
    echo "*** linking with posix.dll is not allowed by the GNU GPL."
    exit 1
    ;;
  i[34567]86-*-interix3*)
    host_xmake_file="x-interix"
    ;;
  i860-*-sysv4*)
    host_xmake_file=i860/x-sysv4
    ;;
  powerpc-*-darwin*)
    # powerpc-darwin host support.
    out_host_hook_obj=host-darwin.o
    host_xmake_file=rs6000/x-darwin
    ;;
esac
