1 dnl Autoconf configure script for GDB server.
2 dnl Copyright (C) 2000-2013 Free Software Foundation, Inc.
4 dnl This file is part of GDB.
6 dnl This program is free software; you can redistribute it and/or modify
7 dnl it under the terms of the GNU General Public License as published by
8 dnl the Free Software Foundation; either version 3 of the License, or
9 dnl (at your option) any later version.
11 dnl This program is distributed in the hope that it will be useful,
12 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 dnl GNU General Public License for more details.
16 dnl You should have received a copy of the GNU General Public License
17 dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
19 dnl Process this file with autoconf to produce a configure script.
24 AC_CONFIG_HEADER(config.h:config.in)
44 # Set the 'development' global.
45 . $srcdir/../development.sh
47 # Enable -lmcheck by default (it provides cheap-enough memory
48 # mangling), but turn it off for releases.
54 GDB_AC_LIBMCHECK(${libmcheck_default})
56 # Dependency checking.
58 ZW_PROG_COMPILER_DEPENDENCIES([CC])
60 # Check for the 'make' the user wants to use.
61 AC_CHECK_PROGS(MAKE, make)
63 case "`$MAKE --version 2>&1 | sed 1q`" in
68 AM_CONDITIONAL(GMAKE, test "$MAKE_IS_GNU" = yes)
71 # Configure gnulib. We can't use AC_CONFIG_SUBDIRS as that'd expect
72 # to find the the source subdir to be configured directly under
73 # gdbserver/. We need to build gnulib under some other directory not
74 # "gnulib", to avoid the problem of both GDB and GDBserver wanting to
75 # build it in the same directory, when building in the source dir.
76 ACX_CONFIGURE_DIR(["../gnulib"], ["build-gnulib-gdbserver"])
78 AC_CHECK_HEADERS(sgtty.h termio.h termios.h sys/reg.h string.h dnl
79 proc_service.h sys/procfs.h thread_db.h linux/elf.h dnl
81 errno.h fcntl.h signal.h sys/file.h malloc.h dnl
82 sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl
83 netinet/tcp.h arpa/inet.h sys/wait.h wait.h sys/un.h dnl
85 AC_CHECK_FUNCS(pread pwrite pread64 readlink fdwalk pipe2)
86 AC_REPLACE_FUNCS(vasprintf vsnprintf)
92 AC_ARG_WITH(ust, [ --with-ust=PATH Specify prefix directory for the installed UST package
93 Equivalent to --with-ust-include=PATH/include
94 plus --with-ust-lib=PATH/lib])
95 AC_ARG_WITH(ust_include, [ --with-ust-include=PATH Specify directory for installed UST include files])
96 AC_ARG_WITH(ust_lib, [ --with-ust-lib=PATH Specify the directory for the installed UST library])
108 ustlibs="-L$with_ust/lib -lust"
109 ustinc="-I$with_ust/include "
112 if test "x$with_ust_include" != x; then
113 ustinc="-I$with_ust_include "
115 if test "x$with_ust_lib" != x; then
116 ustlibs="-L$with_ust_lib -lust"
119 if test "x$with_ust" != "xno"; then
120 saved_CFLAGS="$CFLAGS"
121 CFLAGS="$CFLAGS $ustinc"
122 AC_MSG_CHECKING([for ust])
124 #define CONFIG_UST_GDB_INTEGRATION
127 [AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_UST, 1, [Define if UST is available])],
128 [AC_MSG_RESULT([no]); ustlibs= ; ustinc= ])
129 CFLAGS="$saved_CFLAGS"
132 # Flags needed for UST
136 AC_ARG_ENABLE(werror,
137 AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]),
138 [case "${enableval}" in
139 yes | y) ERROR_ON_WARNING="yes" ;;
140 no | n) ERROR_ON_WARNING="no" ;;
141 *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;;
144 # Enable -Werror by default when using gcc
145 if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
150 if test "${ERROR_ON_WARNING}" = yes ; then
151 WERROR_CFLAGS="-Werror"
154 build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
155 -Wformat-nonliteral -Wno-char-subscripts -Wempty-body"
158 if test "x$GCC" = xyes
160 AC_MSG_CHECKING(compiler warning flags)
161 # Separate out the -Werror flag as some files just cannot be
162 # compiled with it enabled.
163 for w in ${build_warnings}; do
165 -Werr*) WERROR_CFLAGS=-Werror ;;
166 *) # Check that GCC accepts it
167 saved_CFLAGS="$CFLAGS"
169 AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",)
170 CFLAGS="$saved_CFLAGS"
173 AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS})
175 AC_SUBST(WARN_CFLAGS)
176 AC_SUBST(WERROR_CFLAGS)
178 dnl dladdr is glibc-specific. It is used by thread-db.c but only for
179 dnl debugging messages. It lives in -ldl which is handled below so we don't
180 dnl use AC_CHECK_LIB (or AC_SEARCH_LIBS) here. Instead we just temporarily
184 AC_CHECK_FUNCS(dladdr)
188 AC_MSG_CHECKING(for errno)
192 #endif], [static int x; x = errno;],
193 [AC_MSG_RESULT(yes - in errno.h); AC_DEFINE(HAVE_ERRNO, 1, [Define if errno is available]) have_errno=yes])
194 if test $have_errno = no; then
198 #endif], [extern int errno; static int x; x = errno;],
199 [AC_MSG_RESULT(yes - must define); AC_DEFINE(HAVE_ERRNO, 1, [Define if errno is available]) AC_DEFINE(MUST_DEFINE_ERRNO, 1, [Checking if errno must be defined])],
203 AC_CHECK_DECLS([strerror, strstr, perror, vasprintf, vsnprintf])
205 AC_CHECK_TYPES(socklen_t, [], [],
206 [#include <sys/types.h>
207 #include <sys/socket.h>
210 AC_CHECK_TYPES([Elf32_auxv_t, Elf64_auxv_t], [], [],
214 ACX_PKGVERSION([GDB])
215 ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/])
216 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description])
217 AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"], [Bug reporting address])
219 # Check for various supplementary target information (beyond the
220 # triplet) which might affect the choices in configure.srv.
225 AC_CACHE_CHECK([if building for x86-64], [gdb_cv_i386_is_x86_64],
226 [save_CPPFLAGS="$CPPFLAGS"
227 CPPFLAGS="$CPPFLAGS $CFLAGS"
228 AC_EGREP_CPP([got it], [
232 ], [gdb_cv_i386_is_x86_64=yes],
233 [gdb_cv_i386_is_x86_64=no])
234 CPPFLAGS="$save_CPPFLAGS"])
237 AC_CACHE_CHECK([if building for Coldfire], [gdb_cv_m68k_is_coldfire],
238 [save_CPPFLAGS="$CPPFLAGS"
239 CPPFLAGS="$CPPFLAGS $CFLAGS"
240 AC_EGREP_CPP([got it], [
244 ], [gdb_cv_m68k_is_coldfire=yes],
245 [gdb_cv_m68k_is_coldfire=no])
246 CPPFLAGS="$save_CPPFLAGS"])
250 . ${srcdir}/configure.srv
252 if test "${srv_mingwce}" = "yes"; then
254 elif test "${srv_mingw}" = "yes"; then
255 LIBS="$LIBS -lws2_32"
256 elif test "${srv_qnx}" = "yes"; then
257 LIBS="$LIBS -lsocket"
258 elif test "${srv_lynxos}" = "yes"; then
259 LIBS="$LIBS -lnetinet"
262 if test "${srv_mingw}" = "yes"; then
263 AC_DEFINE(USE_WIN32API, 1,
264 [Define if we should use the Windows API, instead of the
265 POSIX API. On Windows, we use the Windows API when
266 building for MinGW, but the POSIX API when building
270 if test "${srv_linux_usrregs}" = "yes"; then
271 AC_DEFINE(HAVE_LINUX_USRREGS, 1,
272 [Define if the target supports PTRACE_PEEKUSR for register ]
276 if test "${srv_linux_regsets}" = "yes"; then
277 AC_DEFINE(HAVE_LINUX_REGSETS, 1,
278 [Define if the target supports register sets.])
280 AC_MSG_CHECKING(for PTRACE_GETREGS)
281 AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getregs,
282 [AC_TRY_COMPILE([#include <sys/ptrace.h>],
284 [gdbsrv_cv_have_ptrace_getregs=yes],
285 [gdbsrv_cv_have_ptrace_getregs=no])])
286 AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getregs)
287 if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then
288 AC_DEFINE(HAVE_PTRACE_GETREGS, 1,
289 [Define if the target supports PTRACE_GETREGS for register ]
293 AC_MSG_CHECKING(for PTRACE_GETFPXREGS)
294 AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getfpxregs,
295 [AC_TRY_COMPILE([#include <sys/ptrace.h>],
296 [PTRACE_GETFPXREGS;],
297 [gdbsrv_cv_have_ptrace_getfpxregs=yes],
298 [gdbsrv_cv_have_ptrace_getfpxregs=no])])
299 AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getfpxregs)
300 if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then
301 AC_DEFINE(HAVE_PTRACE_GETFPXREGS, 1,
302 [Define if the target supports PTRACE_GETFPXREGS for extended ]
307 if test "${srv_linux_btrace}" = "yes"; then
308 AC_DEFINE(HAVE_LINUX_BTRACE, 1,
309 [Define if the target supports branch tracing.])
312 if test "$ac_cv_header_sys_procfs_h" = yes; then
313 BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
314 BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
315 BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
316 BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
319 dnl Some systems (e.g., Android) have lwpid_t defined in libthread_db.h.
320 if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then
321 GDBSERVER_HAVE_THREAD_DB_TYPE(lwpid_t)
324 dnl Some systems (e.g., Android) have psaddr_t defined in libthread_db.h.
325 if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then
326 GDBSERVER_HAVE_THREAD_DB_TYPE(psaddr_t)
329 dnl Check for libdl, but do not add it to LIBS as only gdbserver
330 dnl needs it (and gdbreplay doesn't).
332 AC_CHECK_LIB(dl, dlopen)
338 if test "$srv_linux_thread_db" = "yes"; then
339 if test "$ac_cv_lib_dl_dlopen" = "yes"; then
341 AC_MSG_CHECKING(for the dynamic export flag)
342 old_LDFLAGS="$LDFLAGS"
343 # Older GNU ld supports --export-dynamic but --dynamic-list may not be
345 RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list"
346 LDFLAGS="$LDFLAGS $RDYNAMIC"
348 [found="-Wl,--dynamic-list"
349 RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'],
350 [RDYNAMIC="-rdynamic"
351 LDFLAGS="$old_LDFLAGS $RDYNAMIC"
357 LDFLAGS="$old_LDFLAGS"
358 AC_MSG_RESULT($found)
360 srv_libs="-lthread_db"
363 srv_thread_depfiles="thread-db.o proc-service.o"
364 AC_DEFINE(USE_THREAD_DB, 1, [Define if we should use libthread_db.])
365 AC_CACHE_CHECK([for TD_VERSION], gdbsrv_cv_have_td_version,
366 [AC_TRY_COMPILE([#include <thread_db.h>], [TD_VERSION;],
367 [gdbsrv_cv_have_td_version=yes],
368 [gdbsrv_cv_have_td_version=no])])
369 if test $gdbsrv_cv_have_td_version = yes; then
370 AC_DEFINE(HAVE_TD_VERSION, 1, [Define if TD_VERSION is available.])
374 AC_ARG_WITH(libthread-db,
375 AS_HELP_STRING([--with-libthread-db=PATH], [use given libthread_db directly]),
376 [srv_libthread_db_path="${withval}"
377 srv_libs="$srv_libthread_db_path"
380 if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then
381 AC_DEFINE(USE_LIBTHREAD_DB_DIRECTLY, 1, [Define if we should use libthread_db directly.])
384 if test "$srv_xmlfiles" != ""; then
385 srv_xmlbuiltin="xml-builtin.o"
386 AC_DEFINE(USE_XML, 1, [Define if an XML target description is available.])
388 tmp_xmlfiles=$srv_xmlfiles
390 for f in $tmp_xmlfiles; do
391 srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f"
395 GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles"
396 GDBSERVER_LIBS="$srv_libs"
398 dnl Check whether the target supports __sync_*_compare_and_swap.
399 AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
400 gdbsrv_cv_have_sync_builtins, [
401 AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);],
402 gdbsrv_cv_have_sync_builtins=yes,
403 gdbsrv_cv_have_sync_builtins=no)])
404 if test $gdbsrv_cv_have_sync_builtins = yes; then
405 AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
406 [Define to 1 if the target supports __sync_*_compare_and_swap])
409 dnl Check for -fvisibility=hidden support in the compiler.
410 saved_cflags="$CFLAGS"
411 CFLAGS="$CFLAGS -fvisibility=hidden"
412 AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),
413 [gdbsrv_cv_have_visibility_hidden=yes],
414 [gdbsrv_cv_have_visibility_hidden=no])
415 CFLAGS="$saved_cflags"
417 dnl Check if we can disable the virtual address space randomization.
418 dnl The functionality of setarch -R.
419 AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
420 define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [
421 # if !HAVE_DECL_ADDR_NO_RANDOMIZE
422 # define ADDR_NO_RANDOMIZE 0x0040000
424 /* Test the flag could be set and stays set. */
425 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
426 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
428 AC_RUN_IFELSE([PERSONALITY_TEST],
429 [gdbsrv_cv_have_personality=true],
430 [gdbsrv_cv_have_personality=false],
431 [AC_LINK_IFELSE([PERSONALITY_TEST],
432 [gdbsrv_cv_have_personality=true],
433 [gdbsrv_cv_have_personality=false])])
434 if $gdbsrv_cv_have_personality
436 AC_DEFINE([HAVE_PERSONALITY], 1,
437 [Define if you support the personality syscall.])
444 # check whether to enable the inprocess agent
445 if test "$ipa_obj" != "" \
446 -a "$gdbsrv_cv_have_sync_builtins" = yes \
447 -a "$gdbsrv_cv_have_visibility_hidden" = yes; then
453 AC_ARG_ENABLE(inprocess-agent,
454 AS_HELP_STRING([--enable-inprocess-agent], [inprocess agent]),
455 [case "$enableval" in
456 yes) want_ipa=true ;;
457 no) want_ipa=false ;;
458 *) AC_MSG_ERROR([bad value $enableval for inprocess-agent]) ;;
460 [want_ipa=$have_ipa])
464 IPA_DEPFILES="$ipa_obj"
465 extra_libraries="$extra_libraries libinproctrace.so"
467 AC_MSG_ERROR([inprocess agent not supported for this target])
471 AC_SUBST(GDBSERVER_DEPFILES)
472 AC_SUBST(GDBSERVER_LIBS)
473 AC_SUBST(srv_xmlbuiltin)
474 AC_SUBST(srv_xmlfiles)
475 AC_SUBST(IPA_DEPFILES)
476 AC_SUBST(extra_libraries)
478 GNULIB=build-gnulib-gdbserver/import
481 if test x"$STDINT_H" != x; then
482 GNULIB_STDINT_H=$GNULIB/$STDINT_H
484 AC_SUBST(GNULIB_STDINT_H)
486 # For --version, we want to the print --host/--target exactly
487 # as passed to configure. But if those were not specified, then
488 # print the canonical host/target.
489 version_host=${host_alias:-$host}
490 version_target=${target_alias:-$target}
491 AC_SUBST(version_host)
492 AC_SUBST(version_target)
495 [case x$CONFIG_HEADERS in