# 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_baseline_subdir_switch
#			   g++ switch to determine ABI baseline subdir for
#			   multilibbed targets,
#			   defaults to --print-multi-directory
#
#   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.
#
#   cpu_opt_bits_random    path name of random.h containing CPU-specific
#                          optimizations
#
#   cpu_opt_ext_random     path name of random.h containing CPU-specific
#                          optimizations for extensions
#
#   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-separated 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_baseline_subdir_switch=--print-multi-directory
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
    ;;
  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
  arm*)
    cpu_defines_dir=cpu/arm
    ;;
  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
  cris*)
    atomic_word_dir=cpu/cris
    ;;
  i[4567]86 | x86_64)
    atomic_flags="-march=native"
    ;;
  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 directory with CPU-specific optimization
cpu_opt_dir=${cpu_include_dir}/opt
test -d ${glibcxx_srcdir}/config/${cpu_include_dir}/opt ||
cpu_opt_dir=cpu/generic/opt
# For each header with CPU-specific optimizations check whether it
# exists in ${cpu_opt_dir}.  If not, point the variable at the
# appropriate file in the generic directory.
cpu_opt_ext_random=${cpu_opt_dir}/ext/opt_random.h
test -f ${glibcxx_srcdir}/config/${cpu_opt_ext_random} ||
cpu_opt_ext_random=cpu/generic/opt/ext/opt_random.h

cpu_opt_bits_random=${cpu_opt_dir}/bits/opt_random.h
test -f ${glibcxx_srcdir}/config/${cpu_opt_ext_random} ||
cpu_opt_ext_random=cpu/generic/opt/bits/opt_random.h


# 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
  aix[56789]*)
    # Newer versions of AIX only support PowerPC architecture, so use
    # atomic instructions directly.
    os_include_dir="os/aix"
    ;;
  aix4.[3456789]*)
    # 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"
    ;;
  aix4.*)
    os_include_dir="os/generic"
    atomicity_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[4-7] | darwin[4-7].*)
    # For earlier 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"
    ;;
  darwin8 | darwin8.* )
    # For 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"
    ;;
  darwin*)
    # Post Darwin8, defaults should be sufficient.
    os_include_dir="os/bsd/darwin"
    ;;
  *djgpp*)      # leading * picks up "msdosdjgpp"
    os_include_dir="os/djgpp"
    error_constants_dir="os/djgpp"
    ;;
  dragonfly*)
    os_include_dir="os/bsd/dragonfly"
    ;;
  freebsd*)
    os_include_dir="os/bsd/freebsd"
    ;;
  linux-musl*)
    os_include_dir="os/generic"
    ;;
  gnu* | linux* | kfreebsd*-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"
    ;;
  mingw32*)
    case "$host" in
      *-w64-*)
        os_include_dir="os/mingw32-w64"
        error_constants_dir="os/mingw32-w64"
        ;;
      *)
        os_include_dir="os/mingw32"
        error_constants_dir="os/mingw32"
        ;;
    esac
    OPT_LDFLAGS="${OPT_LDFLAGS} \$(lt_host_flags)"
    ;;
  netbsd*)
    os_include_dir="os/bsd/netbsd"
    ;;
  openbsd*)
    os_include_dir="os/bsd/openbsd"
    ;;
  qnx6.[12]*)
    os_include_dir="os/qnx/qnx6.1"
    c_model=c
    ;;
  rtems*)
    # Use libatomic if necessary and avoid libstdc++ specific atomicity support
    atomicity_dir="cpu/generic/atomicity_builtins"
    ;;
  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.10 " 1>&2
    exit 1
    ;;
  solaris2.1[0-9])
    os_include_dir="os/solaris/solaris2.10"
    ;;
  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
        ;;
      sparc64)
        abi_baseline_pair=sparc64-linux-gnu
        ;;
      x86_64)
        abi_baseline_pair=x86_64-linux-gnu
        ;;
      *)
        if test $try_cpu = generic; then
          try_abi_cpu=$host_cpu
        else
          try_abi_cpu=$try_cpu
        fi
        if test -d ${glibcxx_srcdir}/config/abi/post/${try_abi_cpu}-linux-gnu; then
          abi_baseline_pair=${try_abi_cpu}-linux-gnu
        fi
    esac
    case "${host}" in
      arm*-*-linux-*)
	port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
	;;
    esac
    ;;
  arm*-*-freebsd*)
     port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
     ;;
  powerpc*-*-darwin*)
    port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/ppc-extra.ver"
    ;;
  *-*-solaris2.1[0-9])
    # On Solaris 10 with Solaris ld, there's no COMDAT support.  GNU ld always
    # provides it, as does Solaris ld since Solaris 11, leading to different
    # baselines.
    case "${host_os}:${with_gnu_ld}" in
      # with_gnu_ld may either be unset (default) or no (with --without-gnu-ld).
      solaris2.10: | solaris2.10:no)
        abi_baseline_pair=solaris2.10
	;;
      *)
        abi_baseline_pair=solaris2.11
	;;
    esac
    case "${host_cpu}" in
	i?86 | x86_64)
	    abi_baseline_pair=i386-${abi_baseline_pair}
	    ;;
	sparc*)
	    abi_baseline_pair=sparc-${abi_baseline_pair}
	    ;;
    esac
    abi_baseline_subdir_switch=--print-multi-os-directory
    ;;
esac
