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

Richard Purdie richard.purdie at linuxfoundation.org
Sat Jan 18 23:25:50 UTC 2020


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}"

?

>  # 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.

Cheers,

Richard



More information about the Openembedded-core mailing list