# configure.host
#
# This shell script handles all host based configuration for libstdc++.
# It sets various shell variables based on the the host and the
# configuration options.  You can modify this shell script without needing
# to rerun autoconf/aclocal/etc.  This file is "sourced" not executed.
#
# You should read docs/html/17_intro/porting.* to make sense of this file.
#
#
# It uses the following shell variables as set by config.guess:
#   host                The configuration host (full CPU-vendor-OS triplet)
#   host_cpu            The configuration host CPU
#   host_os             The configuration host OS
#
#
# It sets the following shell variables:
#
#   cpu_include_dir        CPU-specific directory, defaults to cpu/generic
#                          if cpu/host_cpu doesn't exist.  This is not used
#                          directly, but sets the default for others.
#
#   os_include_dir         OS-specific directory, defaults to os/generic.
#
#   c_model                the "C" header model, defaults to c_global.
#
#   c_compatibility        if "C" compatibility headers are necessary,
#                          defaults to no.
#
#   abi_baseline_pair      directory name for ABI compat testing,
#                          defaults to host_cpu-host_os (as per config.guess)
#
#   abi_tweaks_dir         location of cxxabi_tweaks.h,
#                          defaults to cpu_include_dir
#
#   atomicity_dir          location of atomicity.h,
#                          defaults to cpu_include_dir
#
#   atomic_word_dir        location of atomic_word.h
#                          defaults to generic.
#
#   atomic_flags           extra flags to pass to use atomic instructions
#                          defaults to nothing.
#
#   cpu_defines_dir        location of cpu_defines.h
#                          defaults to generic.
#
#
#   error_constants_dir    location of error_constants.h
#                          defaults to os/generic.
#
# It possibly modifies the following variables:
#
#   OPT_LDFLAGS            extra flags to pass when linking the library, of
#                          the form '-Wl,blah'
#                          (defaults to empty in acinclude.m4)
#
#   port_specific_symbol_files
#                          whitespace-seperated list of files containing
#                          additional symbols to export from the shared
#                          library, when symbol versioning is in use
#
#
# If the defaults will not work for your platform, you need only change the
# variables that won't work, i.e., you do not need to explicitly set a
# working variable to its default.  Most hosts only need to change the two
# *_include_dir variables.


# DEFAULTS
# Try to guess a default cpu_include_dir based on the name of the CPU.  We
# cannot do this for os_include_dir; there are too many portable operating
# systems out there.  :-)
c_model=c_global
c_compatibility=no
atomic_word_dir=cpu/generic
atomic_flags=""
atomicity_dir="cpu/generic"
cpu_defines_dir="cpu/generic"
try_cpu=generic
abi_tweaks_dir="cpu/generic"
error_constants_dir="os/generic"

# HOST-SPECIFIC OVERRIDES
# Set any CPU-dependent bits.

# Provide a way to funnel exotic flavors and prefixed/postfixed chip
# variants into the established source config/cpu/* sub-directories.
# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
case "${host_cpu}" in
  alpha*)
    try_cpu=alpha
    ;;
  arm*)
    try_cpu=arm
    ;;
  crisv32)
    try_cpu=cris
    ;;
  i[567]86 | x86_64)
    try_cpu=i486
    ;;
  hppa*)
    try_cpu=hppa
    ;;
  mep*)
    EXTRA_CXX_FLAGS=-mm
    try_cpu=generic
    ;;
  mips*)
    try_cpu=mips
    ;;
  powerpc* | rs6000)
    try_cpu=powerpc
    ;;
  sparc* | ultrasparc)
    try_cpu=sparc
    ;;
  *)
    if test -d ${glibcxx_srcdir}/config/cpu/${host_cpu}; then
      try_cpu=${host_cpu}
    fi
esac


# Now look for the file(s) usually tied to a CPU model, and make
# default choices for those if they haven't been explicitly set
# already.  
cpu_include_dir=cpu/${try_cpu}


# Set specific CPU overrides for cpu_defines_dir. Most can just use generic.
# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
case "${host_cpu}" in
  powerpc* | rs6000)
    cpu_defines_dir=cpu/powerpc
    ;;
esac


# Set specific CPU overrides for atomic_word_dir and atomic_flags. 
# Most can just use generic.
# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
case "${host_cpu}" in
  alpha*)
    atomic_word_dir=cpu/alpha
    ;;
  cris*)
    atomic_word_dir=cpu/cris
    ;;
  ia64)
    atomic_word_dir=cpu/ia64
    ;;
  i[4567]86 | x86_64)
    atomic_flags="-march=native"
    ;;
  powerpc* | rs6000)
    atomic_word_dir=cpu/powerpc
    ;;
  sparc* | ultrasparc)
    atomic_word_dir=cpu/sparc
    atomic_flags="-mcpu=v9"
    ;;
esac


# Set specific CPU overrides for atomicity_dir.
# This can be over-ridden in GLIBCXX_ENABLE_ATOMIC_BUILTINS.
# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
if test -f ${glibcxx_srcdir}/config/${cpu_include_dir}/atomicity.h ; then
  atomicity_dir=$cpu_include_dir
fi


if test -f ${glibcxx_srcdir}/config/${cpu_include_dir}/cxxabi_tweaks.h ; then
  abi_tweaks_dir=$cpu_include_dir
fi


