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: linkBe 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).