mirror of
https://git.yoctoproject.org/poky
synced 2026-05-05 20:27:58 +02:00
newlib: Adds newlib and libgloss recipes
Newlib is a C library that is intended to be used on embedded systems. It is a conglomeration of several library parts, all under free software licenses that make them easily usable on embedded products. Newlib provides a C library alternative that can run on baremetal, mainly for resource constrained devices. Libgloss is the BSP part of the C library, which can be easily modified to port for new hardware platforms. (From OE-Core rev: fe490ff829440b94124317759d856e2e2daf5047) Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandr@xilinx.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
b6dbfabbad
commit
ae5e33ddc4
41
meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch
Normal file
41
meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch
Normal file
@@ -0,0 +1,41 @@
|
||||
Upstream-Status: Inappropriate [OE-Specific]
|
||||
|
||||
Make install tries to perform install for all variants, but some of them use the same
|
||||
name for crt0 in specific, so performing all of them results in an error during
|
||||
do_install, we simply modify the name of the objects so the installation can proceed
|
||||
and leave it to the user to select which object files to use.
|
||||
|
||||
Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandr@xilinx.com>
|
||||
|
||||
Index: newlib-3.0.0/libgloss/rs6000/Makefile.in
|
||||
===================================================================
|
||||
--- newlib-3.0.0.orig/libgloss/rs6000/Makefile.in
|
||||
+++ newlib-3.0.0/libgloss/rs6000/Makefile.in
|
||||
@@ -358,7 +358,7 @@ install-sim:
|
||||
set -e; for x in ${SIM_CRT0} ${SIM_BSP} ${SIM_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||
|
||||
install-mvme:
|
||||
- set -e; for x in ${MVME_CRT0} ${MVME_BSP} ${MVME_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||
+ set -e; for x in ${MVME_CRT0} ${MVME_BSP} ${MVME_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/mvme-$$x; done
|
||||
|
||||
install-solaris:
|
||||
set -e; for x in ${SOLARIS_CRT0} ${SOLARIS_BSP} ${SOLARIS_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||
@@ -367,15 +367,15 @@ install-linux:
|
||||
set -e; for x in ${LINUX_CRT0} ${LINUX_BSP} ${LINUX_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||
|
||||
install-yellowknife:
|
||||
- set -e; for x in ${YELLOWKNIFE_CRT0} ${YELLOWKNIFE_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||
+ set -e; for x in ${YELLOWKNIFE_CRT0} ${YELLOWKNIFE_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/yellowknife-$$x; done
|
||||
set -e; for x in ${YELLOWKNIFE_SCRIPTS}; do ${INSTALL_DATA} $(srcdir)/$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||
|
||||
install-ads:
|
||||
- set -e; for x in ${ADS_CRT0} ${ADS_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||
+ set -e; for x in ${ADS_CRT0} ${ADS_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/ads-$$x; done
|
||||
set -e; for x in ${ADS_SCRIPTS}; do ${INSTALL_DATA} $(srcdir)/$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||
|
||||
install-mbx:
|
||||
- set -e; for x in ${MBX_CRT0} ${MBX_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||
+ set -e; for x in ${MBX_CRT0} ${MBX_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/mbx-$$x; done
|
||||
set -e; for x in ${MBX_SCRIPTS} ${MBX_SPECS}; do ${INSTALL_DATA} $(srcdir)/$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||
|
||||
install-xil:
|
||||
@@ -0,0 +1,30 @@
|
||||
Upstream-Status: Inappropriate [OE-Specific]
|
||||
|
||||
When trying to build libgloss for an arm target, the build system
|
||||
complains about missing some include files:
|
||||
|
||||
| fatal error: acle-compiat.h: No such file or directory
|
||||
| #include "acle-compat.h"
|
||||
| ^~~~~~~~~~~~~~~
|
||||
| compilation terminated.
|
||||
|
||||
These include files come from the newlib source, but since we
|
||||
are building libgloss separately from newlib, libgloss is unaware
|
||||
of where they are, this patch fixes the INCLUDES so the build system
|
||||
can find such files.
|
||||
|
||||
Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandr@xilinx.com>
|
||||
|
||||
Index: newlib-3.0.0/libgloss/config/default.mh
|
||||
===================================================================
|
||||
--- newlib-3.0.0.orig/libgloss/config/default.mh
|
||||
+++ newlib-3.0.0/libgloss/config/default.mh
|
||||
@@ -1,7 +1,7 @@
|
||||
NEWLIB_CFLAGS = `if [ -d ${objroot}/newlib ]; then echo -I${objroot}/newlib/targ-include -I${srcroot}/newlib/libc/include; fi`
|
||||
NEWLIB_LDFLAGS = `if [ -d ${objroot}/newlib ]; then echo -B${objroot}/newlib/ -L${objroot}/newlib/; fi`
|
||||
|
||||
-INCLUDES = -I. -I$(srcdir)/..
|
||||
+INCLUDES = -I. -I$(srcdir)/.. -I$(srcdir)/../newlib/libc/machine/arm
|
||||
# Note that when building the library, ${MULTILIB} is not the way multilib
|
||||
# options are passed; they're passed in $(CFLAGS).
|
||||
CFLAGS_FOR_TARGET = -O2 -g ${MULTILIB} ${INCLUDES} ${NEWLIB_CFLAGS}
|
||||
32
meta/recipes-core/newlib/libgloss_3.0.0.bb
Normal file
32
meta/recipes-core/newlib/libgloss_3.0.0.bb
Normal file
@@ -0,0 +1,32 @@
|
||||
require newlib.inc
|
||||
|
||||
DEPENDS += "newlib"
|
||||
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/libgloss:"
|
||||
|
||||
SRC_URI_append_powerpc = " file://fix-rs6000-crt0.patch"
|
||||
SRC_URI_append_arm = " file://fix_makefile_include_arm_h.patch"
|
||||
|
||||
do_configure() {
|
||||
${S}/libgloss/configure ${EXTRA_OECONF}
|
||||
}
|
||||
|
||||
do_install_prepend() {
|
||||
# install doesn't create this itself, avoid install error
|
||||
install -d ${D}${prefix}/${TARGET_SYS}/lib
|
||||
}
|
||||
|
||||
do_install_append() {
|
||||
# Move libs to default directories so they can be picked up later
|
||||
mv -v ${D}${prefix}/${TARGET_SYS}/lib ${D}${libdir}
|
||||
|
||||
# Remove original directory
|
||||
rmdir ${D}${prefix}/${TARGET_SYS}
|
||||
}
|
||||
|
||||
# Split packages correctly
|
||||
FILES_${PN} += "${libdir}/*.ld ${libdir}/*.specs"
|
||||
FILES_${PN}-dev += "${libdir}/cpu-init/*"
|
||||
|
||||
INHIBIT_PACKAGE_STRIP = "1"
|
||||
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
|
||||
58
meta/recipes-core/newlib/newlib.inc
Normal file
58
meta/recipes-core/newlib/newlib.inc
Normal file
@@ -0,0 +1,58 @@
|
||||
SUMMARY = "Newlib is a C library intended for use on embedded systems"
|
||||
HOMEPAGE = "https://sourceware.org/newlib/"
|
||||
DESCRIPTION = "C library intended for use on embedded systems. It is a conglomeration of several library parts, all under free software licenses that make them easily usable on embedded products."
|
||||
SECTION = "libs"
|
||||
|
||||
LICENSE = "GPLv2 & LGPLv3 & GPLv3 & LGPLv2"
|
||||
LIC_FILES_CHKSUM = " \
|
||||
file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
|
||||
file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
|
||||
file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \
|
||||
file://COPYING.LIBGLOSS;md5=73f5c98779aea7dba4a6c94a74ab0ae2 \
|
||||
file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
|
||||
file://COPYING.NEWLIB;md5=956a4b1487f7677cdcceeee8f05a21f0 \
|
||||
file://newlib/libc/posix/COPYRIGHT;md5=103468ff1982be840fdf4ee9f8b51bbf \
|
||||
file://newlib/libc/sys/linux/linuxthreads/LICENSE;md5=73640207fbc79b198c7ffd4ad4d97aa0 \
|
||||
"
|
||||
|
||||
SRC_URI = "ftp://sourceware.org/pub/newlib/newlib-${PV}.tar.gz"
|
||||
SRC_URI[md5sum] = "81ec873108b8593c586f91ca65963952"
|
||||
SRC_URI[sha256sum] = "c8566335ee74e5fcaeb8595b4ebd0400c4b043d6acb3263ecb1314f8f5501332"
|
||||
|
||||
INHIBIT_DEFAULT_DEPS = "1"
|
||||
DEPENDS = "virtual/${TARGET_PREFIX}gcc-initial"
|
||||
|
||||
PATH_prepend = "${STAGING_BINDIR_TOOLCHAIN}.${STAGINGCC}:"
|
||||
STAGINGCC = "gcc-cross-initial-${TARGET_ARCH}"
|
||||
STAGINGCC_class-nativesdk = "gcc-crosssdk-initial-${SDK_SYS}"
|
||||
|
||||
S = "${WORKDIR}/newlib-${PV}"
|
||||
B = "${WORKDIR}/build"
|
||||
|
||||
## disable stdlib
|
||||
TARGET_CC_ARCH_append = " -nostdlib"
|
||||
|
||||
EXTRA_OECONF = " \
|
||||
--build=${BUILD_SYS} \
|
||||
--target=${TARGET_SYS} \
|
||||
--host=${HOST_SYS} \
|
||||
--prefix=${prefix} \
|
||||
--exec-prefix=${exec_prefix} \
|
||||
--bindir=${bindir} \
|
||||
--libdir=${libdir} \
|
||||
--includedir=${includedir} \
|
||||
--enable-languages=c \
|
||||
--with-newlib \
|
||||
--with-gnu-as \
|
||||
--with-gnu-ld \
|
||||
--disable-multilib \
|
||||
"
|
||||
|
||||
do_configure[cleandirs] = "${B}"
|
||||
|
||||
do_install() {
|
||||
oe_runmake install DESTDIR='${D}'
|
||||
}
|
||||
|
||||
COMPATIBLE_HOST_libc-musl_class-target = "null"
|
||||
COMPATIBLE_HOST_libc-glibc_class-target = "null"
|
||||
16
meta/recipes-core/newlib/newlib_3.0.0.bb
Normal file
16
meta/recipes-core/newlib/newlib_3.0.0.bb
Normal file
@@ -0,0 +1,16 @@
|
||||
require newlib.inc
|
||||
|
||||
PROVIDES += "virtual/libc virtual/${TARGET_PREFIX}libc-for-gcc virtual/libiconv virtual/libintl"
|
||||
|
||||
do_configure() {
|
||||
${S}/configure ${EXTRA_OECONF}
|
||||
}
|
||||
|
||||
do_install_append() {
|
||||
# Move include files and libs to default directories so they can be picked up later
|
||||
mv -v ${D}${prefix}/${TARGET_SYS}/lib ${D}${libdir}
|
||||
mv -v ${D}${prefix}/${TARGET_SYS}/include ${D}${includedir}
|
||||
|
||||
# Remove original directory
|
||||
rmdir ${D}${prefix}/${TARGET_SYS}
|
||||
}
|
||||
@@ -35,6 +35,7 @@ EXTRA_OECONF += "\
|
||||
DEPENDS_remove_libc-baremetal := "virtual/${TARGET_PREFIX}libc-for-gcc"
|
||||
EXTRA_OECONF_append_libc-baremetal = " --without-headers"
|
||||
EXTRA_OECONF_remove_libc-baremetal = "--enable-threads=posix"
|
||||
EXTRA_OECONF_remove_libc-newlib = "--enable-threads=posix"
|
||||
|
||||
EXTRA_OECONF_PATHS = "\
|
||||
--with-gxx-include-dir=/not/exist${target_includedir}/c++/${BINV} \
|
||||
|
||||
Reference in New Issue
Block a user