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@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}"
?
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.
Cheers,
Richard