public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Iain Buclaw <ibuclaw@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc r11-10070] darwin, d: Support outfile substitution for libphobos
Date: Wed, 15 Jun 2022 11:55:21 +0000 (GMT)	[thread overview]
Message-ID: <20220615115521.3B36E385734C@sourceware.org> (raw)

https://gcc.gnu.org/g:3a44598c459637271ecab139464c7ad444f8cd15

commit r11-10070-g3a44598c459637271ecab139464c7ad444f8cd15
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date:   Fri Nov 19 09:09:54 2021 +0100

    darwin, d: Support outfile substitution for libphobos
    
    In the gdc driver, this takes the previous fix for the Darwin D
    bootstrap, and extends it to the -static-libphobos option as well.
    Rather than pushing the -static-libphobos option back onto the command
    line, the setting of SKIPOPT is instead conditionally removed.  The same
    change has been repeated for -static-libstdc++ so there is now no need
    to call generate_option to re-add it.
    
    In the gcc driver, -static-libphobos has been added as a common option,
    validated, and a new outfile substition added to config/darwin.h to
    correctly replace -lgphobos with libgphobos.a.
    
    gcc/ChangeLog:
    
            * common.opt (static-libphobos): Add option.
            * config/darwin.h (LINK_SPEC): Substitute -lgphobos with libgphobos.a
            when linking statically.
            * gcc.c (driver_handle_option): Set -static-libphobos as always valid.
    
    gcc/d/ChangeLog:
    
            * d-spec.cc (lang_specific_driver): Set SKIPOPT on -static-libstdc++
            and -static-libphobos only when target supports LD_STATIC_DYNAMIC.
            Remove generate_option to re-add -static-libstdc++.
    
    libphobos/ChangeLog:
    
            * testsuite/testsuite_flags.in: Add libphobos library directory as
            search path to --gdcldflags.
    
    (cherry picked from commit 185b307b03db20bfc7105a519ef19e2cafea7196)

Diff:
---
 gcc/common.opt                         |  4 ++++
 gcc/config/darwin.h                    |  1 +
 gcc/d/d-spec.cc                        | 18 +++++++++++-------
 gcc/gcc.c                              |  6 ++++--
 libphobos/testsuite/testsuite_flags.in |  1 +
 5 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/gcc/common.opt b/gcc/common.opt
index a75b44ee47e..4a3f09d9e1f 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -3446,6 +3446,10 @@ static-libgfortran
 Driver
 ; Documented for Fortran, but always accepted by driver.
 
+static-libphobos
+Driver
+; Documented for D, but always accepted by driver.
+
 static-libstdc++
 Driver
 
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index 3206b70c7c2..d390635409d 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -445,6 +445,7 @@ extern GTY(()) int darwin_ms_struct;
                      %:replace-outfile(-lobjc libobjc-gnu.a%s); \
                     :%:replace-outfile(-lobjc -lobjc-gnu )}}\
    %{static|static-libgcc|static-libgfortran:%:replace-outfile(-lgfortran libgfortran.a%s)}\
+   %{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)} \
diff --git a/gcc/d/d-spec.cc b/gcc/d/d-spec.cc
index b12d28f1047..1304126a675 100644
--- a/gcc/d/d-spec.cc
+++ b/gcc/d/d-spec.cc
@@ -253,13 +253,23 @@ lang_specific_driver (cl_decoded_option **in_decoded_options,
 
 	case OPT_static_libstdc__:
 	  saw_static_libcxx = true;
+#ifdef HAVE_LD_STATIC_DYNAMIC
+	  /* Remove -static-libstdc++ 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_static_libphobos:
 	  if (phobos_library != PHOBOS_NOLINK)
 	    phobos_library = PHOBOS_STATIC;
+#ifdef HAVE_LD_STATIC_DYNAMIC
+	  /* Remove -static-libphobos 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_shared_libphobos:
@@ -460,7 +470,7 @@ lang_specific_driver (cl_decoded_option **in_decoded_options,
 #endif
     }
 
-  if (saw_libcxx || need_stdcxx)
+  if (saw_libcxx || saw_static_libcxx || need_stdcxx)
     {
 #ifdef HAVE_LD_STATIC_DYNAMIC
       if (saw_static_libcxx && !static_link)
@@ -468,12 +478,6 @@ lang_specific_driver (cl_decoded_option **in_decoded_options,
 	  generate_option (OPT_Wl_, LD_STATIC_OPTION, 1, CL_DRIVER,
 			   &new_decoded_options[j++]);
 	}
-#else
-      /* Push the -static-libstdc++ option back onto the command so that
-	 a target without LD_STATIC_DYNAMIC can use outfile substitution.  */
-      if (saw_static_libcxx && !static_link)
-	generate_option (OPT_static_libstdc__, NULL, 1, CL_DRIVER,
-			 &new_decoded_options[j++]);
 #endif
       if (saw_libcxx)
 	new_decoded_options[j++] = *saw_libcxx;
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 0af888c7d78..6b208f4680f 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -4487,10 +4487,12 @@ driver_handle_option (struct gcc_options *opts,
     case OPT_static_libgcc:
     case OPT_shared_libgcc:
     case OPT_static_libgfortran:
+    case OPT_static_libphobos:
     case OPT_static_libstdc__:
       /* These are always valid, since gcc.c itself understands the
-	 first two, gfortranspec.c understands -static-libgfortran and
-	 g++spec.c understands -static-libstdc++ */
+	 first two, gfortranspec.c understands -static-libgfortran,
+	 d-spec.cc understands -static-libphobos, and g++spec.c
+	 understands -static-libstdc++ */
       validated = true;
       break;
 
diff --git a/libphobos/testsuite/testsuite_flags.in b/libphobos/testsuite/testsuite_flags.in
index bafd5ad4502..8e2f1eefd5b 100755
--- a/libphobos/testsuite/testsuite_flags.in
+++ b/libphobos/testsuite/testsuite_flags.in
@@ -46,6 +46,7 @@ case ${query} in
     --gdcldflags)
       GDCLDFLAGS="-B${BUILD_DIR}/src
                   -B${BUILD_DIR}/libdruntime/gcc
+                  -B${BUILD_DIR}/src/.libs
                   -L${BUILD_DIR}/src/.libs"
       echo ${GDCLDFLAGS}
       ;;


                 reply	other threads:[~2022-06-15 11:55 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220615115521.3B36E385734C@sourceware.org \
    --to=ibuclaw@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).