Re: [PATCH] Enable GDB build with in-tree GMP and MPFR

Joel Brobecker
2020-11-18T03:45:08Z

> this enables GDB build with in-tree GMP and MPFR.
>
> This updated version of my patch added support for in-tree MPFR.
>
> While there is no preexisting --with-gmp configure option in gdb,
> this leaves the current --with-mpfr=yes/no/auto as it is, since it seems
> to work by accident. The top level config script thinks "no" is
> a DIR, and skips the detection of in-tree MPFR in that case, while
> gdb honors --with-mpfr=no, so that is what's expected.
>
> The in-tree build works only when no --with-mpfr and no
> --with-gmp is given. While it does not advertise --with-gmp-prefix=DIR
> and/or --with-mpfr-prefix=DIR with "./configure --help", I'll leave that
> for another patch.

I think we better sort the discrepancy between GCC and GDB
if we can, but this is going to take time. From what you were
explaining before, I believe you can separate this part of
your patch (adding the above to GDB's configury) from the part
where you're adding support for in-tree building?

> Tested on x86_64-pc-linux-gnu and cross-build for arm.
> Is it OK for the trunk?

These are changes in areas I am not familiar with, and wouldn't
have very much time to look into. I talked to Tom yesterday,
and he kindly agreed to take a look.

> From 503435680f463cf5ed060ce32b902051cb19e801 Mon Sep 17 00:00:00 2001
> From: Bernd Edlinger <bernd.edlinger@hotmail.de>
> Date: Sun, 15 Nov 2020 15:37:22 +0100
> Subject: [PATCH] Enable GDB build with in-tree GMP and MPFR
>
> With this patch GDB can be built with in-tree GMP and/or
> MPFR. This works also for cross-builds.
>
> All that is needed, is a sym-link in the source tree,
> like this:
>
> gmp -> ../gmp-6.1.0
> mpfr -> ../mpfr-3.1.4
>
> 2020-11-15 Bernd Edlinger <bernd.edlinger@hotmail.de>
>
> * Makefile.def: Prepare for GDB build with intree GMP.
> * Makefile.in: Regenerate.

I got the answer about approval for toplevel tree changes; we're still
keeping in sync with GCC. However, Tom said that these kinds of changes
are OK to discuss and eventually push locally, before we bring them
to GCC next. It's better the other way around, but discussing them
here is also an option, because it's a minor change taking advantage
of infrastructure that's already in place.

In this particular instance, I would indeed _not_ rush discussing
with GCC, in case the tie with GDB affects the changes we would need
in toplevel.

> gdb:
> 2020-11-15 Bernd Edlinger <bernd.edlinger@hotmail.de>
>
> * configure.ac: Add --with-gmp=DIR, --with-gmp-include=DIR
> and --with-gmp-lib=DIR
> as well as --with-mpfr-include=DIR and --with-mpfr-lib=DIR
> for compatibility with top level configure script.
> * configure: Regenerate.
> ---
> Makefile.def | 5 ++++-
> Makefile.in | 4 +++-
> gdb/configure | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> gdb/configure.ac | 25 +++++++++++++++++++++++++
> 4 files changed, 84 insertions(+), 2 deletions(-)
>
> diff --git a/Makefile.def b/Makefile.def
> index 089e70a..1b99b42 100644
> --- a/Makefile.def
> +++ b/Makefile.def
> @@ -115,7 +115,8 @@ host_modules= { module= zlib; no_install=true; no_check=true;
> host_modules= { module= gnulib; };
> host_modules= { module= gdbsupport; };
> host_modules= { module= gdbserver; };
> -host_modules= { module= gdb; };
> +host_modules= { module= gdb;
> + extra_configure_flags='@extra_mpfr_configure_flags@ @extra_mpc_mpfr_configure_flags@';};
> host_modules= { module= expect; };
> host_modules= { module= guile; };
> host_modules= { module= tk; };
> @@ -391,6 +392,8 @@ dependencies = { module=all-intl; on=all-libiconv; };
>
> // Host modules specific to gdb.
> dependencies = { module=configure-gdb; on=all-intl; };
> +dependencies = { module=configure-gdb; on=all-gmp; };
> +dependencies = { module=configure-gdb; on=all-mpfr; };
> dependencies = { module=configure-gdb; on=configure-sim; };
> dependencies = { module=configure-gdb; on=all-bfd; };
> dependencies = { module=configure-gdb; on=all-gnulib; };
> diff --git a/Makefile.in b/Makefile.in
> index fe34132..738fd32 100644
> --- a/Makefile.in
> +++ b/Makefile.in
> @@ -29491,7 +29491,7 @@ configure-gdb:
> $$s/$$module_srcdir/configure \
> --srcdir=$${topdir}/$$module_srcdir \
> $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
> - --target=${target_alias} \
> + --target=${target_alias} @extra_mpfr_configure_flags@ @extra_mpc_mpfr_configure_flags@ \
> || exit 1
> @endif gdb
>
> @@ -52449,6 +52449,8 @@ configure-libcc1: maybe-configure-gcc
> all-libcc1: maybe-all-gcc
> all-utils: maybe-all-libiberty
> configure-gdb: maybe-all-intl
> +configure-gdb: maybe-all-gmp
> +configure-gdb: maybe-all-mpfr
> configure-gdb: maybe-all-bfd
> configure-gdb: maybe-all-libiconv
> all-gdb: maybe-all-libiberty
> diff --git a/gdb/configure b/gdb/configure
> index a3e73b4..034485d 100755
> --- a/gdb/configure
> +++ b/gdb/configure
> @@ -899,8 +899,13 @@ with_jit_reader_dir
> with_expat
> with_libexpat_prefix
> with_libexpat_type
> +with_gmp_include
> +with_gmp_lib
> +with_gmp
> with_libgmp_prefix
> with_libgmp_type
> +with_mpfr_include
> +with_mpfr_lib
> with_mpfr
> with_libmpfr_prefix
> with_libmpfr_type
> @@ -1644,9 +1649,14 @@ Optional Packages:
> --with-libexpat-prefix[=DIR] search for libexpat in DIR/include and DIR/lib
> --without-libexpat-prefix don't search for libexpat in includedir and libdir
> --with-libexpat-type=TYPE type of library to search for (auto/static/shared)
> + --with-gmp-include=DIR GMP include directory
> + --with-gmp-lib=DIR GMP lib directory
> + --with-gmp=DIR GMP install directory
> --with-libgmp-prefix[=DIR] search for libgmp in DIR/include and DIR/lib
> --without-libgmp-prefix don't search for libgmp in includedir and libdir
> --with-libgmp-type=TYPE type of library to search for (auto/static/shared)
> + --with-mpfr-include=DIR MPFR include directory
> + --with-mpfr-lib=DIR MPFR lib directory
> --with-mpfr include MPFR support (auto/yes/no)
> --with-libmpfr-prefix[=DIR] search for libmpfr in DIR/include and DIR/lib
> --without-libmpfr-prefix don't search for libmpfr in includedir and libdir
> @@ -9990,6 +10000,35 @@ done
> fi
> fi
>
> +
> +# Check whether --with-gmp_include was given.
> +if test "${with_gmp_include+set}" = set; then :
> + withval=$with_gmp_include; CPPFLAGS="$CPPFLAGS -I$withval"
> +fi
> +
> +
> +# Check whether --with-gmp_lib was given.
> +if test "${with_gmp_lib+set}" = set; then :
> + withval=$with_gmp_lib; LDFLAGS="$LDFLAGS -L$withval"
> +fi
> +
> +
> +# Check whether --with-gmp was given.
> +if test "${with_gmp+set}" = set; then :
> + withval=$with_gmp;
> + if test -z "$with_gmp_lib" && test -z "$with_gmp_include" ; then
> + CPPFLAGS="$CPPFLAGS -I$withval/include"
> + LDFLAGS="$LDFLAGS -L$withval/lib"
> + else
> + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
> +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
> +as_fn_error $? "Do not use --with-gmp and --with-gmp-include/--with-gmp-lib options simultaneously.
> +See \`config.log' for more details" "$LINENO" 5; }
> + fi
> +
> +fi
> +
> +
> # Verify that we have a usable GMP library.
>
>
> @@ -10474,6 +10513,19 @@ if test "$HAVE_LIBGMP" != yes; then
> fi
>
>
> +# Check whether --with-mpfr_include was given.
> +if test "${with_mpfr_include+set}" = set; then :
> + withval=$with_mpfr_include; CPPFLAGS="-I$withval $CPPFLAGS"
> +fi
> +
> +
> +# Check whether --with-mpfr_lib was given.
> +if test "${with_mpfr_lib+set}" = set; then :
> + withval=$with_mpfr_lib; LDFLAGS="-L$withval $LDFLAGS"
> +fi
> +
> +
> +
> # Check whether --with-mpfr was given.
> if test "${with_mpfr+set}" = set; then :
> withval=$with_mpfr;
> diff --git a/gdb/configure.ac b/gdb/configure.ac
> index 32f25d9..97f43ce 100644
> --- a/gdb/configure.ac
> +++ b/gdb/configure.ac
> @@ -683,6 +683,22 @@ else
> fi
> fi
>
> +AC_ARG_WITH(gmp_include,
> + [ --with-gmp-include=DIR GMP include directory ],
> + CPPFLAGS="$CPPFLAGS -I$withval")
> +AC_ARG_WITH(gmp_lib,
> + [ --with-gmp-lib=DIR GMP lib directory ],
> + LDFLAGS="$LDFLAGS -L$withval")
> +AC_ARG_WITH(gmp,
> + [ --with-gmp=DIR GMP install directory ], [
> + if test -z "$with_gmp_lib" && test -z "$with_gmp_include" ; then
> + CPPFLAGS="$CPPFLAGS -I$withval/include"
> + LDFLAGS="$LDFLAGS -L$withval/lib"
> + else
> + AC_MSG_FAILURE([Do not use --with-gmp and --with-gmp-include/--with-gmp-lib options simultaneously.])
> + fi
> + ])
> +
> # Verify that we have a usable GMP library.
> AC_LIB_HAVE_LINKFLAGS([gmp], [], [#include <gmp.h>],
> [mpz_t n;
> @@ -691,6 +707,15 @@ if test "$HAVE_LIBGMP" != yes; then
> AC_MSG_ERROR([GMP is missing or unusable])
> fi
>
> +AC_ARG_WITH([mpfr_include],
> + [AC_HELP_STRING([--with-mpfr-include=DIR],
> + [MPFR include directory])],
> + [CPPFLAGS="-I$withval $CPPFLAGS"])
> +AC_ARG_WITH([mpfr_lib],
> + [AC_HELP_STRING([--with-mpfr-lib=DIR],
> + [MPFR lib directory])],
> + [LDFLAGS="-L$withval $LDFLAGS"])
> +
> AC_ARG_WITH(mpfr,
> AS_HELP_STRING([--with-mpfr], [include MPFR support (auto/yes/no)]),
> [], [with_mpfr=auto])
> --
> 1.9.1
>

--
Joel