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 ACX_NONCANONICAL_TARGET
59 # Dependency checking.
61 ZW_PROG_COMPILER_DEPENDENCIES([CC])
63 # Check for the 'make' the user wants to use.
64 AC_CHECK_PROGS(MAKE, make)
66 case "`$MAKE --version 2>&1 | sed 1q`" in
71 AM_CONDITIONAL(GMAKE, test "$MAKE_IS_GNU" = yes)
74 # Configure gnulib. We can't use AC_CONFIG_SUBDIRS as that'd expect
75 # to find the the source subdir to be configured directly under
76 # gdbserver/. We need to build gnulib under some other directory not
77 # "gnulib", to avoid the problem of both GDB and GDBserver wanting to
78 # build it in the same directory, when building in the source dir.
79 ACX_CONFIGURE_DIR(["../gnulib"], ["build-gnulib-gdbserver"])
81 AC_CHECK_HEADERS(sgtty.h termio.h termios.h sys/reg.h string.h dnl
82 proc_service.h sys/procfs.h thread_db.h linux/elf.h dnl
84 errno.h fcntl.h signal.h sys/file.h malloc.h dnl
85 sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl
86 netinet/tcp.h arpa/inet.h sys/wait.h wait.h sys/un.h dnl
88 AC_CHECK_FUNCS(pread pwrite pread64 readlink fdwalk pipe2)
89 AC_REPLACE_FUNCS(vasprintf vsnprintf)
95 AC_ARG_WITH(ust, [ --with-ust=PATH Specify prefix directory for the installed UST package
96 Equivalent to --with-ust-include=PATH/include
97 plus --with-ust-lib=PATH/lib])
98 AC_ARG_WITH(ust_include, [ --with-ust-include=PATH Specify directory for installed UST include files])
99 AC_ARG_WITH(ust_lib, [ --with-ust-lib=PATH Specify the directory for the installed UST library])
111 ustlibs="-L$with_ust/lib -lust"
112 ustinc="-I$with_ust/include "
115 if test "x$with_ust_include" != x; then
116 ustinc="-I$with_ust_include "
118 if test "x$with_ust_lib" != x; then
119 ustlibs="-L$with_ust_lib -lust"
122 if test "x$with_ust" != "xno"; then
123 saved_CFLAGS="$CFLAGS"
124 CFLAGS="$CFLAGS $ustinc"
125 AC_MSG_CHECKING([for ust])
127 #define CONFIG_UST_GDB_INTEGRATION
130 [AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_UST, 1, [Define if UST is available])],
131 [AC_MSG_RESULT([no]); ustlibs= ; ustinc= ])
132 CFLAGS="$saved_CFLAGS"
135 # Flags needed for UST
139 AC_ARG_ENABLE(werror,
140 AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]),
141 [case "${enableval}" in
142 yes | y) ERROR_ON_WARNING="yes" ;;
143 no | n) ERROR_ON_WARNING="no" ;;
144 *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;;
147 # Enable -Werror by default when using gcc
148 if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
153 if test "${ERROR_ON_WARNING}" = yes ; then
154 WERROR_CFLAGS="-Werror"
157 build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
158 -Wformat-nonliteral -Wno-char-subscripts -Wempty-body"
161 if test "x$GCC" = xyes
163 AC_MSG_CHECKING(compiler warning flags)
164 # Separate out the -Werror flag as some files just cannot be
165 # compiled with it enabled.
166 for w in ${build_warnings}; do
168 -Werr*) WERROR_CFLAGS=-Werror ;;
169 *) # Check that GCC accepts it
170 saved_CFLAGS="$CFLAGS"
172 AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",)
173 CFLAGS="$saved_CFLAGS"
176 AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS})
178 AC_SUBST(WARN_CFLAGS)
179 AC_SUBST(WERROR_CFLAGS)
181 dnl dladdr is glibc-specific. It is used by thread-db.c but only for
182 dnl debugging messages. It lives in -ldl which is handled below so we don't
183 dnl use AC_CHECK_LIB (or AC_SEARCH_LIBS) here. Instead we just temporarily
187 AC_CHECK_FUNCS(dladdr)
191 AC_MSG_CHECKING(for errno)
195 #endif], [static int x; x = errno;],
196 [AC_MSG_RESULT(yes - in errno.h); AC_DEFINE(HAVE_ERRNO, 1, [Define if errno is available]) have_errno=yes])
197 if test $have_errno = no; then
201 #endif], [extern int errno; static int x; x = errno;],
202 [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])],
206 AC_CHECK_DECLS([strerror, strstr, perror, vasprintf, vsnprintf])
208 AC_CHECK_TYPES(socklen_t, [], [],
209 [#include <sys/types.h>
210 #include <sys/socket.h>
213 AC_CHECK_TYPES([Elf32_auxv_t, Elf64_auxv_t], [], [],
217 ACX_PKGVERSION([GDB])
218 ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/])
219 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description])
220 AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"], [Bug reporting address])
222 # Check for various supplementary target information (beyond the
223 # triplet) which might affect the choices in configure.srv.
228 AC_CACHE_CHECK([if building for x86-64], [gdb_cv_i386_is_x86_64],
229 [save_CPPFLAGS="$CPPFLAGS"
230 CPPFLAGS="$CPPFLAGS $CFLAGS"
231 AC_EGREP_CPP([got it], [
235 ], [gdb_cv_i386_is_x86_64=yes],
236 [gdb_cv_i386_is_x86_64=no])
237 CPPFLAGS="$save_CPPFLAGS"])
240 AC_CACHE_CHECK([if building for Coldfire], [gdb_cv_m68k_is_coldfire],
241 [save_CPPFLAGS="$CPPFLAGS"
242 CPPFLAGS="$CPPFLAGS $CFLAGS"
243 AC_EGREP_CPP([got it], [
247 ], [gdb_cv_m68k_is_coldfire=yes],
248 [gdb_cv_m68k_is_coldfire=no])
249 CPPFLAGS="$save_CPPFLAGS"])
253 . ${srcdir}/configure.srv
255 if test "${srv_mingwce}" = "yes"; then
257 elif test "${srv_mingw}" = "yes"; then
258 LIBS="$LIBS -lws2_32"
259 elif test "${srv_qnx}" = "yes"; then
260 LIBS="$LIBS -lsocket"
261 elif test "${srv_lynxos}" = "yes"; then
262 LIBS="$LIBS -lnetinet"
265 if test "${srv_mingw}" = "yes"; then
266 AC_DEFINE(USE_WIN32API, 1,
267 [Define if we should use the Windows API, instead of the
268 POSIX API. On Windows, we use the Windows API when
269 building for MinGW, but the POSIX API when building
273 if test "${srv_linux_usrregs}" = "yes"; then
274 AC_DEFINE(HAVE_LINUX_USRREGS, 1,
275 [Define if the target supports PTRACE_PEEKUSR for register ]
279 if test "${srv_linux_regsets}" = "yes"; then
280 AC_DEFINE(HAVE_LINUX_REGSETS, 1,
281 [Define if the target supports register sets.])
283 AC_MSG_CHECKING(for PTRACE_GETREGS)
284 AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getregs,
285 [AC_TRY_COMPILE([#include <sys/ptrace.h>],
287 [gdbsrv_cv_have_ptrace_getregs=yes],
288 [gdbsrv_cv_have_ptrace_getregs=no])])
289 AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getregs)
290 if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then
291 AC_DEFINE(HAVE_PTRACE_GETREGS, 1,
292 [Define if the target supports PTRACE_GETREGS for register ]
296 AC_MSG_CHECKING(for PTRACE_GETFPXREGS)
297 AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getfpxregs,
298 [AC_TRY_COMPILE([#include <sys/ptrace.h>],
299 [PTRACE_GETFPXREGS;],
300 [gdbsrv_cv_have_ptrace_getfpxregs=yes],
301 [gdbsrv_cv_have_ptrace_getfpxregs=no])])
302 AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getfpxregs)
303 if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then
304 AC_DEFINE(HAVE_PTRACE_GETFPXREGS, 1,
305 [Define if the target supports PTRACE_GETFPXREGS for extended ]
310 if test "${srv_linux_btrace}" = "yes"; then
311 AC_DEFINE(HAVE_LINUX_BTRACE, 1,
312 [Define if the target supports branch tracing.])
315 if test "$ac_cv_header_sys_procfs_h" = yes; then
316 BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
317 BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
318 BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
319 BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
322 dnl Some systems (e.g., Android) have lwpid_t defined in libthread_db.h.
323 if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then
324 GDBSERVER_HAVE_THREAD_DB_TYPE(lwpid_t)
327 dnl Some systems (e.g., Android) have psaddr_t defined in libthread_db.h.
328 if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then
329 GDBSERVER_HAVE_THREAD_DB_TYPE(psaddr_t)
332 dnl Check for libdl, but do not add it to LIBS as only gdbserver
333 dnl needs it (and gdbreplay doesn't).
335 AC_CHECK_LIB(dl, dlopen)
341 if test "$srv_linux_thread_db" = "yes"; then
342 if test "$ac_cv_lib_dl_dlopen" = "yes"; then
344 AC_MSG_CHECKING(for the dynamic export flag)
345 old_LDFLAGS="$LDFLAGS"
346 # Older GNU ld supports --export-dynamic but --dynamic-list may not be
348 RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list"
349 LDFLAGS="$LDFLAGS $RDYNAMIC"
351 [found="-Wl,--dynamic-list"
352 RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'],
353 [RDYNAMIC="-rdynamic"
354 LDFLAGS="$old_LDFLAGS $RDYNAMIC"
360 LDFLAGS="$old_LDFLAGS"
361 AC_MSG_RESULT($found)
363 srv_libs="-lthread_db"
366 srv_thread_depfiles="thread-db.o proc-service.o"
367 AC_DEFINE(USE_THREAD_DB, 1, [Define if we should use libthread_db.])
368 AC_CACHE_CHECK([for TD_VERSION], gdbsrv_cv_have_td_version,
369 [AC_TRY_COMPILE([#include <thread_db.h>], [TD_VERSION;],
370 [gdbsrv_cv_have_td_version=yes],
371 [gdbsrv_cv_have_td_version=no])])
372 if test $gdbsrv_cv_have_td_version = yes; then
373 AC_DEFINE(HAVE_TD_VERSION, 1, [Define if TD_VERSION is available.])
377 AC_ARG_WITH(libthread-db,
378 AS_HELP_STRING([--with-libthread-db=PATH], [use given libthread_db directly]),
379 [srv_libthread_db_path="${withval}"
380 srv_libs="$srv_libthread_db_path"
383 if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then
384 AC_DEFINE(USE_LIBTHREAD_DB_DIRECTLY, 1, [Define if we should use libthread_db directly.])
387 if test "$srv_xmlfiles" != ""; then
388 srv_xmlbuiltin="xml-builtin.o"
389 AC_DEFINE(USE_XML, 1, [Define if an XML target description is available.])
391 tmp_xmlfiles=$srv_xmlfiles
393 for f in $tmp_xmlfiles; do
394 srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f"
398 GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles"
399 GDBSERVER_LIBS="$srv_libs"
401 dnl Check whether the target supports __sync_*_compare_and_swap.
402 AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
403 gdbsrv_cv_have_sync_builtins, [
404 AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);],
405 gdbsrv_cv_have_sync_builtins=yes,
406 gdbsrv_cv_have_sync_builtins=no)])
407 if test $gdbsrv_cv_have_sync_builtins = yes; then
408 AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
409 [Define to 1 if the target supports __sync_*_compare_and_swap])
412 dnl Check for -fvisibility=hidden support in the compiler.
413 saved_cflags="$CFLAGS"
414 CFLAGS="$CFLAGS -fvisibility=hidden"
415 AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),
416 [gdbsrv_cv_have_visibility_hidden=yes],
417 [gdbsrv_cv_have_visibility_hidden=no])
418 CFLAGS="$saved_cflags"
420 dnl Check if we can disable the virtual address space randomization.
421 dnl The functionality of setarch -R.
422 AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
423 define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [
424 # if !HAVE_DECL_ADDR_NO_RANDOMIZE
425 # define ADDR_NO_RANDOMIZE 0x0040000
427 /* Test the flag could be set and stays set. */
428 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
429 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
431 AC_RUN_IFELSE([PERSONALITY_TEST],
432 [gdbsrv_cv_have_personality=true],
433 [gdbsrv_cv_have_personality=false],
434 [AC_LINK_IFELSE([PERSONALITY_TEST],
435 [gdbsrv_cv_have_personality=true],
436 [gdbsrv_cv_have_personality=false])])
437 if $gdbsrv_cv_have_personality
439 AC_DEFINE([HAVE_PERSONALITY], 1,
440 [Define if you support the personality syscall.])
447 # check whether to enable the inprocess agent
448 if test "$ipa_obj" != "" \
449 -a "$gdbsrv_cv_have_sync_builtins" = yes \
450 -a "$gdbsrv_cv_have_visibility_hidden" = yes; then
456 AC_ARG_ENABLE(inprocess-agent,
457 AS_HELP_STRING([--enable-inprocess-agent], [inprocess agent]),
458 [case "$enableval" in
459 yes) want_ipa=true ;;
460 no) want_ipa=false ;;
461 *) AC_MSG_ERROR([bad value $enableval for inprocess-agent]) ;;
463 [want_ipa=$have_ipa])
467 IPA_DEPFILES="$ipa_obj"
468 extra_libraries="$extra_libraries libinproctrace.so"
470 AC_MSG_ERROR([inprocess agent not supported for this target])
474 AC_SUBST(GDBSERVER_DEPFILES)
475 AC_SUBST(GDBSERVER_LIBS)
476 AC_SUBST(srv_xmlbuiltin)
477 AC_SUBST(srv_xmlfiles)
478 AC_SUBST(IPA_DEPFILES)
479 AC_SUBST(extra_libraries)
481 GNULIB=build-gnulib-gdbserver/import
484 if test x"$STDINT_H" != x; then
485 GNULIB_STDINT_H=$GNULIB/$STDINT_H
487 AC_SUBST(GNULIB_STDINT_H)
490 [case x$CONFIG_HEADERS in