gcc/libstdc++-v3/configure.ac
Jonathan Wakely 637e3668fd libstdc++: Allow emergency EH alloc pool size to be tuned [PR68606]
Implement a long-standing request to support tuning the size of the
emergency buffer for allocating exceptions after malloc fails, or to
disable that buffer entirely.

It's now possible to disable the dynamic allocation of the buffer and
use a fixed-size static buffer, via --enable-libstdcxx-static-eh-pool.
This is a built-time choice that is baked into libstdc++ and so affects
all code linked against that build of libstdc++.

The size of the pool can be set by --with-libstdcxx-eh-pool-obj-count=N
which is measured in units of sizeof(void*) not bytes. A given exception
type such as std::system_error depends on the target, so giving a size
in bytes wouldn't be portable across 16/32/64-bit targets.

When libstdc++ is configured to use a dynamic buffer, the size of that
buffer can now be tuned at runtime by setting the GLIBCXX_TUNABLES
environment variable (c.f. PR libstdc++/88264). The number of exceptions
to reserve space for is controlled by the "glibcxx.eh_pool.obj_count"
and "glibcxx.eh_pool.obj_size" tunables. The pool will be sized to be
able to allocate obj_count exceptions of size obj_size*sizeof(void*) and
obj_count "dependent" exceptions rethrown by std::rethrow_exception.

With the ability to tune the buffer size, we can reduce the default pool
size on 32-bit and 16-bit targets. Most users never need to throw 1kB
exceptions in parallel from hundreds of threads after malloc is OOM. The
users who do need that can use the tunables to select larger sizes.

The old defaults can be chosen at runtime by setting GLIBCXX_TUNABLES
to:
64-bit: glibcxx.eh_pool.obj_count=64:glibcxx.eh_pool.obj_size=112
32-bit: glibcxx.eh_pool.obj_count=32:glibcxx.eh_pool.obj_size=104

Or approximated by configuring with:
64-bit: --with-libstdcxx-eh-pool-obj-count=252
32-bit: --with-libstdcxx-eh-pool-obj-count=94

