tested on x86_64-linux-gnu, x86_64,aarch64-darwin21,
OK for trunk?
thanks,
Iain

--- 8< ---

This was unimplemented so far.

gcc/ChangeLog:

        * common.opt: Add -static-libgm2.
        * config/darwin.h (LINK_SPEC): Handle static-libgm2.

gcc/m2/ChangeLog:

        * gm2spec.cc (lang_specific_driver): Handle static-libgm2.
---
 gcc/common.opt      |  4 ++++
 gcc/config/darwin.h |  7 ++++++-
 gcc/m2/gm2spec.cc   | 24 +++++++++++++++++++++++-
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/gcc/common.opt b/gcc/common.opt
index b01f7a7a4a2..0f3910cf5f6 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -3630,6 +3630,10 @@ static-libgfortran
 Driver
 ; Documented for Fortran, but always accepted by driver.
 
+static-libgm2
+Driver
+; Documented for Modula-2, but always accepted by driver.
+
 static-libphobos
 Driver
 ; Documented for D, but always accepted by driver.
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index 0ec882ffb54..a3edd7c922b 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -476,7 +476,12 @@ extern GTY(()) int darwin_ms_struct;
    %{static|static-libgcc|static-libphobos:%:replace-outfile(-lgphobos 
libgphobos.a%s)}\
    
%{static|static-libgcc|static-libstdc++|static-libgfortran:%:replace-outfile(-lgomp
 libgomp.a%s)}\
    %{static|static-libgcc|static-libstdc++:%:replace-outfile(-lstdc++ 
libstdc++.a%s)}\
-   %{force_cpusubtype_ALL:-arch %(darwin_arch)} \
+   %{static|static-libgm2:%:replace-outfile(-lm2pim libm2pim.a%s)}\
+   %{static|static-libgm2:%:replace-outfile(-lm2iso libm2iso.a%s)}\
+   %{static|static-libgm2:%:replace-outfile(-lm2min libm2min.a%s)}\
+   %{static|static-libgm2:%:replace-outfile(-lm2log libm2log.a%s)}\
+   %{static|static-libgm2:%:replace-outfile(-lm2cor libm2cor.a%s)}\
+  %{force_cpusubtype_ALL:-arch %(darwin_arch)} \
    %{!force_cpusubtype_ALL:-arch %(darwin_subarch)} "\
    LINK_SYSROOT_SPEC \
   "%{mmacosx-version-min=*:-macosx_version_min %*} \
diff --git a/gcc/m2/gm2spec.cc b/gcc/m2/gm2spec.cc
index 4996fa49789..6a17114c9f3 100644
--- a/gcc/m2/gm2spec.cc
+++ b/gcc/m2/gm2spec.cc
@@ -585,6 +585,9 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
   /* Should the driver perform a link?  */
   bool linking = true;
 
+  /* Should the driver link the shared gm2 libs?  */
+  bool shared_libgm2 = true;
+
   /* "-lm" or "-lmath" if it appears on the command line.  */
   const struct cl_decoded_option *saw_math = NULL;
 
@@ -594,7 +597,8 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
   /* By default, we throw on the math library if we have one.  */
   int need_math = (MATH_LIBRARY[0] != '\0');
 
-  /* 1 if we should add -lpthread to the command-line.  */
+  /* 1 if we should add -lpthread to the command-line.
+    FIXME: the default should be a configuration choice.  */
   int need_pthread = 1;
 
   /* True if we saw -static.  */
@@ -774,6 +778,16 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
 #endif
          break;
 
+       case OPT_static_libgm2:
+         shared_libgm2 = false;
+#ifdef HAVE_LD_STATIC_DYNAMIC
+         /* Remove -static-libgm2 from the command only if target supports
+            LD_STATIC_DYNAMIC.  When not supported, it is left in so that a
+            back-end target can use outfile substitution.  */
+         args[i] |= SKIPOPT;
+#endif
+         break;
+
        case OPT_stdlib_:
          which_library = (stdcxxlib_kind) decoded_options[i].value;
          break;
@@ -877,8 +891,16 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
 
   if (linking)
     {
+#ifdef HAVE_LD_STATIC_DYNAMIC
+      if (allow_libraries && !shared_libgm2)
+       append_option (OPT_Wl_, LD_STATIC_OPTION, 1);
+#endif
       if (allow_libraries)
        add_default_archives (libpath, libraries);
+#ifdef HAVE_LD_STATIC_DYNAMIC
+      if (allow_libraries && !shared_libgm2)
+       append_option (OPT_Wl_, LD_DYNAMIC_OPTION, 1);
+#endif
       /* Add `-lstdc++' if we haven't already done so.  */
 #ifdef HAVE_LD_STATIC_DYNAMIC
       if (library > 1 && !static_link)
-- 
2.37.1 (Apple Git-137.1)

Reply via email to