PR 35051: Build (as opposed to host) machine needs GMP and MPFR
Richard Sandiford
rsandifo@nildram.co.uk
Sat Feb 2 09:32:00 GMT 2008
If you build a cross-host compiler (such as a mips64-linux-gnu native
compiler from x86_64-linux-gnu), --with-gmp and --with-mpfr rightly
apply to the host. However, even the generator files include <gmp.h>
and <mpfr.h>, so the build machine needs gmp.h and mpfr.h to be
installed too. There's no real need for this and, as --with-gmp and
--with-mpfr show, we can't assume that the files are installed in the
standard directories.
This patch takes the simple approach of guarding GMP and MPFR stuff
with !GENERATOR_FILE. However, rather than guarding the gmp.h and
mpfr.h includes in-situ, we could move them to system.h (still protected
by GENERATOR_FILE). Also, rather than guard uses of the GMP and
MPFR types, we could instead add dummy GENERATOR_FILE typedefs to
coretypes.h (or perhaps system.h, alongside the includes). Let me
know if either of these sounds like the Right Thing and I'll revise
the patch accordingly.
Bootstrapped & regression-tested on x86_64-linux-gnu. Also tested
by building a cross mips64el-linux-gnu native compiler, where it
fixes the build failure I was seeing. (I have GMP and MPFR installed
in non-default locations, which the build!=host case couldn't find.)
OK to install?
Richard
gcc/
PR bootstrap/35051
* double-int.h: Don't include gmp.h for GENERATOR_FILEs.
(mpz_set_double_int, mpz_get_double_int): Hide from GENERATOR_FILEs.
* real.h: Don't include gmp.h or mpfr.h for GENERATOR_FILEs.
(real_from_mpfr, mpfr_from_real): Hide from GENERATOR_FILEs.
* tree.h (get_type_static_bounds): Likewise.
Index: gcc/double-int.h
===================================================================
--- gcc/double-int.h 2008-02-01 18:20:22.000000000 +0000
+++ gcc/double-int.h 2008-02-01 18:22:10.000000000 +0000
@@ -20,7 +20,9 @@ Free Software Foundation; either version
#ifndef DOUBLE_INT_H
#define DOUBLE_INT_H
+#ifndef GENERATOR_FILE
#include <gmp.h>
+#endif
#include "coretypes.h"
/* A large integer is currently represented as a pair of HOST_WIDE_INTs.
@@ -176,10 +178,11 @@ double_int_equal_p (double_int cst1, dou
return cst1.low == cst2.low && cst1.high == cst2.high;
}
+#ifndef GENERATOR_FILE
/* Conversion to and from GMP integer representations. */
void mpz_set_double_int (mpz_t, double_int, bool);
double_int mpz_get_double_int (const_tree, mpz_t, bool);
-
+#endif
#endif /* DOUBLE_INT_H */
Index: gcc/real.h
===================================================================
--- gcc/real.h 2008-02-01 18:20:22.000000000 +0000
+++ gcc/real.h 2008-02-01 18:22:10.000000000 +0000
@@ -21,8 +21,10 @@
#ifndef GCC_REAL_H
#define GCC_REAL_H
+#ifndef GENERATOR_FILE
#include <gmp.h>
#include <mpfr.h>
+#endif
#include "machmode.h"
/* An expanded form of the represented number. */
@@ -426,11 +428,13 @@ extern void real_round (REAL_VALUE_TYPE
/* Set the sign of R to the sign of X. */
extern void real_copysign (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
+#ifndef GENERATOR_FILE
/* Convert between MPFR and REAL_VALUE_TYPE. The caller is
responsible for initializing and clearing the MPFR parameter. */
extern void real_from_mpfr (REAL_VALUE_TYPE *, mpfr_srcptr, tree, mp_rnd_t);
extern void mpfr_from_real (mpfr_ptr, const REAL_VALUE_TYPE *, mp_rnd_t);
+#endif
/* Check whether the real constant value given is an integer. */
extern bool real_isinteger (const REAL_VALUE_TYPE *c, enum machine_mode mode);
Index: gcc/tree.h
===================================================================
--- gcc/tree.h 2008-02-01 18:20:22.000000000 +0000
+++ gcc/tree.h 2008-02-01 18:22:10.000000000 +0000
@@ -4891,7 +4891,9 @@ extern int objects_must_conflict_p (tree
/* In tree.c */
extern int really_constant_p (const_tree);
extern int int_fits_type_p (const_tree, const_tree);
+#ifndef GENERATOR_FILE
extern void get_type_static_bounds (const_tree, mpz_t, mpz_t);
+#endif
extern bool variably_modified_type_p (tree, tree);
extern int tree_log2 (const_tree);
extern int tree_floor_log2 (const_tree);
More information about the Gcc-patches
mailing list