diff options
Diffstat (limited to 'meta/recipes-core/newlib')
-rw-r--r-- | meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch | 47 | ||||
-rw-r--r-- | meta/recipes-core/newlib/libgloss/libgloss-build-without-nostdinc.patch | 30 | ||||
-rw-r--r-- | meta/recipes-core/newlib/libgloss_git.bb | 36 | ||||
-rw-r--r-- | meta/recipes-core/newlib/newlib.inc | 61 | ||||
-rw-r--r-- | meta/recipes-core/newlib/newlib_git.bb | 20 |
5 files changed, 194 insertions, 0 deletions
diff --git a/meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch b/meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch new file mode 100644 index 0000000000..8c29fea8cf --- /dev/null +++ b/meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch @@ -0,0 +1,47 @@ +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. + + +01/2023: Rebased for libgloss 4.3.0 + +Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandro@enedino.org> + + +Index: git/libgloss/rs6000/Makefile.in +=================================================================== +--- git.orig/libgloss/rs6000/Makefile.in ++++ git/libgloss/rs6000/Makefile.in +@@ -362,7 +362,7 @@ install-sim: + + install-mvme: + ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} +- 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: + ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} +@@ -374,17 +374,17 @@ install-linux: + + install-yellowknife: + ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} +- 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: + ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} +- 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: + ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} +- 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: diff --git a/meta/recipes-core/newlib/libgloss/libgloss-build-without-nostdinc.patch b/meta/recipes-core/newlib/libgloss/libgloss-build-without-nostdinc.patch new file mode 100644 index 0000000000..2b66155eea --- /dev/null +++ b/meta/recipes-core/newlib/libgloss/libgloss-build-without-nostdinc.patch @@ -0,0 +1,30 @@ +Upstream-Status: Inappropriate [OE-Specific] + +Since commit e0c0ad82 libgloss started passing the -nostdinc to CC. + +They dont want to build against C library headers that are already in +the system to avoid pollution, however, we purposely build libgloss +against the newly built newlib C library, thats why we keep newlib +and libgloss in separate recipes and create a dependency between them. + +This causes an issue where bitbake stops finding newlib headers while +libgloss is being built. + +Do not pass -nostdinc to CC to maintain current behavior of +TCLIBC=newlib + + +Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandro@enedino.org> +Index: newlib-3.0.0/libgloss/configure +=================================================================== +--- newlib-3.0.0.orig/libgloss/configure ++++ newlib-3.0.0/libgloss/configure +@@ -5106,7 +5106,7 @@ fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_compiler_isystem" >&5 + $as_echo "$libc_cv_compiler_isystem" >&6; } +-CC="$CC -nostdinc $libc_cv_compiler_isystem" ++CC="$CC $libc_cv_compiler_isystem" + + host_makefile_frag_path=$host_makefile_frag + diff --git a/meta/recipes-core/newlib/libgloss_git.bb b/meta/recipes-core/newlib/libgloss_git.bb new file mode 100644 index 0000000000..7e34e33c7a --- /dev/null +++ b/meta/recipes-core/newlib/libgloss_git.bb @@ -0,0 +1,36 @@ +require newlib.inc + +DEPENDS += "newlib" + +FILESEXTRAPATHS:prepend := "${THISDIR}/libgloss:" + +SRC_URI:append = " file://libgloss-build-without-nostdinc.patch" +SRC_URI:append:powerpc = " file://fix-rs6000-crt0.patch" +SRC_URI:append:powerpc = " file://fix-rs6000-cflags.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 + install -d ${D}${libdir} + mv -v ${D}${prefix}/${TARGET_SYS}/lib/* ${D}${libdir} + + # Remove original directory + rmdir -p --ignore-fail-on-non-empty ${D}${prefix}/${TARGET_SYS}/lib +} + +# Split packages correctly +FILES:${PN} += "${libdir}/*.ld ${libdir}/*.specs" +FILES:${PN}-dev += "${libdir}/cpu-init/*" +# RiscV installation moved the syscall header to this location +FILES:${PN}-dev += "${prefix}/${TARGET_SYS}/include/machine/*.h" + +INHIBIT_PACKAGE_STRIP = "1" +INHIBIT_PACKAGE_DEBUG_SPLIT = "1" diff --git a/meta/recipes-core/newlib/newlib.inc b/meta/recipes-core/newlib/newlib.inc new file mode 100644 index 0000000000..6113f5e831 --- /dev/null +++ b/meta/recipes-core/newlib/newlib.inc @@ -0,0 +1,61 @@ +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 = "GPL-2.0-only & LGPL-3.0-only & GPL-3.0-only & LGPL-2.0-only & BSD-2-Clause & BSD-3-Clause & TCL & Apache-2.0-with-LLVM-exception" +LIC_FILES_CHKSUM = " \ + file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ + file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \ + file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \ + file://COPYING.LIBGLOSS;md5=c0469b6ebb847a75781066be515f032d \ + file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \ + file://COPYING.NEWLIB;md5=4f1a15846ffee91e352418563e1bce27 \ + file://newlib/libc/posix/COPYRIGHT;md5=103468ff1982be840fdf4ee9f8b51bbf \ + " + +BASEVER = "4.4.0" +PV = "${BASEVER}+git" +SRC_URI = "git://sourceware.org/git/newlib-cygwin.git;protocol=https;branch=main" +SRCREV="ad11e2587f83d61357a32c61c36d72ea4f39315e" + +INHIBIT_DEFAULT_DEPS = "1" +DEPENDS = "virtual/${TARGET_PREFIX}gcc" + +S = "${WORKDIR}/git" +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 \ + --disable-newlib-supplied-syscalls \ + " + +do_configure[cleandirs] = "${B}" + +# We need a dummy limits.h to pass preprocessor checks +do_configure:append(){ + install -d ${STAGING_INCDIR} + touch ${STAGING_INCDIR}/limits.h +} + +do_install() { + oe_runmake install DESTDIR='${D}' +} + +COMPATIBLE_HOST:libc-musl:class-target = "null" +COMPATIBLE_HOST:libc-glibc:class-target = "null" diff --git a/meta/recipes-core/newlib/newlib_git.bb b/meta/recipes-core/newlib/newlib_git.bb new file mode 100644 index 0000000000..fb922d65d1 --- /dev/null +++ b/meta/recipes-core/newlib/newlib_git.bb @@ -0,0 +1,20 @@ +require newlib.inc + +PROVIDES += "virtual/libc virtual/libiconv virtual/libintl" + +do_configure() { + export CC_FOR_TARGET="${CC}" + ${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} +} + +# No rpm package is actually created but -dev depends on it, avoid dnf error +DEV_PKG_DEPENDENCY:libc-newlib = "" |