FX wrote:
> Patch needs:
> - C/driver options maintainer, or global reviewer, to OK the C changes
> (outside darwin). They are really simple
> - Fortran maintainer to OK the Fortran part
[...]
> >> We have a -static-libgfortran option, but on targets where we support
> >> quad-prec math through libquadmath, we didnât have an equivalent
> >> -static-libquadmath so far. This patch adds it, in what I think is a
> >> rather straightforward manner.
> >>
> >> The only minor complication comes from the fact that previously, linking
> >> libquadmath was conditionally through libgfortran.spec. So the spec was
> >> modified: when we use -static-libquadmath, the driver itself includes the
> >> -lquadmath (surrounded by the necessary static linking directives), so
> >> that libgfortran.spec shouldnât do it again.
That unfortunately looses the -as-needed functionality, not that it currently
works as hoped for.
> >> Bootstrapped and regtested on x86_64 linux. OK to commit?
--- gcc/fortran/gfortranspec.c (revision 216036)
+++ gcc/fortran/gfortranspec.c (working copy)
...
+add_arg_libgfortran (bool force_static ATTRIBUTE_UNUSED,
+ bool force_static_libquadmath ATTRIBUTE_UNUSED)
First, you don't need ATTRIBUTE_UNUSED for force_static_libquadmath as
it is always used.
But my actual problem is that your patch does't seem to work if -static-gfortran
is not in force. You then get:
append_option (OPT_l, FORTRAN_LIBRARY, 1);
append_option (OPT_l, QUADMATH_LIBRARY, 1);
instead of:
append_option (OPT_l, FORTRAN_LIBRARY, 1);
append_option (OPT_Wl_, LD_STATIC_OPTION, 1);
append_option (OPT_l, QUADMATH_LIBRARY, 1);
append_option (OPT_Wl_, LD_DYNAMIC_OPTION, 1);
Additionally, I wonder whether you need the
#ifdef HAVE_LD_STATIC_DYNAMIC
...
+#else
+ if (force_static_libquadmath)
+ append_option (OPT_l, QUADMATH_LIBRARY, 1);
at all, given that you have in:
Index: gcc/fortran/options.c
...
+ case OPT_static_libquadmath:
+#ifndef HAVE_LD_STATIC_DYNAMIC
+ gfc_fatal_error ("-static-libquadmath is not supported in this "
+ "configuration");
+#endif
+ break;
and that without -static-lquadmath, the -lquadmath is added - with as-needed -
in libgfortran's .spec file. (Mentioning this in gfortranspec.c wouldn't harm,
I'd presume.)
(NB: If you remove the #else, you do need the ATTRIBUTE_UNUSED, again.)
Tobias