[OE-core] [PATCH v2 3/3] tclibc-newlib: Adds a new TCLIBC variant to build with newlib as C library

Alejandro Enedino Hernandez Samaniego alejandro.enedino.hernandez-samaniego at xilinx.com
Tue May 29 22:40:19 UTC 2018


I was unable to reply to the thread, this is the updated patch, the 
contrib branch aehs29/newilb has also been rebased to latest master.


Cheers,

Alejandro


On 05/29/2018 03:38 PM, Alejandro Enedino Hernandez Samaniego wrote:
> This patch adds the posibility to build using TCLIBC=newlib.
>
> It allows users to build baremetal applications with the use of a
> C library.
>
> Newlib is a lightweight C library meant to be used on embedded systems,
> it is meant to be easily portable for new platforms and to provide
> basic functionality on them, by design, it provides stubs for some of
> these core functions declared as weak, so they can be built correctly
> and then linked against some other library which provides specifics
> about the platform being used if need be, libgloss takes care of these
> in some cases, but it can also be extended, this patch also allows the
> user to easily add other libraries to it by adding them to
> NEWLIB_EXTENDED for this specific reason.
>
> Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandr at xilinx.com>
> ---
>   meta/classes/cross-canadian.bbclass         |  2 +-
>   meta/conf/distro/include/tclibc-newlib.inc  | 44 +++++++++++++++++++++++++++++
>   meta/recipes-core/newlib/newlib_3.0.0.bb    |  3 ++
>   meta/recipes-devtools/gcc/libgcc-common.inc |  5 ++++
>   4 files changed, 53 insertions(+), 1 deletion(-)
>   create mode 100644 meta/conf/distro/include/tclibc-newlib.inc
>
> diff --git a/meta/classes/cross-canadian.bbclass b/meta/classes/cross-canadian.bbclass
> index ee8aa61..acde331 100644
> --- a/meta/classes/cross-canadian.bbclass
> +++ b/meta/classes/cross-canadian.bbclass
> @@ -30,7 +30,7 @@ python () {
>       if d.getVar("MODIFYTOS") != "1":
>           return
>   
> -    if d.getVar("TCLIBC") == "baremetal":
> +    if d.getVar("TCLIBC") in [ 'baremetal', 'newlib' ]:
>           return
>   
>       tos = d.getVar("TARGET_OS")
> diff --git a/meta/conf/distro/include/tclibc-newlib.inc b/meta/conf/distro/include/tclibc-newlib.inc
> new file mode 100644
> index 0000000..dc631d8
> --- /dev/null
> +++ b/meta/conf/distro/include/tclibc-newlib.inc
> @@ -0,0 +1,44 @@
> +#
> +# Newlib configuration
> +#
> +
> +LIBCEXTENSION = "-newlib"
> +LIBCOVERRIDE = ":libc-newlib"
> +
> +PREFERRED_PROVIDER_virtual/libc ?= "newlib"
> +PREFERRED_PROVIDER_virtual/libiconv ?= "newlib"
> +PREFERRED_PROVIDER_virtual/libintl ?= "newlib"
> +PREFERRED_PROVIDER_virtual/nativesdk-libintl ?= "nativesdk-glibc"
> +PREFERRED_PROVIDER_virtual/nativesdk-libiconv ?= "nativesdk-glibc"
> +
> +DISTRO_FEATURES_BACKFILL_CONSIDERED += "ldconfig"
> +
> +#USE_NLS ?= "no"
> +
> +IMAGE_LINGUAS = ""
> +
> +LIBC_DEPENDENCIES = "\
> +    newlib-dbg \
> +    newlib-dev \
> +    libgloss \
> +    libgloss-dev \
> +    libgloss-dbg \
> +    libgcc-dev \
> +    libgcc-dbg \
> +    "
> +
> +# 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"
> +
> +# Its useful to be able to extend newlib, but we dont provide a native variant of libgloss
> +NEWLIB_EXTENDED ?=  "libgloss libgcc"
> +BASE_DEFAULT_DEPS_append_class-target = " ${NEWLIB_EXTENDED}"
> +
> +TARGET_OS = "elf"
> +TARGET_OS_arm = "eabi"
> +
> +TOOLCHAIN_HOST_TASK ?= "packagegroup-cross-canadian-${MACHINE}"
> +TOOLCHAIN_TARGET_TASK ?= "${LIBC_DEPENDENCIES}"
> +TOOLCHAIN_NEED_CONFIGSITE_CACHE_remove = "zlib ncurses"
> diff --git a/meta/recipes-core/newlib/newlib_3.0.0.bb b/meta/recipes-core/newlib/newlib_3.0.0.bb
> index 3380576..09238fe 100644
> --- a/meta/recipes-core/newlib/newlib_3.0.0.bb
> +++ b/meta/recipes-core/newlib/newlib_3.0.0.bb
> @@ -14,3 +14,6 @@ do_install_append() {
>   	# Remove original directory
>   	rmdir ${D}${prefix}/${TARGET_SYS}
>   }
> +
> +# No rpm package is actually created but -dev depends on it, avoid dnf error
> +RDEPENDS_${PN}-dev_libc-newlib = ""
> diff --git a/meta/recipes-devtools/gcc/libgcc-common.inc b/meta/recipes-devtools/gcc/libgcc-common.inc
> index 848a476..d959566 100644
> --- a/meta/recipes-devtools/gcc/libgcc-common.inc
> +++ b/meta/recipes-devtools/gcc/libgcc-common.inc
> @@ -47,8 +47,13 @@ do_install () {
>   do_install_append_libc-baremetal () {
>   	rmdir ${D}${base_libdir}
>   }
> +do_install_append_libc-newlib () {
> +	rmdir ${D}${base_libdir}
> +}
>   
> +# No rpm package is actually created but -dev depends on it, avoid dnf error
>   RDEPENDS_${PN}-dev_libc-baremetal = ""
> +RDEPENDS_${PN}-dev_libc-newlib = ""
>   
>   BBCLASSEXTEND = "nativesdk"
>   




More information about the Openembedded-core mailing list