[oe-commits] [openembedded-core] 04/04: tclibc-newlib: Adds a new TCLIBC variant to build with newlib as C library

git at git.openembedded.org git at git.openembedded.org
Fri Jun 15 07:55:47 UTC 2018


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository openembedded-core.

commit 9f0570351a7b0877aa50efff5fe9a9ef368cb38f
Author: Alejandro Enedino Hernandez Samaniego <alejandr at xilinx.com>
AuthorDate: Fri Apr 27 13:21:20 2018 -0700

    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.
    
    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(-)

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"
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list