mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
da48217f31
Make gdbserver's build system locate libiconv when building for Linux.
Commit 07b3255c3b
("Filter invalid encodings from Linux thread names")
make libiconv madantory for building gdbserver on Linux.
While trying to cross-compile gdb for xtensa-fsf-linux-uclibc (with a
toolchain generated with crosstool-ng), I got:
/home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:48:10: fatal error: iconv.h: No such file or directory
48 | #include <iconv.h>
| ^~~~~~~~~
I downloaded GNU libiconv, built it for that host, and installed it in
an arbitrary directory. I had to modify the gdbserver build system to
locate libiconv and use it, the result is this patch.
I eventually found that crosstool-ng has a config option to make uclibc
provide an implementation of iconv, which is of course much easier. But
given that this patch is now written, I think it would be worth merging
it, it could help some people who do not have iconv built-in their libc
in the future (and may not have the luxury of rebuilding their libc like
I do).
Using AM_ICONV in configure.ac adds these options for configure (the
same we have for gdb):
--with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
--without-libiconv-prefix don't search for libiconv in includedir and libdir
--with-libiconv-type=TYPE type of library to search for (auto/static/shared)
It sets the `LIBICONV` variable with whatever is needed to link with
libiconv, and adds the necessary `-I` flag to `CPPFLAGS`.
To avoid unnecessarily linking against libiconv on hosts that don't need
it, set `MAYBE_LIBICONV` with the contents of `LIBICONV` only if the
host is Linux, and use `MAYBE_LIBICONV` in `Makefile.in`.
Since libiconv is a hard requirement for Linux hosts, error out if it is
not found.
The bits in acinclude.m4 are similar to what we have in
gdb/acinclude.m4.
Update the top-level build system to support building against an in-tree
libiconv (I did not test this part though). Something tells me that the
all-gdbserver dependency on all-libiconv is unnecessary, since there is
already a dependency of configure-gdbserver on all-libiconv (and
all-gdbserver surely depends on configure-gdbserver). I just copied
what's done for GDB though.
ChangeLog:
* Makefile.def: Add configure-gdbserver and all-gdbserver
dependencies on all-libiconv.
* Makefile.in: Re-generate.
Change-Id: I90f8ef88dd4917df5a68b45550d93622fc9cfed4
Approved-By: Tom Tromey <tom@tromey.com>
59 lines
1.8 KiB
Plaintext
59 lines
1.8 KiB
Plaintext
dnl NB: When possible, try to avoid explicit includes of ../config/ files.
|
|
dnl They're normally found by aclocal automatically and recorded in aclocal.m4.
|
|
dnl However, some are kept here explicitly to silence harmless warnings from
|
|
dnl aclocal when it finds AM_xxx macros via local search paths instead of
|
|
dnl system search paths.
|
|
|
|
dnl gdb/gdbserver/configure.in uses BFD_HAVE_SYS_PROCFS_TYPE.
|
|
m4_include(../bfd/bfd.m4)
|
|
|
|
# This get AM_GDB_COMPILER_TYPE.
|
|
m4_include(../gdbsupport/compiler-type.m4)
|
|
|
|
dnl This gets AM_GDB_WARNINGS.
|
|
m4_include(../gdbsupport/warning.m4)
|
|
|
|
dnl codeset.m4 is needed for common.m4, but not for
|
|
dnl anything else in gdbserver.
|
|
m4_include(../config/codeset.m4)
|
|
m4_include(../gdbsupport/common.m4)
|
|
|
|
dnl For AM_ICONV. We need to explicitly include these other files before
|
|
dnl iconv.m4 to avoid warnings.
|
|
m4_include([../config/lib-ld.m4])
|
|
m4_include([../config/lib-prefix.m4])
|
|
m4_include([../config/lib-link.m4])
|
|
m4_include([../config/iconv.m4])
|
|
|
|
dnl For libiberty_INIT.
|
|
m4_include(../gdbsupport/libiberty.m4)
|
|
|
|
dnl For GDB_AC_PTRACE.
|
|
m4_include(../gdbsupport/ptrace.m4)
|
|
|
|
m4_include(../gdb/ax_cxx_compile_stdcxx.m4)
|
|
|
|
dnl For GDB_AC_SELFTEST.
|
|
m4_include(../gdbsupport/selftest.m4)
|
|
|
|
dnl Check for existence of a type $1 in libthread_db.h
|
|
dnl Based on BFD_HAVE_SYS_PROCFS_TYPE in bfd/bfd.m4.
|
|
|
|
AC_DEFUN(
|
|
[GDBSERVER_HAVE_THREAD_DB_TYPE],
|
|
[AC_MSG_CHECKING([for $1 in thread_db.h])
|
|
AC_CACHE_VAL(
|
|
[gdbserver_cv_have_thread_db_type_$1],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM([#include <thread_db.h>], [$1 avar])],
|
|
[gdbserver_cv_have_thread_db_type_$1=yes],
|
|
[gdbserver_cv_have_thread_db_type_$1=no]
|
|
)]
|
|
)
|
|
if test $gdbserver_cv_have_thread_db_type_$1 = yes; then
|
|
AC_DEFINE([HAVE_]translit($1, [a-z], [A-Z]), 1,
|
|
[Define if <thread_db.h> has $1.])
|
|
fi
|
|
AC_MSG_RESULT($gdbserver_cv_have_thread_db_type_$1)]
|
|
)
|