Iain Sandoe <i...@sandoe.co.uk> writes: > Hi Gaius, > >> On 4 Jan 2023, at 12:11, Gaius Mulley <gaiusm...@gmail.com> wrote: >> >> Iain Sandoe <iains....@gmail.com> writes: >> >>> tested on x86_64-linux-gnu, x86_64,aarch64-darwin21, > >> >> yes LGTM - it was unimplemented - thanks! > > My apologies, when I came to apply this I realised that I posted the wrong > version of the patch - omitting the documentation changes. > > Here is the version with (albeit basic) documentation. > Still OK for master? > Iain
Hi Iain, yes LGTM thanks, Gaius > [PATCH] 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. > --- > 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. > —