| dnl Autoconf configure snippets for common. |
| dnl Copyright (C) 1995-2024 Free Software Foundation, Inc. |
| dnl |
| dnl This file is part of GDB. |
| dnl |
| dnl This program is free software; you can redistribute it and/or modify |
| dnl it under the terms of the GNU General Public License as published by |
| dnl the Free Software Foundation; either version 3 of the License, or |
| dnl (at your option) any later version. |
| dnl |
| dnl This program is distributed in the hope that it will be useful, |
| dnl but WITHOUT ANY WARRANTY; without even the implied warranty of |
| dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| dnl GNU General Public License for more details. |
| dnl |
| dnl You should have received a copy of the GNU General Public License |
| dnl along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| dnl Invoke configury needed by the files in 'common'. |
| AC_DEFUN([GDB_AC_COMMON], [ |
| # Set the 'development' global. |
| . $srcdir/../bfd/development.sh |
| |
| AC_HEADER_STDC |
| AC_FUNC_ALLOCA |
| |
| WIN32APILIBS= |
| case ${host} in |
| *mingw32*) |
| AC_DEFINE(USE_WIN32API, 1, |
| [Define if we should use the Windows API, instead of the |
| POSIX API. On Windows, we use the Windows API when |
| building for MinGW, but the POSIX API when building |
| for Cygwin.]) |
| WIN32APILIBS="-lws2_32" |
| ;; |
| esac |
| |
| dnl Note that this requires codeset.m4, which is included |
| dnl by the users of common.m4. |
| AM_LANGINFO_CODESET |
| |
| AC_CHECK_HEADERS(linux/perf_event.h locale.h memory.h signal.h dnl |
| sys/resource.h sys/socket.h dnl |
| sys/un.h sys/wait.h dnl |
| thread_db.h wait.h dnl |
| termios.h dnl |
| dlfcn.h dnl |
| linux/elf.h proc_service.h dnl |
| poll.h sys/poll.h sys/select.h) |
| |
| AC_FUNC_MMAP |
| AC_FUNC_FORK |
| # Some systems (e.g. Solaris) have `socketpair' in libsocket. |
| AC_SEARCH_LIBS(socketpair, socket) |
| AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 poll socketpair sigaction \ |
| ptrace64 sbrk setns sigaltstack sigprocmask \ |
| setpgid setpgrp getrusage getauxval sigtimedwait]) |
| |
| # This is needed for RHEL 5 and uclibc-ng < 1.0.39. |
| # These did not define ADDR_NO_RANDOMIZE in sys/personality.h, |
| # only in linux/personality.h. |
| AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>]) |
| |
| AC_CHECK_DECLS([strstr]) |
| |
| # ----------------------- # |
| # Checks for structures. # |
| # ----------------------- # |
| |
| AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize]) |
| |
| # On FreeBSD we need libutil for the kinfo_get* functions. On |
| # GNU/kFreeBSD systems, FreeBSD libutil is renamed to libutil-freebsd. |
| # Figure out which one to use. |
| AC_SEARCH_LIBS(kinfo_getfile, util util-freebsd) |
| |
| # Define HAVE_KINFO_GETFILE if kinfo_getfile is available. |
| AC_CHECK_FUNCS(kinfo_getfile) |
| |
| # ----------------------- # |
| # Check for threading. # |
| # ----------------------- # |
| |
| AC_ARG_ENABLE(threading, |
| AS_HELP_STRING([--enable-threading], [include support for parallel processing of data (yes/no)]), |
| [case "$enableval" in |
| yes) want_threading=yes ;; |
| no) want_threading=no ;; |
| *) AC_MSG_ERROR([bad value $enableval for threading]) ;; |
| esac], |
| [want_threading=auto]) |
| |
| # Check for std::thread. This does not work on some platforms, like |
| # mingw using the win32 threads model with gcc older than 13, and |
| # DJGPP. |
| AC_LANG_PUSH([C++]) |
| AX_PTHREAD([threads=yes], [threads=no]) |
| save_LIBS="$LIBS" |
| LIBS="$PTHREAD_LIBS $LIBS" |
| save_CXXFLAGS="$CXXFLAGS" |
| CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS" |
| AC_CACHE_CHECK([for std::thread], |
| gdb_cv_cxx_std_thread, |
| [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( |
| dnl NOTE: this must be kept in sync with common-defs.h. |
| [[#if defined (__MINGW32__) || defined (__CYGWIN__) |
| # ifdef _WIN32_WINNT |
| # if _WIN32_WINNT < 0x0501 |
| # undef _WIN32_WINNT |
| # define _WIN32_WINNT 0x0501 |
| # endif |
| # else |
| # define _WIN32_WINNT 0x0501 |
| # endif |
| #endif /* __MINGW32__ || __CYGWIN__ */ |
| #include <thread> |
| #include <mutex> |
| void callback() { }]], |
| [[std::thread t(callback);]])], |
| gdb_cv_cxx_std_thread=yes, |
| gdb_cv_cxx_std_thread=no)]) |
| |
| if test "$threads" = "yes"; then |
| # This check must be here, while LIBS includes any necessary |
| # threading library. |
| AC_CHECK_FUNCS([pthread_sigmask pthread_setname_np]) |
| fi |
| LIBS="$save_LIBS" |
| CXXFLAGS="$save_CXXFLAGS" |
| |
| if test "$want_threading" != "no"; then |
| if test "$gdb_cv_cxx_std_thread" = "yes"; then |
| AC_DEFINE(CXX_STD_THREAD, 1, |
| [Define to 1 if std::thread works.]) |
| else |
| if test "$want_threading" = "yes"; then |
| AC_MSG_ERROR([std::thread does not work; disable threading]) |
| else |
| AC_MSG_WARN([std::thread does not work; disabling threading]) |
| fi |
| fi |
| fi |
| AC_LANG_POP |
| |
| dnl Check if sigsetjmp is available. Using AC_CHECK_FUNCS won't |
| dnl do since sigsetjmp might only be defined as a macro. |
| AC_CACHE_CHECK( |
| [for sigsetjmp], |
| [gdb_cv_func_sigsetjmp], |
| [AC_COMPILE_IFELSE( |
| [AC_LANG_PROGRAM( |
| [#include <setjmp.h>], |
| [sigjmp_buf env; |
| while (! sigsetjmp (env, 1)) |
| siglongjmp (env, 1);] |
| )], |
| [gdb_cv_func_sigsetjmp=yes], |
| [gdb_cv_func_sigsetjmp=no] |
| )] |
| ) |
| if test "$gdb_cv_func_sigsetjmp" = "yes"; then |
| AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ]) |
| fi |
| |
| AC_ARG_WITH(intel_pt, |
| AS_HELP_STRING([--with-intel-pt], [include Intel Processor Trace support (auto/yes/no)]), |
| [], [with_intel_pt=auto]) |
| AC_MSG_CHECKING([whether to use intel pt]) |
| AC_MSG_RESULT([$with_intel_pt]) |
| |
| if test "${with_intel_pt}" = no; then |
| AC_MSG_WARN([Intel Processor Trace support disabled; some features may be unavailable.]) |
| HAVE_LIBIPT=no |
| else |
| AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ |
| #include <linux/perf_event.h> |
| #ifndef PERF_ATTR_SIZE_VER5 |
| # error |
| #endif |
| ]])], [perf_event=yes], [perf_event=no]) |
| if test "$perf_event" != yes; then |
| if test "$with_intel_pt" = yes; then |
| AC_MSG_ERROR([linux/perf_event.h missing or too old]) |
| else |
| AC_MSG_WARN([linux/perf_event.h missing or too old; some features may be unavailable.]) |
| fi |
| fi |
| |
| AC_LIB_HAVE_LINKFLAGS([ipt], [], [#include "intel-pt.h"], [pt_insn_alloc_decoder (0);]) |
| if test "$HAVE_LIBIPT" != yes; then |
| if test "$with_intel_pt" = yes; then |
| AC_MSG_ERROR([libipt is missing or unusable]) |
| else |
| AC_MSG_WARN([libipt is missing or unusable; some features may be unavailable.]) |
| fi |
| else |
| save_LIBS=$LIBS |
| LIBS="$LIBS $LIBIPT" |
| AC_CHECK_FUNCS(pt_insn_event) |
| AC_CHECK_MEMBERS([struct pt_insn.enabled, struct pt_insn.resynced], [], [], |
| [#include <intel-pt.h>]) |
| AC_CHECK_MEMBERS([struct pt_event.variant.ptwrite], [], [], |
| [#include <intel-pt.h>]) |
| LIBS=$save_LIBS |
| fi |
| fi |
| |
| # Check if the compiler and runtime support printing long longs. |
| |
| AC_CACHE_CHECK([for long long support in printf], |
| gdb_cv_printf_has_long_long, |
| [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], |
| [[char buf[32]; |
| long long l = 0; |
| l = (l << 16) + 0x0123; |
| l = (l << 16) + 0x4567; |
| l = (l << 16) + 0x89ab; |
| l = (l << 16) + 0xcdef; |
| sprintf (buf, "0x%016llx", l); |
| return (strcmp ("0x0123456789abcdef", buf));]])], |
| gdb_cv_printf_has_long_long=yes, |
| gdb_cv_printf_has_long_long=no, |
| gdb_cv_printf_has_long_long=no)]) |
| if test "$gdb_cv_printf_has_long_long" = yes; then |
| AC_DEFINE(PRINTF_HAS_LONG_LONG, 1, |
| [Define to 1 if the "%ll" format works to print long longs.]) |
| fi |
| |
| BFD_SYS_PROCFS_H |
| if test "$ac_cv_header_sys_procfs_h" = yes; then |
| BFD_HAVE_SYS_PROCFS_TYPE(gregset_t) |
| BFD_HAVE_SYS_PROCFS_TYPE(fpregset_t) |
| BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t) |
| BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t) |
| BFD_HAVE_SYS_PROCFS_TYPE(prgregset32_t) |
| BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t) |
| BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t) |
| BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t) |
| fi |
| |
| dnl xxhash support |
| # Check for xxhash |
| AC_ARG_WITH(xxhash, |
| AS_HELP_STRING([--with-xxhash], [use libxxhash for hashing (faster) (auto/yes/no)]), |
| [], [with_xxhash=auto]) |
| |
| if test "x$with_xxhash" != "xno"; then |
| AC_LIB_HAVE_LINKFLAGS([xxhash], [], |
| [#include <xxhash.h>], |
| [XXH32("foo", 3, 0); |
| ]) |
| if test "$HAVE_LIBXXHASH" != yes; then |
| if test "$with_xxhash" = yes; then |
| AC_MSG_ERROR([xxhash is missing or unusable]) |
| fi |
| fi |
| if test "x$with_xxhash" = "xauto"; then |
| with_xxhash="$HAVE_LIBXXHASH" |
| fi |
| fi |
| |
| AC_MSG_CHECKING([whether to use xxhash]) |
| AC_MSG_RESULT([$with_xxhash]) |
| ]) |
| |
| dnl Check that the provided value ($1) is either "yes" or "no". If not, |
| dnl emit an error message mentionning the configure option $2, and abort |
| dnl the script. |
| AC_DEFUN([GDB_CHECK_YES_NO_VAL], |
| [ |
| case $1 in |
| yes | no) |
| ;; |
| *) |
| AC_MSG_ERROR([bad value $1 for $2]) |
| ;; |
| esac |
| ]) |
| |
| dnl Check that the provided value ($1) is either "yes", "no" or "auto". If not, |
| dnl emit an error message mentionning the configure option $2, and abort |
| dnl the script. |
| AC_DEFUN([GDB_CHECK_YES_NO_AUTO_VAL], |
| [ |
| case $1 in |
| yes | no | auto) |
| ;; |
| *) |
| AC_MSG_ERROR([bad value $1 for $2]) |
| ;; |
| esac |
| ]) |