libstdc++-v3/ChangeLog:

	PR libstdc++/68606
	* Makefile.in: Regenerate.
	* acinclude.m4 (GLIBCXX_EMERGENCY_EH_ALLOC): New macro.
	* configure: Regenerate.
	* configure.ac: Use GLIBCXX_EMERGENCY_EH_ALLOC.
	* crossconfig.m4: Check for secure_getenv.
	* doc/Makefile.in: Regenerate.
	* doc/xml/manual/configure.xml: Document new configure options.
	* doc/xml/manual/evolution.xml: Document addition of tunables.
	* doc/xml/manual/using_exceptions.xml: Document emergency
	buffer and tunables.
	* doc/html/*: Regenerate.
	* include/Makefile.in: Regenerate.
	* libsupc++/Makefile.am: Use EH_POOL_FLAGS.
	* libsupc++/Makefile.in: Regenerate.
	* libsupc++/eh_alloc.cc (EMERGENCY_OBJ_SIZE): Define in units
	of sizeof(void*) not including the ABI's exception header.
	(EMERGENCY_OBJ_COUNT): Define as target-independent calculation
	based on word size.
	(MAX_OBJ_COUNT): Define macro for upper limit on pool size.
	(pool) [_GLIBCXX_EH_POOL_STATIC]: Use fixed-size buffer.
	(pool::buffer_size_in_bytes): New static member function.
	(pool::pool): Parse GLIBCXX_TUNABLES environment variable to set
	pool size at runtime.
	(pool::in_pool): Use std::less<void*> for total order.
	(__freeres) [_GLIBCXX_EH_POOL_STATIC]: Do nothing.
	(__cxa_free_exception, __cxa_free_dependent_exception): Add
	[[unlikely]] attributes.
	* po/Makefile.in: Regenerate.
	* python/Makefile.in: Regenerate.
	* src/Makefile.in: Regenerate.
	* src/c++11/Makefile.in: Regenerate.
	* src/c++17/Makefile.in: Regenerate.
	* src/c++20/Makefile.in: Regenerate.
	* src/c++98/Makefile.in: Regenerate.
	* src/filesystem/Makefile.in: Regenerate.
	* src/libbacktrace/Makefile.in: Regenerate.
	* testsuite/Makefile.in: Regenerate.
2022-10-11 16:21:48 +01:00

697 lines
22 KiB
Text

# Process this file with autoreconf to produce a configure script.
AC_INIT(package-unused, version-unused,, libstdc++)
AC_CONFIG_SRCDIR(src/shared/hashtable-aux.cc)
AC_CONFIG_HEADER(config.h)
# This works around the fact that libtool configuration may change LD
# for this particular configuration, but some shells, instead of
# keeping the changes in LD private, export them just because LD is
# exported. Only used at the end of this file.
### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD
# Find the rest of the source tree framework.
AM_ENABLE_MULTILIB(, ..)
# Gets build, host, target, *_vendor, *_cpu, *_os, etc.
#
# You will slowly go insane if you do not grok the following fact: when
# building v3 as part of the compiler, the top-level /target/ becomes the
# library's /host/. configure then causes --target to default to --host,
# exactly like any other package using autoconf. Therefore, 'target' and
# 'host' will always be the same. This makes sense both for native and
# cross compilers, just think about it for a little while. :-)
#
# Also, if v3 is being configured as part of a cross compiler, the top-level
# configure script will pass the "real" host as $with_cross_host.
#
# Do not delete or change the following two lines. For why, see
# http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html
AC_CANONICAL_SYSTEM
target_alias=${target_alias-$host_alias}
# Handy for debugging:
#AC_MSG_NOTICE($build / $host / $target / $host_alias / $target_alias); sleep 5
if test "$build" != "$host"; then
# We are being configured with some form of cross compiler.
GLIBCXX_IS_NATIVE=false
case "$host","$target" in
# Darwin crosses can use the host system's libraries and headers,
# because of the fat library support. Of course, it must be the
# same version of Darwin on both sides. Allow the user to
# just say --target=foo-darwin without a version number to mean
# "the version on this system".
*-*-darwin*,*-*-darwin*)
hostos=`echo $host | sed 's/.*-darwin/darwin/'`
targetos=`echo $target | sed 's/.*-darwin/darwin/'`
if test $hostos = $targetos -o $targetos = darwin ; then
GLIBCXX_IS_NATIVE=true
fi
;;
*)
GCC_NO_EXECUTABLES
;;
esac
else
GLIBCXX_IS_NATIVE=true
fi
# In the case that we're building without headers, we won't have <stdio.h>
# available. In these cases, we have to instruct autotools to never include
# <stdio.h> as a part of default headers.
m4_version_prereq([2.70], [], [
if test "x$with_headers" = "xno"; then
ac_includes_default=`echo "$ac_includes_default" | sed '/^#include <stdio.h>$/d'`
fi
])
# Sets up automake. Must come after AC_CANONICAL_SYSTEM. Each of the
# following is magically included in AUTOMAKE_OPTIONS in each Makefile.am.
# 1.x: minimum required version
# no-define: PACKAGE and VERSION will not be #define'd in config.h (a bunch
# of other PACKAGE_* variables will, however, and there's nothing
# we can do about that; they come from AC_INIT).
# foreign: we don't follow the normal rules for GNU packages (no COPYING
# file in the top srcdir, etc, etc), so stop complaining.
# no-dependencies: turns off auto dependency generation (just for now)
# no-dist: we don't want 'dist' and related rules.
# -Wall: turns on all automake warnings...
# -Wno-portability: ...except this one, since GNU make is now required.
AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dependencies no-dist -Wall -Wno-portability -Wno-override])
AH_TEMPLATE(PACKAGE, [Name of package])
AH_TEMPLATE(VERSION, [Version number of package])
# -fno-builtin must be present here so that a non-conflicting form of
# std::exit can be guessed by AC_PROG_CXX, and used in later tests.
save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -fno-builtin"
AC_PROG_CC
AC_PROG_CXX
CXXFLAGS="$save_CXXFLAGS"
AC_SYS_LARGEFILE
# Runs configure.host, and assorted other critical bits. Sets
# up critical shell variables.
GLIBCXX_CONFIGURE
# Libtool setup.
if test "x${with_newlib}" != "xyes" &&
test "x${with_avrlibc}" != "xyes" &&
test "x$with_headers" != "xno"; then
AC_LIBTOOL_DLOPEN
fi
AM_PROG_LIBTOOL
ACX_LT_HOST_FLAGS
AC_SUBST(enable_shared)
AC_SUBST(enable_static)
if test "$enable_vtable_verify" = yes; then
predep_objects_CXX="${predep_objects_CXX} ${glibcxx_builddir}/../libgcc/vtv_start.o"
postdep_objects_CXX="${postdep_objects_CXX} ${glibcxx_builddir}/../libgcc/vtv_end.o"
fi
# libtool variables for C++ shared and position-independent compiles.
#
# Use glibcxx_lt_pic_flag to designate the automake variable
# used to encapsulate the default libtool approach to creating objects
# with position-independent code. Default: -prefer-pic.
#
# Use glibcxx_compiler_shared_flag to designate a compile-time flags for
# creating shared objects. Default: -D_GLIBCXX_SHARED.
#
# Use glibcxx_compiler_pic_flag to designate a compile-time flags for
# creating position-independent objects. This varies with the target
# hardware and operating system, but is often: -DPIC -fPIC.
if test "$enable_shared" = yes; then
glibcxx_lt_pic_flag="-prefer-pic"
glibcxx_compiler_pic_flag="$lt_prog_compiler_pic_CXX"
glibcxx_compiler_shared_flag="-D_GLIBCXX_SHARED"
else
glibcxx_lt_pic_flag=
glibcxx_compiler_pic_flag=
glibcxx_compiler_shared_flag=
fi
AC_SUBST(glibcxx_lt_pic_flag)
AC_SUBST(glibcxx_compiler_pic_flag)
AC_SUBST(glibcxx_compiler_shared_flag)
# Override the libtool's pic_flag and pic_mode.
# Do this step after AM_PROG_LIBTOOL, but before AC_OUTPUT.
# NB: this impacts --with-pic and --without-pic.
lt_prog_compiler_pic_CXX="$glibcxx_compiler_pic_flag $glibcxx_compiler_shared_flag"
pic_mode='default'
# Eliminate -lstdc++ addition to postdeps for cross compiles.
postdeps_CXX=`echo " $postdeps_CXX " | sed 's, -lstdc++ ,,g'`
# Possibly disable most of the library.
## TODO: Consider skipping unncessary tests altogether in this case, rather
## than just ignoring the results. Faster /and/ more correct, win win.
GLIBCXX_ENABLE_HOSTED
# Enable descriptive messages to standard output on termination.
GLIBCXX_ENABLE_VERBOSE
# Enable compiler support that doesn't require linking.
GLIBCXX_ENABLE_PCH($is_hosted)
GLIBCXX_ENABLE_THREADS
GLIBCXX_ENABLE_ATOMIC_BUILTINS
GLIBCXX_ENABLE_LOCK_POLICY
GLIBCXX_ENABLE_DECIMAL_FLOAT
GLIBCXX_ENABLE_FLOAT128
if test "$enable_float128" = yes; then
port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/abi/pre/float128.ver"
fi
# Checks for compiler support that doesn't require linking.
GLIBCXX_CHECK_COMPILER_FEATURES
# Enable all the variable C++ runtime options that don't require linking.
GLIBCXX_ENABLE_CSTDIO
GLIBCXX_ENABLE_CLOCALE
GLIBCXX_ENABLE_ALLOCATOR
GLIBCXX_ENABLE_CHEADERS($c_model) dnl c_model from configure.host
GLIBCXX_ENABLE_LONG_LONG([yes])
GLIBCXX_ENABLE_WCHAR_T([yes])
GLIBCXX_ENABLE_C99([yes])
GLIBCXX_ENABLE_CONCEPT_CHECKS([no])
GLIBCXX_ENABLE_DEBUG_FLAGS(["-g3 -O0 -D_GLIBCXX_ASSERTIONS"])
GLIBCXX_ENABLE_DEBUG([no])
GLIBCXX_ENABLE_PARALLEL([yes])
GLIBCXX_ENABLE_CXX_FLAGS
GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING([no])
GLIBCXX_ENABLE_EXTERN_TEMPLATE([yes])
GLIBCXX_ENABLE_PYTHON
GLIBCXX_ENABLE_WERROR([no])
GLIBCXX_ENABLE_VTABLE_VERIFY([no])
# Checks for operating systems support that doesn't require linking.
GLIBCXX_CHECK_STDIO_PROTO
GLIBCXX_CHECK_MATH11_PROTO
GLIBCXX_CHECK_UCHAR_H
# For LFS support.
GLIBCXX_CHECK_LFS
# For showmanyc_helper().
AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
GLIBCXX_CHECK_POLL
GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
# For xsputn_2().
AC_CHECK_HEADERS(sys/uio.h)
GLIBCXX_CHECK_WRITEV
# Check for fenv.h and complex.h before GLIBCXX_CHECK_C99_TR1
# so that the check is done with the C compiler (not C++).
# Checking with C++ can break a canadian cross build if either
# file does not exist in C but does in C++.
AC_CHECK_HEADERS(fenv.h complex.h)
# For C99 support to TR1.
GLIBCXX_CHECK_C99_TR1
# For the EOF, SEEK_CUR, and SEEK_END integer constants.
GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS
# For gettimeofday support.
GLIBCXX_CHECK_GETTIMEOFDAY
# For clock_gettime, nanosleep and sched_yield support.
GLIBCXX_ENABLE_LIBSTDCXX_TIME
# Check for tmpnam which is obsolescent in POSIX.1-2008
GLIBCXX_CHECK_TMPNAM
# For pthread_cond_clockwait
GLIBCXX_CHECK_PTHREAD_COND_CLOCKWAIT
# For pthread_mutex_clocklock
GLIBCXX_CHECK_PTHREAD_MUTEX_CLOCKLOCK
# For pthread_rwlock_clockrdlock and pthread_rwlock_clockwrlock
GLIBCXX_CHECK_PTHREAD_RWLOCK_CLOCKLOCK
AC_LC_MESSAGES
# For hardware_concurrency
AC_CHECK_HEADERS(sys/sysinfo.h)
GLIBCXX_CHECK_GET_NPROCS
AC_CHECK_HEADERS(unistd.h)
GLIBCXX_CHECK_SC_NPROCESSORS_ONLN
GLIBCXX_CHECK_SC_NPROC_ONLN
GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP
GLIBCXX_CHECK_SYSCTL_HW_NCPU
GLIBCXX_CHECK_SDT_H
# Check for available headers.
AC_CHECK_HEADERS([endian.h execinfo.h float.h fp.h ieeefp.h inttypes.h \
locale.h machine/endian.h machine/param.h nan.h stdint.h stdlib.h string.h \
strings.h sys/ipc.h sys/isa_defs.h sys/machine.h sys/param.h \
sys/resource.h sys/sem.h sys/stat.h sys/time.h sys/types.h unistd.h \
wchar.h wctype.h linux/types.h])
AC_CHECK_HEADERS([linux/random.h], [], [],
[[#ifdef HAVE_LINUX_TYPES_H
# include <linux/types.h>
#endif
]])
AC_CHECK_HEADERS([xlocale.h])
# Only do link tests if native. Else, hardcode.
if $GLIBCXX_IS_NATIVE; then
# We can do more elaborate tests that assume a working linker.
CANADIAN=no
GLIBCXX_CHECK_LINKER_FEATURES
GLIBCXX_CHECK_MATH_SUPPORT
GLIBCXX_CHECK_STDLIB_SUPPORT
# For /dev/random and /dev/urandom for std::random_device.
GLIBCXX_CHECK_DEV_RANDOM
# For TLS support.
GCC_CHECK_TLS
AC_CHECK_FUNCS(__cxa_thread_atexit_impl __cxa_thread_atexit)
AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc)
AC_CHECK_FUNCS(_wfopen)
AC_CHECK_FUNCS(secure_getenv)
# C11 functions for C++17 library
AC_CHECK_FUNCS(timespec_get)
# For Networking TS.
AC_CHECK_FUNCS(sockatmark)
# Non-standard functions used by C++17 std::from_chars
AC_CHECK_FUNCS(uselocale)
# For iconv support.
AM_ICONV
else
# This lets us hard-code the functionality we know we'll have in the cross
# target environment. "Let" is a sugar-coated word placed on an especially
# dull and tedious hack, actually.
#
# Here's why GLIBCXX_CHECK_MATH_SUPPORT, and other autoconf macros
# that involve linking, can't be used:
# "cannot open sim-crt0.o"
# "cannot open crt0.o"
# etc. All this is because there currently exists no unified, consistent
# way for top level CC information to be passed down to target directories:
# newlib includes, newlib linking info, libgloss versus newlib crt0.o, etc.
# When all of that is done, all of this hokey, excessive AC_DEFINE junk for
# crosses can be removed.
# If Canadian cross, then don't pick up tools from the build directory.
# Used only in GLIBCXX_EXPORT_INCLUDES.
if test -n "$with_cross_host" &&
test x"$build_alias" != x"$with_cross_host" &&
test x"$build" != x"$target";
then
CANADIAN=yes
else
CANADIAN=no
fi
# Construct crosses by hand, eliminating bits that need ld...
# GLIBCXX_CHECK_MATH_SUPPORT
# First, test for "known" system libraries. We may be using newlib even
# on a hosted environment.
if test "x${with_newlib}" = "xyes"; then
os_include_dir="os/newlib"
AC_DEFINE(HAVE_HYPOT)
# GLIBCXX_CHECK_STDLIB_SUPPORT
AC_DEFINE(HAVE_STRTOF)
AC_DEFINE(HAVE_ACOSF)
AC_DEFINE(HAVE_ASINF)
AC_DEFINE(HAVE_ATAN2F)
AC_DEFINE(HAVE_ATANF)
AC_DEFINE(HAVE_CEILF)
AC_DEFINE(HAVE_COSF)
AC_DEFINE(HAVE_COSHF)
AC_DEFINE(HAVE_EXPF)
AC_DEFINE(HAVE_FABSF)
AC_DEFINE(HAVE_FLOORF)
AC_DEFINE(HAVE_FMODF)
AC_DEFINE(HAVE_FREXPF)
AC_DEFINE(HAVE_LDEXPF)
AC_DEFINE(HAVE_LOG10F)
AC_DEFINE(HAVE_LOGF)
AC_DEFINE(HAVE_MODFF)
AC_DEFINE(HAVE_POWF)
AC_DEFINE(HAVE_SINF)
AC_DEFINE(HAVE_SINHF)
AC_DEFINE(HAVE_SQRTF)
AC_DEFINE(HAVE_TANF)
AC_DEFINE(HAVE_TANHF)
AC_DEFINE(HAVE_ICONV)
AC_DEFINE(HAVE_MEMALIGN)
case "${target}" in
*-rtems*)
case "${target}" in
bfin* | lm32* | mips* | moxie* | or1k* | v850*)
;;
*)
AC_DEFINE(HAVE_TLS)
;;
esac
AC_DEFINE(HAVE_ALIGNED_ALLOC)
AC_DEFINE(HAVE_AT_QUICK_EXIT)
AC_DEFINE(HAVE_LINK)
AC_DEFINE(HAVE_QUICK_EXIT)
AC_DEFINE(HAVE_READLINK)
AC_DEFINE(HAVE_SETENV)
AC_DEFINE(HAVE_SLEEP)
AC_DEFINE(HAVE_SOCKATMARK)
AC_DEFINE(HAVE_STRERROR_L)
AC_DEFINE(HAVE_SYMLINK)
AC_DEFINE(HAVE_TRUNCATE)
AC_DEFINE(HAVE_USLEEP)
;;
esac
elif test "x$with_headers" != "xno"; then
GLIBCXX_CROSSCONFIG
fi
# At some point, we should differentiate between architectures
# like x86, which have long double versions, and alpha/powerpc/etc.,
# which don't. For the time being, punt.
if test x"long_double_math_on_this_cpu" = x"yes"; then
AC_DEFINE(HAVE_ACOSL)
AC_DEFINE(HAVE_ASINL)
AC_DEFINE(HAVE_ATAN2L)
AC_DEFINE(HAVE_ATANL)
AC_DEFINE(HAVE_CEILL)
AC_DEFINE(HAVE_COSL)
AC_DEFINE(HAVE_COSHL)
AC_DEFINE(HAVE_EXPL)
AC_DEFINE(HAVE_FABSL)
AC_DEFINE(HAVE_FLOORL)
AC_DEFINE(HAVE_FMODL)
AC_DEFINE(HAVE_FREXPL)
AC_DEFINE(HAVE_LDEXPL)
AC_DEFINE(HAVE_LOG10L)
AC_DEFINE(HAVE_LOGL)
AC_DEFINE(HAVE_MODFL)
AC_DEFINE(HAVE_POWL)
AC_DEFINE(HAVE_SINCOSL)
AC_DEFINE(HAVE_SINL)
AC_DEFINE(HAVE_SINHL)
AC_DEFINE(HAVE_SQRTL)
AC_DEFINE(HAVE_TANL)
AC_DEFINE(HAVE_TANHL)
fi
fi
# Check for _Unwind_GetIPInfo.
GCC_CHECK_UNWIND_GETIPINFO
GCC_LINUX_FUTEX([AC_DEFINE(HAVE_LINUX_FUTEX, 1, [Define if futex syscall is available.])])
if test "$is_hosted" = yes; then
# TODO: remove this and change src/c++11/compatibility-atomic-c++0x.cc to
# use <stdint.h> instead of <gstdint.h>.
GCC_HEADER_STDINT(include/gstdint.h)
fi
GLIBCXX_ENABLE_SYMVERS([yes])
AC_SUBST(libtool_VERSION)
GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY([yes])
GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI([yes])
GLIBCXX_DEFAULT_ABI
ac_ldbl_compat=no
ac_ldbl_alt128_compat=no
ac_ldbl_ieee128_default=no
LONG_DOUBLE_COMPAT_FLAGS="-mlong-double-64"
LONG_DOUBLE_128_FLAGS=
LONG_DOUBLE_ALT128_COMPAT_FLAGS=
case "$target" in
powerpc*-*-linux* | \
sparc*-*-linux* | \
s390*-*-linux* | \
alpha*-*-linux*)
AC_TRY_COMPILE(, [
#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__))
#error no need for long double compatibility
#endif
], [ac_ldbl_compat=yes], [ac_ldbl_compat=no])
if test "$ac_ldbl_compat" = yes; then
AC_DEFINE([_GLIBCXX_LONG_DOUBLE_COMPAT],1,
[Define if compatibility should be provided for -mlong-double-64.])
port_specific_symbol_files="\$(top_srcdir)/config/os/gnu-linux/ldbl-extra.ver"
case "$target" in
powerpc*-*-linux*)
LONG_DOUBLE_COMPAT_FLAGS="$LONG_DOUBLE_COMPAT_FLAGS -mno-gnu-attribute"
# Check for IEEE128 support in libm:
AC_CHECK_LIB(m, __frexpieee128,
[ac_ldbl_ieee128_in_libc=yes],
[ac_ldbl_ieee128_in_libc=no])
if test $ac_ldbl_ieee128_in_libc = yes; then
# Determine which long double format is the compiler's default:
AC_TRY_COMPILE(, [
#ifndef __LONG_DOUBLE_IEEE128__
#error compiler defaults to ibm128
#endif
], [ac_ldbl_ieee128_default=yes], [ac_ldbl_ieee128_default=no])
# Library objects should use default long double format.
if test "$ac_ldbl_ieee128_default" = yes; then
LONG_DOUBLE_128_FLAGS="-mno-gnu-attribute"
# Except for the ones that explicitly use these flags:
LONG_DOUBLE_ALT128_COMPAT_FLAGS="-mabi=ibmlongdouble -mno-gnu-attribute -Wno-psabi"
else
LONG_DOUBLE_128_FLAGS="-mno-gnu-attribute"
LONG_DOUBLE_ALT128_COMPAT_FLAGS="-mabi=ieeelongdouble -mno-gnu-attribute -Wno-psabi"
fi
AC_DEFINE([_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT],1,
[Define if compatibility should be provided for alternative 128-bit long double formats.])
port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/os/gnu-linux/ldbl-ieee128-extra.ver"
ac_ldbl_alt128_compat=yes
else
ac_ldbl_alt128_compat=no
fi
;;
esac
fi
esac
AC_SUBST(LONG_DOUBLE_COMPAT_FLAGS)
AC_SUBST(LONG_DOUBLE_128_FLAGS)
AC_SUBST(LONG_DOUBLE_ALT128_COMPAT_FLAGS)
GLIBCXX_CONDITIONAL(GLIBCXX_LDBL_COMPAT, test $ac_ldbl_compat = yes)
GLIBCXX_CONDITIONAL(GLIBCXX_LDBL_ALT128_COMPAT, test $ac_ldbl_alt128_compat = yes)
# Check if assembler supports disabling hardware capability support.
GCC_CHECK_ASSEMBLER_HWCAP
# Check if assembler supports rdrand opcode.
GLIBCXX_CHECK_X86_RDRAND
# Check if assembler supports rdseed opcode.
GLIBCXX_CHECK_X86_RDSEED
# Check for other random number APIs
GLIBCXX_CHECK_GETENTROPY
GLIBCXX_CHECK_ARC4RANDOM
# This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
GLIBCXX_CONFIGURE_TESTSUITE
# For gthread support. Depends on GLIBCXX_ENABLE_SYMVERS.
GLIBCXX_CHECK_GTHREADS
# For Filesystem TS.
AC_CHECK_HEADERS([fcntl.h dirent.h sys/statvfs.h utime.h])
GLIBCXX_ENABLE_FILESYSTEM_TS
GLIBCXX_CHECK_FILESYSTEM_DEPS
GLIBCXX_ENABLE_BACKTRACE
# For Networking TS.
AC_CHECK_HEADERS([fcntl.h sys/ioctl.h sys/socket.h sys/uio.h poll.h netdb.h arpa/inet.h netinet/in.h netinet/tcp.h])
AC_CHECK_DECL(F_GETFL,,,[#include <fcntl.h>])
AC_CHECK_DECL(F_SETFL,,,[#include <fcntl.h>])
if test "$ac_cv_have_decl_F_GETFL$ac_cv_have_decl_F_SETFL" = yesyes ; then
AC_CHECK_DECL(O_NONBLOCK,,,[#include <fcntl.h>])
fi
# For Transactional Memory TS
GLIBCXX_CHECK_SIZE_T_MANGLING
# Check which release added std::exception_ptr for the target
GLIBCXX_CHECK_EXCEPTION_PTR_SYMVER
# For libsupc++/eh_alloc.cc defaults.
GLIBCXX_EMERGENCY_EH_ALLOC
# Define documentation rules conditionally.
# See if makeinfo has been installed and is modern enough
# that we can use it.
ACX_CHECK_PROG_VER([MAKEINFO], [makeinfo], [--version],
[GNU texinfo.* \([0-9][0-9.]*\)],
[4.[4-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_prog_makeinfo_modern = "yes")
# Check for doxygen
AC_CHECK_PROG([DOXYGEN], doxygen, yes, no)
AC_CHECK_PROG([DOT], dot, yes, no)
# Check for docbook
AC_CHECK_PROG([XMLCATALOG], xmlcatalog, yes, no)
AC_CHECK_PROG([XSLTPROC], xsltproc, yes, no)
AC_CHECK_PROG([XMLLINT], xmllint, yes, no)
GLIBCXX_CONFIGURE_DOCBOOK
# Check for xml/html dependencies.
AM_CONDITIONAL(BUILD_XML,
test $ac_cv_prog_DOXYGEN = "yes" &&
test $ac_cv_prog_DOT = "yes" &&
test $ac_cv_prog_XSLTPROC = "yes" &&
test $ac_cv_prog_XMLLINT = "yes" &&
test $glibcxx_stylesheets = "yes")
AM_CONDITIONAL(BUILD_HTML,
test $ac_cv_prog_DOXYGEN = "yes" &&
test $ac_cv_prog_DOT = "yes" &&
test $ac_cv_prog_XSLTPROC = "yes" &&
test $ac_cv_prog_XMLLINT = "yes" &&
test $glibcxx_stylesheets = "yes")
# Check for man dependencies.
AM_CONDITIONAL(BUILD_MAN,
test $ac_cv_prog_DOXYGEN = "yes" &&
test $ac_cv_prog_DOT = "yes")
# Check for pdf dependencies.
AC_CHECK_PROG([DBLATEX], dblatex, yes, no)
AC_CHECK_PROG([PDFLATEX], pdflatex, yes, no)
AM_CONDITIONAL(BUILD_PDF,
test $ac_cv_prog_DOXYGEN = "yes" &&
test $ac_cv_prog_DOT = "yes" &&
test $ac_cv_prog_XSLTPROC = "yes" &&
test $ac_cv_prog_XMLLINT = "yes" &&
test $ac_cv_prog_DBLATEX = "yes" &&
test $ac_cv_prog_PDFLATEX = "yes")
case "$build" in
*-*-darwin* ) glibcxx_include_dir_notparallel=yes ;;
* ) glibcxx_include_dir_notparallel=no ;;
esac
AM_CONDITIONAL(INCLUDE_DIR_NOTPARALLEL,
test $glibcxx_include_dir_notparallel = "yes")
# Propagate the target-specific source directories through the build chain.
ATOMICITY_SRCDIR=config/${atomicity_dir}
ATOMIC_WORD_SRCDIR=config/${atomic_word_dir}
ATOMIC_FLAGS=${atomic_flags}
CPU_DEFINES_SRCDIR=config/${cpu_defines_dir}
OS_INC_SRCDIR=config/${os_include_dir}
ERROR_CONSTANTS_SRCDIR=config/${error_constants_dir}
ABI_TWEAKS_SRCDIR=config/${abi_tweaks_dir}
CPU_OPT_EXT_RANDOM=config/${cpu_opt_ext_random}
CPU_OPT_BITS_RANDOM=config/${cpu_opt_bits_random}
AC_SUBST(ATOMICITY_SRCDIR)
AC_SUBST(ATOMIC_WORD_SRCDIR)
AC_SUBST(ATOMIC_FLAGS)
AC_SUBST(CPU_DEFINES_SRCDIR)
AC_SUBST(ABI_TWEAKS_SRCDIR)
AC_SUBST(OS_INC_SRCDIR)
AC_SUBST(ERROR_CONSTANTS_SRCDIR)
AC_SUBST(CPU_OPT_EXT_RANDOM)
AC_SUBST(CPU_OPT_BITS_RANDOM)
# Conditionalize the makefile for this target machine.
tmake_file_=
for f in ${tmake_file}
do
if test -f ${srcdir}/config/$f
then
tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
fi
done
tmake_file="${tmake_file_}"
AC_SUBST(tmake_file)
# Add CET specific flags if Intel CET is enabled.
GCC_CET_FLAGS(CET_FLAGS)
EXTRA_CXX_FLAGS="$EXTRA_CXX_FLAGS $CET_FLAGS"
EXTRA_CFLAGS="$EXTRA_CFLAGS $CET_FLAGS"
AC_SUBST(EXTRA_CFLAGS)
AC_SUBST(EXTRA_CXX_FLAGS)
# Determine cross-compile flags and AM_CONDITIONALs.
#AC_SUBST(GLIBCXX_IS_NATIVE)
#AM_CONDITIONAL(CANADIAN, test $CANADIAN = yes)
GLIBCXX_EVALUATE_CONDITIONALS
AC_CACHE_SAVE
if test ${multilib} = yes; then
multilib_arg="--enable-multilib"
else
multilib_arg=
fi
# Export all the install information.
GLIBCXX_EXPORT_INSTALL_INFO
# Export all the include and flag information to Makefiles.
GLIBCXX_EXPORT_INCLUDES
GLIBCXX_EXPORT_FLAGS
# Determine what GCC version number to use in filesystem paths.
GCC_BASE_VER
dnl In autoconf 2.5x, AC_OUTPUT is replaced by four AC_CONFIG_* macros,
dnl which can all be called multiple times as needed, plus one (different)
dnl AC_OUTPUT macro. This one lists the files to be created:
AC_CONFIG_FILES(Makefile)
AC_CONFIG_FILES([scripts/testsuite_flags],[chmod +x scripts/testsuite_flags])
AC_CONFIG_FILES([scripts/extract_symvers],[chmod +x scripts/extract_symvers])
AC_CONFIG_FILES([doc/xsl/customization.xsl])
AC_CONFIG_FILES([src/libbacktrace/backtrace-supported.h])
# Multilibs need MULTISUBDIR defined correctly in certain makefiles so
# that multilib installs will end up installed in the correct place.
# The testsuite needs it for multilib-aware ABI baseline files.
# To work around this not being passed down from config-ml.in ->
# srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
# append it here. Only modify Makefiles that have just been created.
#
# Also, get rid of this simulated-VPATH thing that automake does.
AC_CONFIG_FILES(AC_FOREACH([DIR], glibcxx_SUBDIRS, [DIR/Makefile ]),
[cat > vpsed$$ << \_EOF
s!`test -f '$<' || echo '$(srcdir)/'`!!
_EOF
sed -f vpsed$$ $ac_file > tmp$$
mv tmp$$ $ac_file
rm vpsed$$
echo 'MULTISUBDIR =' >> $ac_file
ml_norecursion=yes
. ${multi_basedir}/config-ml.in
AS_UNSET([ml_norecursion])
])
AC_CONFIG_COMMANDS([generate-headers],
[(cd include && ${MAKE-make} pch_build= )])
dnl And this actually makes things happen:
AC_OUTPUT