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