# configure.host
#
# This shell script handles all host based configuration for libstdc++.
# It sets various shell variables based on 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:
#
#   EXTRA_CFLAGS           extra flags to pass when compiling C code
#
#   EXTRA_CXX_FLAGS        extra flags to pass when compiling C++ code
#
#   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
#
#   tmake_file		   A list of machine-description-specific
#			   makefile fragments.
#
#
# 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"
tmake_file=

# 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
  amdgcn)
    cpu_defines_dir=cpu/gcn
    ;;
  arm*)
    cpu_defines_dir=cpu/arm
    ;;
  nvptx)
    cpu_defines_dir=cpu/nvptx
    ;;
  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"
    tmake_file="os/aix/t-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 | uclinux*)
    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*)
    os_include_dir="os/solaris"
    ;;
  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
 loongarch*)
    tmake_file="cpu/loongarch/t-loongarch"
    ;;
 *-*-linux* | *-*-uclinux*)
    case "${host_cpu}" in
      i[567]86)
        abi_baseline_pair=i486-linux-gnu
        ;;
      mips64*)
	abi_baseline_pair=mips64-linux-gnu
	;;
      powerpc64le*)
        abi_baseline_pair=powerpc64le-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-* | arm*-*-uclinuxfdpiceabi)
	port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
	;;
    esac
    ;;
  amdgcn-*-amdhsa)
    # To avoid greater pain elsewhere, force use of '__atomic' builtins,
    # regardless of the outcome of 'configure' checks; see PR119645
    # "GCN, nvptx: libstdc++ 'checking for atomic builtins [...]... no'".
    atomicity_dir=cpu/generic/atomicity_builtins
    ;;
  arm*-*-freebsd*)
     port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
     ;;
  nvptx-*-none)
    # To avoid greater pain elsewhere, force use of '__atomic' builtins,
    # regardless of the outcome of 'configure' checks; see PR119645
    # "GCN, nvptx: libstdc++ 'checking for atomic builtins [...]... no'".
    atomicity_dir=cpu/generic/atomicity_builtins

    # For 'make all-target-libstdc++-v3', re 'alloca'/VLA usage:
    EXTRA_CFLAGS="${EXTRA_CFLAGS} -mfake-ptx-alloca"
    OPTIMIZE_CXXFLAGS="${OPTIMIZE_CXXFLAGS} -mfake-ptx-alloca"
    ;;
  powerpc*-*-darwin*)
    port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/ppc-extra.ver"
    ;;
  *-*-solaris2*)
    abi_baseline_pair=solaris
    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


# Dumb down libstdc++ for certain configurations.
# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
case "${host}" in
  amdgcn-*-amdhsa \
  | nvptx-*-none )
    # For 'make all-target-libstdc++-v3' and 'make check-target-libstdc++-v3',
    # exception handling is not supported: in case that exception handling
    # constructs survive compiler optimizations, the back ends error out:
    #     sorry, unimplemented: exception handling not supported
    EXTRA_CXX_FLAGS="${EXTRA_CXX_FLAGS} -fno-exceptions"

    # For 'make all-target-libstdc++-v3' and 'make check-target-libstdc++-v3',
    # RTTI is not supported.
    EXTRA_CXX_FLAGS="${EXTRA_CXX_FLAGS} -fno-rtti"

    # Cannot '#include' all newlib header files without explosion, for example:
    #     error: 'jmp_buf' was not declared in this scope
    # Just disable generation of PCH files here, instead of attempting to care
    # for such special cases in some more complex way.
    enable_libstdcxx_pch=no
    ;;
esac
