tclibc-newlib: Adds a new TCLIBC variant to build with newlib as C library
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v2 3/3 tclibc-newlib: Adds a new TCLIBC variant to build with newlib as C library
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.
--- 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
meta/classes/cross-canadian.bbclass +1 -1
@@ -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")
meta/conf/distro/include/tclibc-newlib.inc new file +44 -0
44 lines not on this page · raw message
meta/recipes-core/newlib/newlib_3.0.0.bb +3 -0
@@ -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 = ""
meta/recipes-devtools/gcc/libgcc-common.inc +5 -0
@@ -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"
--
2.7.4
This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.
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
Quoted 116 lines · Alejandro Enedino Hernandez Samaniego
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_EXTENDEDfor this specific reason.--- 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
meta/classes/cross-canadian.bbclass +1
-1@@ -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")meta/conf/distro/include/tclibc-newlib.inc new file +44
-0@@ -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"meta/recipes-core/newlib/newlib_3.0.0.bb +3
-0@@ -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 = ""meta/recipes-devtools/gcc/libgcc-common.inc +5
-0@@ -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"