[OE-core] [PATCH] newlib: Enable building libstdc++ for newlib based toolchains

Alejandro Enedino Hernandez Samaniego alejandro at enedino.org
Sun Jan 19 01:01:03 UTC 2020


On Sat, 18 Jan 2020 at 15:25, Richard Purdie <
richard.purdie at linuxfoundation.org> wrote:

> On Sat, 2020-01-18 at 13:22 -0800, Alejandro Enedino Hernandez
> Samaniego wrote:
> > Some baremetal applications might require support from libstdc++.
> >
> > On newlib based toolchains, libstdc++ can be built as a static
> > library that applications can then link against it.
> >
> > Pass libsdtc++-(static)dev to LIBC_DEPENDENCIES allowing the
> > library to be present for cross compilation as well as on
> > sdk builds.
> >
> > This also requires to modify the gcc-runtime recipe to
> > explictly build only libsdtc++ correctly.
> >
> > Signed-off-by: Alejandro Enedino Hernandez Samaniego <
> > alejandro at enedino.org>
> > ---
> >  meta/conf/distro/include/tclibc-newlib.inc | 7 +++----
> >  meta/recipes-devtools/gcc/gcc-runtime.inc  | 6 ++++++
> >  2 files changed, 9 insertions(+), 4 deletions(-)
> >
> > diff --git a/meta/conf/distro/include/tclibc-newlib.inc
> > b/meta/conf/distro/include/tclibc-newlib.inc
> > index 896c0b1..8338003 100644
> > --- a/meta/conf/distro/include/tclibc-newlib.inc
> > +++ b/meta/conf/distro/include/tclibc-newlib.inc
> > @@ -25,12 +25,11 @@ LIBC_DEPENDENCIES = "\
> >      libgloss-dbg \
> >      libgcc-dev \
> >      libgcc-dbg \
> > +    libstdc++-dev \
> > +    libstdc++-staticdev \
> >      "
> >
> > -# compilerlibs defaults to gcc-runtime, but we get runtime from
> > libgloss
> > -# we set ASSUME_PROVIDED because we cant set PREFERRED_PROVIDER
> > -# for compilerlibs since its overridden by tcmode-default
> > -ASSUME_PROVIDED += "virtual/${TARGET_PREFIX}compilerlibs
> > virtual/crypt"
> > +ASSUME_PROVIDED += "virtual/crypt"
> >
> >  # Its useful to be able to extend newlib, but we dont provide a
> > native variant of libgloss
> >  NEWLIB_EXTENDED ?=  "libgloss libgcc"
> > diff --git a/meta/recipes-devtools/gcc/gcc-runtime.inc
> > b/meta/recipes-devtools/gcc/gcc-runtime.inc
> > index d3f8ae8..f035fbd 100644
> > --- a/meta/recipes-devtools/gcc/gcc-runtime.inc
> > +++ b/meta/recipes-devtools/gcc/gcc-runtime.inc
> > @@ -17,6 +17,9 @@ EXTRA_OECONF_PATHS = "\
> >  EXTRA_OECONF_append_linuxstdbase = " --enable-clocale=gnu"
> >  EXTRA_OECONF_append = " --cache-file=${B}/config.cache"
> >
> > +EXTRA_OECONF_remove_libc-newlib = "--enable-symvers=gnu"
> > +EXTRA_OECONF_append_libc-newlib = " --with-newlib"
> > +
>
> I really don't like using remove in core. Can we restructure this so
> that symvers is set something like:
>
> SYMVERS_CONF = " --enable-clocale=gnu"
> SYMVERS_CONF_libc-newlib = ""
> EXTRA_OECONF_append += "${SYMVERS_CONF}"
>
> ?
>

Hey Richard,

Absolutely agree, I will send a v2 with these changes.

Alejandro

>
> >  # Disable ifuncs for libatomic on arm conflicts -march/-mcpu
> >  EXTRA_OECONF_append_arm = " libat_cv_have_ifunc=no "
> >
> > @@ -33,6 +36,9 @@ RUNTIMELIBITM_riscv64 = ""
> >  RUNTIMELIBSSP ?= ""
> >  RUNTIMELIBSSP_mingw32 ?= "libssp"
> >
> > +# Only build libstdc++ for newlib
> > +RUNTIMETARGET_libc-newlib = "libstdc++-v3"
> > +
> >  RUNTIMETARGET = "${RUNTIMELIBSSP} libstdc++-v3 libgomp libatomic
> > ${RUNTIMELIBITM} \
> >      ${@bb.utils.contains_any('FORTRAN', [',fortran',',f77'],
> > 'libquadmath', '', d)} \
> >  "
>
> Convention is top put the overridden version under the original.
>

Will change this as well



>
> Cheers,
>
> Richard
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20200118/2f6ce33d/attachment-0001.html>


More information about the Openembedded-core mailing list