summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Enedino Hernandez Samaniego <alejandr@xilinx.com>2018-04-27 13:21:20 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-06-15 17:56:24 +0100
commit073dbcedf528ba817f828cc9d0a604a4c8c99927 (patch)
treed68895a09af47d2567a9f865dd96882becbb3262
parent361f7a902d4a90c422c8aca1cc23eda55bd18a27 (diff)
downloadpoky-073dbcedf528ba817f828cc9d0a604a4c8c99927.tar.gz
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. (From OE-Core rev: 9f0570351a7b0877aa50efff5fe9a9ef368cb38f) Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandr@xilinx.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/cross-canadian.bbclass2
-rw-r--r--meta/conf/distro/include/tclibc-newlib.inc44
-rw-r--r--meta/recipes-core/newlib/newlib_3.0.0.bb3
-rw-r--r--meta/recipes-devtools/gcc/libgcc-common.inc5
4 files changed, 53 insertions, 1 deletions
diff --git a/meta/classes/cross-canadian.bbclass b/meta/classes/cross-canadian.bbclass
index ee8aa6142a..acde331ef9 100644
--- a/meta/classes/cross-canadian.bbclass
+++ b/meta/classes/cross-canadian.bbclass
@@ -30,7 +30,7 @@ python () {
30 if d.getVar("MODIFYTOS") != "1": 30 if d.getVar("MODIFYTOS") != "1":
31 return 31 return
32 32
33 if d.getVar("TCLIBC") == "baremetal": 33 if d.getVar("TCLIBC") in [ 'baremetal', 'newlib' ]:
34 return 34 return
35 35
36 tos = d.getVar("TARGET_OS") 36 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 0000000000..dc631d8ada
--- /dev/null
+++ b/meta/conf/distro/include/tclibc-newlib.inc
@@ -0,0 +1,44 @@
1#
2# Newlib configuration
3#
4
5LIBCEXTENSION = "-newlib"
6LIBCOVERRIDE = ":libc-newlib"
7
8PREFERRED_PROVIDER_virtual/libc ?= "newlib"
9PREFERRED_PROVIDER_virtual/libiconv ?= "newlib"
10PREFERRED_PROVIDER_virtual/libintl ?= "newlib"
11PREFERRED_PROVIDER_virtual/nativesdk-libintl ?= "nativesdk-glibc"
12PREFERRED_PROVIDER_virtual/nativesdk-libiconv ?= "nativesdk-glibc"
13
14DISTRO_FEATURES_BACKFILL_CONSIDERED += "ldconfig"
15
16#USE_NLS ?= "no"
17
18IMAGE_LINGUAS = ""
19
20LIBC_DEPENDENCIES = "\
21 newlib-dbg \
22 newlib-dev \
23 libgloss \
24 libgloss-dev \
25 libgloss-dbg \
26 libgcc-dev \
27 libgcc-dbg \
28 "
29
30# compilerlibs defaults to gcc-runtime, but we get runtime from libgloss
31# we set ASSUME_PROVIDED because we cant set PREFERRED_PROVIDER
32# for compilerlibs since its overridden by tcmode-default
33ASSUME_PROVIDED += "virtual/${TARGET_PREFIX}compilerlibs virtual/crypt"
34
35# Its useful to be able to extend newlib, but we dont provide a native variant of libgloss
36NEWLIB_EXTENDED ?= "libgloss libgcc"
37BASE_DEFAULT_DEPS_append_class-target = " ${NEWLIB_EXTENDED}"
38
39TARGET_OS = "elf"
40TARGET_OS_arm = "eabi"
41
42TOOLCHAIN_HOST_TASK ?= "packagegroup-cross-canadian-${MACHINE}"
43TOOLCHAIN_TARGET_TASK ?= "${LIBC_DEPENDENCIES}"
44TOOLCHAIN_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 3380576b83..09238fe006 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() {
14 # Remove original directory 14 # Remove original directory
15 rmdir ${D}${prefix}/${TARGET_SYS} 15 rmdir ${D}${prefix}/${TARGET_SYS}
16} 16}
17
18# No rpm package is actually created but -dev depends on it, avoid dnf error
19RDEPENDS_${PN}-dev_libc-newlib = ""
diff --git a/meta/recipes-devtools/gcc/libgcc-common.inc b/meta/recipes-devtools/gcc/libgcc-common.inc
index 848a476207..d959566c3f 100644
--- a/meta/recipes-devtools/gcc/libgcc-common.inc
+++ b/meta/recipes-devtools/gcc/libgcc-common.inc
@@ -47,8 +47,13 @@ do_install () {
47do_install_append_libc-baremetal () { 47do_install_append_libc-baremetal () {
48 rmdir ${D}${base_libdir} 48 rmdir ${D}${base_libdir}
49} 49}
50do_install_append_libc-newlib () {
51 rmdir ${D}${base_libdir}
52}
50 53
54# No rpm package is actually created but -dev depends on it, avoid dnf error
51RDEPENDS_${PN}-dev_libc-baremetal = "" 55RDEPENDS_${PN}-dev_libc-baremetal = ""
56RDEPENDS_${PN}-dev_libc-newlib = ""
52 57
53BBCLASSEXTEND = "nativesdk" 58BBCLASSEXTEND = "nativesdk"
54 59