|
|
|
@ -243,27 +243,27 @@ AC_ARG_ENABLE(man,
|
|
|
|
|
enable_man=yes)
|
|
|
|
|
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
|
|
|
|
|
|
|
|
|
|
# Enable debug
|
|
|
|
|
dnl Enable debug
|
|
|
|
|
AC_ARG_ENABLE([debug],
|
|
|
|
|
[AS_HELP_STRING([--enable-debug],
|
|
|
|
|
[use compiler flags and macros suited for debugging (default is no)])],
|
|
|
|
|
[enable_debug=$enableval],
|
|
|
|
|
[enable_debug=no])
|
|
|
|
|
|
|
|
|
|
# Enable different -fsanitize options
|
|
|
|
|
dnl Enable different -fsanitize options
|
|
|
|
|
AC_ARG_WITH([sanitizers],
|
|
|
|
|
[AS_HELP_STRING([--with-sanitizers],
|
|
|
|
|
[comma separated list of extra sanitizers to build with (default is none enabled)])],
|
|
|
|
|
[use_sanitizers=$withval])
|
|
|
|
|
|
|
|
|
|
# Enable gprof profiling
|
|
|
|
|
dnl Enable gprof profiling
|
|
|
|
|
AC_ARG_ENABLE([gprof],
|
|
|
|
|
[AS_HELP_STRING([--enable-gprof],
|
|
|
|
|
[use gprof profiling compiler flags (default is no)])],
|
|
|
|
|
[enable_gprof=$enableval],
|
|
|
|
|
[enable_gprof=no])
|
|
|
|
|
|
|
|
|
|
# Turn warnings into errors
|
|
|
|
|
dnl Turn warnings into errors
|
|
|
|
|
AC_ARG_ENABLE([werror],
|
|
|
|
|
[AS_HELP_STRING([--enable-werror],
|
|
|
|
|
[Treat certain compiler warnings as errors (default is no)])],
|
|
|
|
@ -274,15 +274,15 @@ AC_LANG_PUSH([C++])
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
|
|
|
|
|
|
|
|
|
|
if test "x$enable_debug" = xyes; then
|
|
|
|
|
# Clear default -g -O2 flags
|
|
|
|
|
dnl Clear default -g -O2 flags
|
|
|
|
|
if test "x$CXXFLAGS_overridden" = xno; then
|
|
|
|
|
CXXFLAGS=""
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Disable all optimizations
|
|
|
|
|
dnl Disable all optimizations
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-O0], [[DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -O0"]],,[[$CXXFLAG_WERROR]])
|
|
|
|
|
|
|
|
|
|
# Prefer -g3, fall back to -g if that is unavailable.
|
|
|
|
|
dnl Prefer -g3, fall back to -g if that is unavailable.
|
|
|
|
|
AX_CHECK_COMPILE_FLAG(
|
|
|
|
|
[-g3],
|
|
|
|
|
[[DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -g3"]],
|
|
|
|
@ -295,19 +295,19 @@ if test "x$enable_debug" = xyes; then
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if test x$use_sanitizers != x; then
|
|
|
|
|
# First check if the compiler accepts flags. If an incompatible pair like
|
|
|
|
|
# -fsanitize=address,thread is used here, this check will fail. This will also
|
|
|
|
|
# fail if a bad argument is passed, e.g. -fsanitize=undfeined
|
|
|
|
|
dnl First check if the compiler accepts flags. If an incompatible pair like
|
|
|
|
|
dnl -fsanitize=address,thread is used here, this check will fail. This will also
|
|
|
|
|
dnl fail if a bad argument is passed, e.g. -fsanitize=undfeined
|
|
|
|
|
AX_CHECK_COMPILE_FLAG(
|
|
|
|
|
[[-fsanitize=$use_sanitizers]],
|
|
|
|
|
[[SANITIZER_CXXFLAGS=-fsanitize=$use_sanitizers]],
|
|
|
|
|
[AC_MSG_ERROR([compiler did not accept requested flags])])
|
|
|
|
|
|
|
|
|
|
# Some compilers (e.g. GCC) require additional libraries like libasan,
|
|
|
|
|
# libtsan, libubsan, etc. Make sure linking still works with the sanitize
|
|
|
|
|
# flag. This is a separate check so we can give a better error message when
|
|
|
|
|
# the sanitize flags are supported by the compiler but the actual sanitizer
|
|
|
|
|
# libs are missing.
|
|
|
|
|
dnl Some compilers (e.g. GCC) require additional libraries like libasan,
|
|
|
|
|
dnl libtsan, libubsan, etc. Make sure linking still works with the sanitize
|
|
|
|
|
dnl flag. This is a separate check so we can give a better error message when
|
|
|
|
|
dnl the sanitize flags are supported by the compiler but the actual sanitizer
|
|
|
|
|
dnl libs are missing.
|
|
|
|
|
AX_CHECK_LINK_FLAG(
|
|
|
|
|
[[-fsanitize=$use_sanitizers]],
|
|
|
|
|
[[SANITIZER_LDFLAGS=-fsanitize=$use_sanitizers]],
|
|
|
|
@ -344,9 +344,9 @@ if test "x$CXXFLAGS_overridden" = "xno"; then
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-Wredundant-decls],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wredundant-decls"],,[[$CXXFLAG_WERROR]])
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-Wunused-variable],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wunused-variable"],,[[$CXXFLAG_WERROR]])
|
|
|
|
|
|
|
|
|
|
## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
|
|
|
|
|
## unknown options if any other warning is produced. Test the -Wfoo case, and
|
|
|
|
|
## set the -Wno-foo case if it works.
|
|
|
|
|
dnl Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
|
|
|
|
|
dnl unknown options if any other warning is produced. Test the -Wfoo case, and
|
|
|
|
|
dnl set the -Wno-foo case if it works.
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[NOWARN_CXXFLAGS="$NOWARN_CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-Wself-assign],[NOWARN_CXXFLAGS="$NOWARN_CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[NOWARN_CXXFLAGS="$NOWARN_CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
|
|
|
|
@ -361,9 +361,9 @@ enable_shani=no
|
|
|
|
|
|
|
|
|
|
if test "x$use_asm" = "xyes"; then
|
|
|
|
|
|
|
|
|
|
# Check for optional instruction set support. Enabling these does _not_ imply that all code will
|
|
|
|
|
# be compiled with them, rather that specific objects/libs may use them after checking for runtime
|
|
|
|
|
# compatibility.
|
|
|
|
|
dnl Check for optional instruction set support. Enabling these does _not_ imply that all code will
|
|
|
|
|
dnl be compiled with them, rather that specific objects/libs may use them after checking for runtime
|
|
|
|
|
dnl compatibility.
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-msse4.1],[[SSE41_CXXFLAGS="-msse4.1"]],,[[$CXXFLAG_WERROR]])
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-mavx -mavx2],[[AVX2_CXXFLAGS="-mavx -mavx2"]],,[[$CXXFLAG_WERROR]])
|
|
|
|
@ -506,8 +506,8 @@ case $host in
|
|
|
|
|
AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(libiphlpapi missing))
|
|
|
|
|
AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(libcrypt32 missing))
|
|
|
|
|
|
|
|
|
|
# -static is interpreted by libtool, where it has a different meaning.
|
|
|
|
|
# In libtool-speak, it's -all-static.
|
|
|
|
|
dnl -static is interpreted by libtool, where it has a different meaning.
|
|
|
|
|
dnl In libtool-speak, it's -all-static.
|
|
|
|
|
AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
|
|
|
|
|
|
|
|
|
|
AC_PATH_PROG([MAKENSIS], [makensis], none)
|
|
|
|
@ -673,11 +673,11 @@ AC_C_BIGENDIAN
|
|
|
|
|
dnl Check for pthread compile/link requirements
|
|
|
|
|
AX_PTHREAD
|
|
|
|
|
|
|
|
|
|
# The following macro will add the necessary defines to bitcoin-config.h, but
|
|
|
|
|
# they also need to be passed down to any subprojects. Pull the results out of
|
|
|
|
|
# the cache and add them to CPPFLAGS.
|
|
|
|
|
dnl The following macro will add the necessary defines to bitcoin-config.h, but
|
|
|
|
|
dnl they also need to be passed down to any subprojects. Pull the results out of
|
|
|
|
|
dnl the cache and add them to CPPFLAGS.
|
|
|
|
|
AC_SYS_LARGEFILE
|
|
|
|
|
# detect POSIX or GNU variant of strerror_r
|
|
|
|
|
dnl detect POSIX or GNU variant of strerror_r
|
|
|
|
|
AC_FUNC_STRERROR_R
|
|
|
|
|
|
|
|
|
|
if test x$ac_cv_sys_file_offset_bits != x &&
|
|
|
|
@ -700,12 +700,12 @@ AX_GCC_FUNC_ATTRIBUTE([dllimport])
|
|
|
|
|
|
|
|
|
|
if test x$use_glibc_compat != xno; then
|
|
|
|
|
|
|
|
|
|
#glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
|
|
|
|
|
#in anyway for back-compat.
|
|
|
|
|
dnl glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
|
|
|
|
|
dnl in anyway for back-compat.
|
|
|
|
|
AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(librt missing))
|
|
|
|
|
|
|
|
|
|
#__fdelt_chk's params and return type have changed from long unsigned int to long int.
|
|
|
|
|
# See which one is present here.
|
|
|
|
|
dnl __fdelt_chk's params and return type have changed from long unsigned int to long int.
|
|
|
|
|
dnl See which one is present here.
|
|
|
|
|
AC_MSG_CHECKING(__fdelt_chk type)
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
|
|
|
|
|
#undef _FORTIFY_SOURCE
|
|
|
|
@ -741,22 +741,22 @@ if test "x$enable_gprof" = xyes; then
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if test x$TARGET_OS != xwindows; then
|
|
|
|
|
# All windows code is PIC, forcing it on just adds useless compile warnings
|
|
|
|
|
dnl All windows code is PIC, forcing it on just adds useless compile warnings
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# All versions of gcc that we commonly use for building are subject to bug
|
|
|
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90348. To work around that, set
|
|
|
|
|
# -fstack-reuse=none for all gcc builds. (Only gcc understands this flag)
|
|
|
|
|
dnl All versions of gcc that we commonly use for building are subject to bug
|
|
|
|
|
dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90348. To work around that, set
|
|
|
|
|
dnl -fstack-reuse=none for all gcc builds. (Only gcc understands this flag)
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-fstack-reuse=none],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-reuse=none"])
|
|
|
|
|
if test x$use_hardening != xno; then
|
|
|
|
|
use_hardening=yes
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
|
|
|
|
|
|
|
|
|
|
# When enable_debug is yes, all optimizations are disabled.
|
|
|
|
|
# However, FORTIFY_SOURCE requires that there is some level of optimization, otherwise it does nothing and just creates a compiler warning.
|
|
|
|
|
# Since FORTIFY_SOURCE is a no-op without optimizations, do not enable it when enable_debug is yes.
|
|
|
|
|
dnl When enable_debug is yes, all optimizations are disabled.
|
|
|
|
|
dnl However, FORTIFY_SOURCE requires that there is some level of optimization, otherwise it does nothing and just creates a compiler warning.
|
|
|
|
|
dnl Since FORTIFY_SOURCE is a no-op without optimizations, do not enable it when enable_debug is yes.
|
|
|
|
|
if test x$enable_debug != xyes; then
|
|
|
|
|
AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
|
|
|
|
|
AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
|
|
|
|
@ -788,8 +788,8 @@ fi
|
|
|
|
|
|
|
|
|
|
AC_CHECK_HEADERS([endian.h sys/endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h sys/sysctl.h vm/vm_param.h sys/vmmeter.h sys/resources.h])
|
|
|
|
|
|
|
|
|
|
# FD_ZERO may be dependent on a declaration of memcpy, e.g. in SmartOS
|
|
|
|
|
# check that it fails to build without memcpy, then that it builds with
|
|
|
|
|
dnl FD_ZERO may be dependent on a declaration of memcpy, e.g. in SmartOS
|
|
|
|
|
dnl check that it fails to build without memcpy, then that it builds with
|
|
|
|
|
AC_MSG_CHECKING(FD_ZERO memcpy dependence)
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
|
|
|
#include <cstddef>
|
|
|
|
@ -827,7 +827,7 @@ AC_CHECK_DECLS([getifaddrs, freeifaddrs],,,
|
|
|
|
|
)
|
|
|
|
|
AC_CHECK_DECLS([strnlen])
|
|
|
|
|
|
|
|
|
|
# Check for daemon(3), unrelated to --with-daemon (although used by it)
|
|
|
|
|
dnl Check for daemon(3), unrelated to --with-daemon (although used by it)
|
|
|
|
|
AC_CHECK_DECLS([daemon])
|
|
|
|
|
|
|
|
|
|
AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
|
|
|
|
@ -893,19 +893,19 @@ if test "x$use_thread_local" = xyes || { test "x$use_thread_local" = xauto && te
|
|
|
|
|
[
|
|
|
|
|
case $host in
|
|
|
|
|
*mingw*)
|
|
|
|
|
# mingw32's implementation of thread_local has also been shown to behave
|
|
|
|
|
# erroneously under concurrent usage; see:
|
|
|
|
|
# https://gist.github.com/jamesob/fe9a872051a88b2025b1aa37bfa98605
|
|
|
|
|
dnl mingw32's implementation of thread_local has also been shown to behave
|
|
|
|
|
dnl erroneously under concurrent usage; see:
|
|
|
|
|
dnl https://gist.github.com/jamesob/fe9a872051a88b2025b1aa37bfa98605
|
|
|
|
|
AC_MSG_RESULT(no)
|
|
|
|
|
;;
|
|
|
|
|
*darwin*)
|
|
|
|
|
# TODO enable thread_local on later versions of Darwin where it is
|
|
|
|
|
# supported (per https://stackoverflow.com/a/29929949)
|
|
|
|
|
dnl TODO enable thread_local on later versions of Darwin where it is
|
|
|
|
|
dnl supported (per https://stackoverflow.com/a/29929949)
|
|
|
|
|
AC_MSG_RESULT(no)
|
|
|
|
|
;;
|
|
|
|
|
*freebsd*)
|
|
|
|
|
# FreeBSD's implementation of thread_local is also buggy (per
|
|
|
|
|
# https://groups.google.com/d/msg/bsdmailinglist/22ncTZAbDp4/Dii_pII5AwAJ)
|
|
|
|
|
dnl FreeBSD's implementation of thread_local is also buggy (per
|
|
|
|
|
dnl https://groups.google.com/d/msg/bsdmailinglist/22ncTZAbDp4/Dii_pII5AwAJ)
|
|
|
|
|
AC_MSG_RESULT(no)
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
@ -921,7 +921,7 @@ if test "x$use_thread_local" = xyes || { test "x$use_thread_local" = xauto && te
|
|
|
|
|
LDFLAGS="$TEMP_LDFLAGS"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Check for different ways of gathering OS randomness
|
|
|
|
|
dnl Check for different ways of gathering OS randomness
|
|
|
|
|
AC_MSG_CHECKING(for Linux getrandom syscall)
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
|
|
|
|
|
#include <sys/syscall.h>
|
|
|
|
@ -975,7 +975,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdint.h>
|
|
|
|
|
[ AC_MSG_RESULT(no)]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Check for reduced exports
|
|
|
|
|
dnl Check for reduced exports
|
|
|
|
|
if test x$use_reduce_exports = xyes; then
|
|
|
|
|
AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
|
|
|
|
|
[AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
|
|
|
|
|