On Sun, Jan 4, 2026 at 11:17 PM Andrew Pinski
<[email protected]> wrote:
>
> On Sun, Jan 4, 2026 at 10:43 PM Keith Packard <[email protected]> wrote:
> >
> > This option adds a per-multilib variant that specifies -Os
> > instead of the default.
>
> I am not a fan of this; especially how this interacts with
> --enable-target-optspace or with MULTILIB_OSDIRNAMES or with
> MULTIARCH_* support.
> Is there a reason why --enable-target-optspace can't be used with
> zephyr? Do they want the option to allow for both -Os and -O2 target
> libraries in the same toolchain?

At least this should error out if both --enable-target-optspace and
--enable-multilib-space options are used on the configure line.
Now the question what should be done if -Os/-Oz is already in
CFLAGS_FOR_TARGET/CXXFLAGS_FOR_TARGET (which is what
--enable-target-optspace does in the end) and building/configure with
--enable-multilib-space; and error would be best I think. Because the
reason for the multilib does not exist.

Thanks,
Andrew

>
> Thanks,
> Andrew
>
> >
> > Signed-off-by: Keith Packard <[email protected]>
> > ---
> >  config-ml.in         |  2 +-
> >  gcc/Makefile.in      | 32 +++++++++++++++++++++++++++-----
> >  gcc/configure.ac     |  7 +++++++
> >  gcc/doc/install.texi | 12 ++++++++++++
> >  4 files changed, 47 insertions(+), 6 deletions(-)
> >
> > diff --git a/config-ml.in b/config-ml.in
> > index 9cdcae1191d..8aefaad3cb9 100644
> > --- a/config-ml.in
> > +++ b/config-ml.in
> > @@ -175,7 +175,7 @@ eval scan_arguments "${ac_configure_args}"
> >  unset scan_arguments
> >
> >  # Only do this if --enable-multilib.
> > -if [ "${enable_multilib}" = yes ]; then
> > +if [ "${enable_multilib}" = yes -o "${enable_multilib_space}" = yes ]; then
> >
> >  # Compute whether this is the library's top level directory
> >  # (ie: not a multilib subdirectory, and not a subdirectory like 
> > newlib/src).
> > diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> > index 917d586e572..1c6115ea64b 100644
> > --- a/gcc/Makefile.in
> > +++ b/gcc/Makefile.in
> > @@ -2510,25 +2510,47 @@ libgcc.mvars: config.status Makefile specs 
> > xgcc$(exeext)
> >
> >         mv tmp-libgcc.mvars libgcc.mvars
> >
> > +ifeq (@enable_multilib_space@,yes)
> > +MULTILIB_OPTIONS       += Os
> > +MULTILIB_DIRNAMES      += space
> > +MULTILIB_MATCHES       += Os=Oz
> > +
> > +MULTILIB_OSDIRNAMES_SPACE = $(MULTILIB_OSDIRNAMES)\
> > +       $(if $(findstring =,$(MULTILIB_OSDIRNAMES)),\
> > +         $(foreach OSD,$(MULTILIB_OSDIRNAMES),$(subst 
> > =,/Os=,$(OSD))/space),\
> > +         $(if $(MULTILIB_OSDIRNAMES),space,))
> > +MULTILIB_REQUIRED_SPACE = $(if $(MULTILIB_REQUIRED),Os $(foreach REQ, 
> > $(MULTILIB_REQUIRED), $(REQ) $(REQ)/Os),)
> > +MULTILIB_EXCEPTIONS_SPACE = $(foreach EXC, $(MULTILIB_EXCEPTIONS), $(EXC) 
> > $(EXC)/Os)
> > +MULTILIB_REUSE_SPACE = $(foreach REU, $(MULTILIB_REUSE), $(REU) $(subst 
> > =,/Os=,$(REU))/Os)
> > +MULTILIB_ENABLE = yes
> > +else
> > +MULTILIB_OSDIRNAMES_SPACE = $(MULTILIB_OSDIRNAMES)
> > +MULTILIB_REQUIRED_SPACE = $(MULTILIB_REQUIRED)
> > +MULTILIB_EXCEPTIONS_SPACE = $(MULTILIB_EXCEPTIONS)
> > +MULTILIB_REUSE_SPACE = $(MULTILIB_REUSE)
> > +MULTILIB_ENABLE = @enable_multilib@
> > +endif
> > +
> >  # Use the genmultilib shell script to generate the information the gcc
> >  # driver program needs to select the library directory based on the
> >  # switches.
> >  multilib.h: s-mlib; @true
> >  s-mlib: $(srcdir)/genmultilib Makefile
> >         if test @enable_multilib@ = yes \
> > +           || test @enable_multilib_space@ = yes \
> >            || test -n "$(MULTILIB_OSDIRNAMES)"; then \
> >           $(SHELL) $(srcdir)/genmultilib \
> >             "$(MULTILIB_OPTIONS)" \
> >             "$(MULTILIB_DIRNAMES)" \
> >             "$(MULTILIB_MATCHES)" \
> > -           "$(MULTILIB_EXCEPTIONS)" \
> > +           "$(MULTILIB_EXCEPTIONS_SPACE)" \
> >             "$(MULTILIB_EXTRA_OPTS)" \
> >             "$(MULTILIB_EXCLUSIONS)" \
> > -           "$(MULTILIB_OSDIRNAMES)" \
> > -           "$(MULTILIB_REQUIRED)" \
> > +           "$(MULTILIB_OSDIRNAMES_SPACE)" \
> > +           "$(MULTILIB_REQUIRED_SPACE)" \
> >             "$(if $(MULTILIB_OSDIRNAMES),,$(MULTIARCH_DIRNAME))" \
> > -           "$(MULTILIB_REUSE)" \
> > -           "@enable_multilib@" \
> > +           "$(MULTILIB_REUSE_SPACE)" \
> > +           "$(MULTILIB_ENABLE)" \
> >             > tmp-mlib.h; \
> >         else \
> >           $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' '' \
> > diff --git a/gcc/configure.ac b/gcc/configure.ac
> > index 458f5c99028..e841976e236 100644
> > --- a/gcc/configure.ac
> > +++ b/gcc/configure.ac
> > @@ -858,6 +858,13 @@ AC_ARG_ENABLE(multilib,
> >  [], [enable_multilib=yes])
> >  AC_SUBST(enable_multilib)
> >
> > +# Determine whether or not -Os multilibs are enabled.
> > +AC_ARG_ENABLE(multilib-space,
> > +[AS_HELP_STRING([--enable-multilib-space],
> > +               [enable extra -Os variant for every multilib ABI])],
> > +[], [enable_multilib_space=no])
> > +AC_SUBST(enable_multilib_space)
> > +
> >  # Determine whether or not multiarch is enabled.
> >  AC_ARG_ENABLE(multiarch,
> >  [AS_HELP_STRING([--enable-multiarch],
> > diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
> > index 0563ff11807..6145db6e63f 100644
> > --- a/gcc/doc/install.texi
> > +++ b/gcc/doc/install.texi
> > @@ -1338,6 +1338,18 @@ for aarch64*-*-*, amdgcn*-*-*, arm*-*-*, 
> > loongarch*-*-*, nvptx-*, riscv*-*-*,
> >  sh*-*-* and x86-64-*-linux*.
> >  The accepted values and meaning for each target is given below.
> >
> > +@item --enable-multilib-space
> > +Double the set of target libraries built by building two versions of
> > +each specified by the options above, one using @option{-O2 }and
> > +another using @option{-Os}. During linking, the @option{-O2} variant
> > +will be selected by default. Select the @option{-Os} variant by
> > +including @option{-Os} or @option{-Oz} in the linker command
> > +line. Note: because multilib selection only looks for the presence of
> > +compiler flags (unlike options controlling the compiler optimization
> > +level), a subsequent optimization flag other than @option{-Os} or or
> > +@option{-Oz} will not switch back to the @option{-O2} library
> > +versions.
> > +
> >  @table @code
> >  @item aarch64*-*-*
> >  @var{list} is a comma separated list of @code{ilp32}, and @code{lp64}
> > --
> > 2.51.0
> >

Reply via email to