| # 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 overridden 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 | 
 |     ;; | 
 |   arm*-*-freebsd*) | 
 |      port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver" | 
 |      ;; | 
 |   nvptx-*-none) | 
 |     # 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 |