From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1698) id D8CCC3858D28; Thu, 5 Jan 2023 12:48:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D8CCC3858D28 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1672922924; bh=NcQTsEvPiJvPeHG7LhMztWI6Q4e80osi8odmpThYAFc=; h=From:To:Subject:Date:From; b=vWwBlDMbomlmXYozPmSS7hTP4Eu5in5OQr1LZrRO9H/MTmPlfhrJ8cOGdFBz+FQfd AJSlvXocAEtMlLuJgGruQdw0QdS3a2px/Cmwa6r6w67gWZngnOiofMruF+SDU5BOFa IlvohVhVGHa/LxofuJHwJEw4EXrUacDCf31ff+m0= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Iain D Sandoe To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-5008] modula-2, driver: Implement handling for -static-libgm2. X-Act-Checkin: gcc X-Git-Author: Iain Sandoe X-Git-Refname: refs/heads/master X-Git-Oldrev: 2421470867f198c3aa57e0a7ab0d473aac4cdd38 X-Git-Newrev: dd77b04999534f61825cc810a5bc428707b8106b Message-Id: <20230105124844.D8CCC3858D28@sourceware.org> Date: Thu, 5 Jan 2023 12:48:44 +0000 (GMT) List-Id: https://gcc.gnu.org/g:dd77b04999534f61825cc810a5bc428707b8106b commit r13-5008-gdd77b04999534f61825cc810a5bc428707b8106b Author: Iain Sandoe Date: Sun Jan 1 20:47:42 2023 +0000 modula-2, driver: Implement handling for -static-libgm2. This was unimplemented so far. gcc/ChangeLog: * common.opt: Add -static-libgm2. * config/darwin.h (LINK_SPEC): Handle static-libgm2. * doc/gm2.texi: Document static-libgm2. * gcc.cc (driver_handle_option): Allow static-libgm2. gcc/m2/ChangeLog: * gm2spec.cc (lang_specific_driver): Handle static-libgm2. * lang.opt: Add static-libgm2. Diff: --- gcc/common.opt | 4 ++++ gcc/config/darwin.h | 7 ++++++- gcc/doc/gm2.texi | 4 ++++ gcc/gcc.cc | 12 +++++++----- gcc/m2/gm2spec.cc | 24 +++++++++++++++++++++++- gcc/m2/lang.opt | 4 ++++ 6 files changed, 48 insertions(+), 7 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index 97a78030228..d0371aec8db 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -3622,6 +3622,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 efe3187cd96..e6f76e598e6 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -447,7 +447,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/doc/gm2.texi b/gcc/doc/gm2.texi index 513fdd3ec7f..18cb798c6cd 100644 --- a/gcc/doc/gm2.texi +++ b/gcc/doc/gm2.texi @@ -573,6 +573,10 @@ the they provide the base modules which all other dialects utilize. The option @samp{-fno-libs=-} disables the @samp{gm2} driver from modifying the search and library paths. +@item -static-libgm2 +On systems that provide the m2 runtimes as both shared and static libraries, +this option forces the use of the static version. + @c flocation= @c Modula-2 Joined @c set all location values to a specific value (internal switch) diff --git a/gcc/gcc.cc b/gcc/gcc.cc index 91313a8516d..d629ca5e424 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -4540,12 +4540,14 @@ driver_handle_option (struct gcc_options *opts, case OPT_static_libgfortran: case OPT_static_libquadmath: case OPT_static_libphobos: + case OPT_static_libgm2: case OPT_static_libstdc__: - /* These are always valid, since gcc.cc itself understands the - first two, gfortranspec.cc understands -static-libgfortran, - d-spec.cc understands -static-libphobos, g++spec.cc - understands -static-libstdc++ and libgfortran.spec handles - -static-libquadmath. */ + /* These are always valid; gcc.cc itself understands the first two + gfortranspec.cc understands -static-libgfortran, + libgfortran.spec handles -static-libquadmath, + d-spec.cc understands -static-libphobos, + gm2spec.cc understands -static-libgm2, + and g++spec.cc understands -static-libstdc++. */ validated = true; break; diff --git a/gcc/m2/gm2spec.cc b/gcc/m2/gm2spec.cc index b9a5c4e79bb..583723da416 100644 --- a/gcc/m2/gm2spec.cc +++ b/gcc/m2/gm2spec.cc @@ -586,6 +586,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; @@ -595,7 +598,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. */ @@ -775,6 +779,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; @@ -875,8 +889,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) diff --git a/gcc/m2/lang.opt b/gcc/m2/lang.opt index 83a5ce7eb30..43b1bbcb2af 100644 --- a/gcc/m2/lang.opt +++ b/gcc/m2/lang.opt @@ -349,4 +349,8 @@ x Modula-2 Joined specify the language from the compiler driver +static-libgm2 +Driver +Link the standard Modula-2 libraries statically in the compilation. + ; This comment is to ensure we retain the blank line above.