| # 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 | |
| ;; | |
| nvptx) | |
| cpu_defines_dir=cpu/nvptx | |
| ;; | |
| 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_constants_dir. | |
| # Set c_model, c_compatibility here. | |
| # If atomic ops and/or numeric limits are OS-specific rather than | |
| # CPU-specific, 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 | |
| ;; | |
| 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 |