# Set any OS-dependent bits.
# Set the os_include_dir.
# Set the error_costants_dir.
# Set c_model, c_compatibility here.
# If atomic ops and/or numeric limits are OS-specific rather than
# CPU-specifc, set those here too.
# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
case "${host_os}" in
  aix4.[3456789]* | aix[56789]*)
    # We set os_include_dir to os/aix only on AIX 4.3 and newer, but
    # os/aix/atomicity.h works on earlier versions of AIX 4.*, so we
    # explicitly duplicate the directory for 4.[<3].
    os_include_dir="os/aix"
    atomicity_dir="os/aix"
    atomic_word_dir="os/aix"
    OPT_LDFLAGS="-Wl,-G"
    ;;
  aix4.*)
    os_include_dir="os/generic"
    atomicity_dir="os/aix"
    atomic_word_dir="os/aix"
    ;;
  aix*)
    os_include_dir="os/generic"
    atomicity_dir="cpu/generic"
    ;;
  bsd*)
    # Plain BSD attempts to share FreeBSD files.
    os_include_dir="os/bsd/freebsd"
    ;;
  cygwin*)
    os_include_dir="os/newlib"
    OPT_LDFLAGS="${OPT_LDFLAGS} \$(lt_host_flags)"
    ;;
  darwin | darwin[1-7] | darwin[1-7].*)
    # On Darwin, performance is improved if libstdc++ is single-module.
    # Up to at least 10.3.7, -flat_namespace is required for proper
    # treatment of coalesced symbols.
    OPT_LDFLAGS="${OPT_LDFLAGS} -Wl,-single_module -Wl,-flat_namespace"
    os_include_dir="os/bsd/darwin"
    ;;
  darwin[89] | darwin[89].* | darwin[1-9][0-9]* )
    # On Darwin, performance is improved if libstdc++ is single-module,
    # and on 8+ compatibility is better if not -flat_namespace.
    OPT_LDFLAGS="${OPT_LDFLAGS} -Wl,-single_module"
    case "${host_cpu}" in
      i[34567]86 | x86_64)
        OPTIMIZE_CXXFLAGS="${OPTIMIZE_CXXFLAGS} -fvisibility-inlines-hidden"
        ;;
    esac
    os_include_dir="os/bsd/darwin"
    ;;
  *djgpp*)      # leading * picks up "msdosdjgpp"
    os_include_dir="os/djgpp"
    error_constants_dir="os/djgpp"
    ;;
  freebsd*)
    os_include_dir="os/bsd/freebsd"
    ;;
  gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
    if [ "$uclibc" = "yes" ]; then
      os_include_dir="os/uclibc"
    elif [ "$bionic" = "yes" ]; then
      os_include_dir="os/bionic"
    else
      os_include_dir="os/gnu-linux"
    fi
    ;;
  hpux*)
    os_include_dir="os/hpux"
    ;;
  irix6.5*)
    os_include_dir="os/irix/irix6.5"
    atomicity_dir=os/irix
    atomic_word_dir=os/irix
    ;;
  mingw32*)
    os_include_dir="os/mingw32"
    error_constants_dir="os/mingw32"
    OPT_LDFLAGS="${OPT_LDFLAGS} \$(lt_host_flags)"
    ;;
  netbsd*)
    os_include_dir="os/bsd/netbsd"
    ;;
  osf*)
    os_include_dir="os/generic"
    # libstdc++.so relies on emutls on Tru64 UNIX, which only works with the
    # real functions implemented in libpthread.so, not with the dummies in
    # libgcc, so always pass -lpthread.
    OPT_LDFLAGS="${OPT_LDFLAGS} -lpthread"
    ;;
  qnx6.[12]*)
    os_include_dir="os/qnx/qnx6.1"
    c_model=c
    ;;
  ros*)
    os_include_dir="os/ros"
    ;;
  solaris2)
    # This too-vague configuration does not provide enough information
    # to select a ctype include, and thus os_include_dir is a crap shoot.
    echo "Please specify the full version of Solaris, ie. solaris2.9 " 1>&2
    exit 1
    ;;
  solaris2.[89] | solaris2.1[0-9])
    os_include_dir="os/solaris/solaris2.7"
    ;;
  tpf)
    os_include_dir="os/tpf"
    ;;
  vxworks)
    os_include_dir="os/vxworks"
    ;;
  *)
    os_include_dir="os/generic"
    ;;
esac


# Set any OS-dependent and CPU-dependent bits.
# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
case "${host}" in
  *-*-linux*)
    case "${host_cpu}" in
      i[567]86)
        abi_baseline_pair=i486-linux-gnu
        ;;
      mips64*)
	abi_baseline_pair=mips64-linux-gnu
	;;
      powerpc64)
        abi_baseline_pair=powerpc64-linux-gnu
        ;;
      s390)
        abi_baseline_pair=s390-linux-gnu
        ;;
      s390x)
        abi_baseline_pair=s390x-linux-gnu
        ;;
      x86_64)
        abi_baseline_pair=x86_64-linux-gnu
        ;;
      *)
        if test -d ${glibcxx_srcdir}/config/abi/post/${try_cpu}-linux-gnu; then
          abi_baseline_pair=${try_cpu}-linux-gnu
        fi
    esac
    case "${host}" in
      arm*-*-linux-*eabi)
	port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
	;;
    esac
    ;;
  powerpc*-*-darwin*)
    port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/ppc-extra.ver"
    ;;
  *-*-solaris2.[89])
    abi_baseline_pair=solaris2.8
    ;;
  *-*-solaris2.1[0-9])
    abi_baseline_pair=solaris2.10
    ;;
esac
