From f3ad36d15ccb88f89cb0621593b69b63b47a5358 Mon Sep 17 00:00:00 2001 From: Alejandro Hernandez Samaniego Date: Fri, 27 Jan 2023 12:43:30 -0700 Subject: newlib: Upgrade 4.2.0 -> 4.3.0 - Rebased fix-rs6000-crt0.patch - Patch fix_makefile_include_arm_h.patch is no longer required, the newlib header dependency has been fixed upstream at 26f9cfd7 - LICENSE checksum change due to: - Adding SPDX identifier - Deleted Phoenix Systems from License and updated each licenses numbers accordingly. - Add a dummy limits.h header, to make the improved preprocessor checks happy during configure. - Add a patch for libgloss to maintain current behavior of TCLIBC=newlib by making libgloss DEPEND on newlib and use its installed headers. - Switch to git fetcher to simplify fetching the sources and avoid future issues due to the way newlib release snapshots were being published. (From OE-Core rev: 1c9cbb27dfe37ca4574c4285fb03ce394dee5ed1) Signed-off-by: Alejandro Enedino Hernandez Samaniego Signed-off-by: Richard Purdie --- meta/conf/distro/include/maintainers.inc | 4 +-- .../newlib/libgloss/fix-rs6000-crt0.patch | 24 +++++++++------ .../libgloss/libgloss-build-without-nostdinc.patch | 30 ++++++++++++++++++ meta/recipes-core/newlib/libgloss_4.2.0.bb | 33 -------------------- meta/recipes-core/newlib/libgloss_4.3.0.bb | 36 ++++++++++++++++++++++ meta/recipes-core/newlib/newlib.inc | 23 +++++++------- meta/recipes-core/newlib/newlib_4.2.0.bb | 20 ------------ meta/recipes-core/newlib/newlib_git.bb | 20 ++++++++++++ 8 files changed, 115 insertions(+), 75 deletions(-) create mode 100644 meta/recipes-core/newlib/libgloss/libgloss-build-without-nostdinc.patch delete mode 100644 meta/recipes-core/newlib/libgloss_4.2.0.bb create mode 100644 meta/recipes-core/newlib/libgloss_4.3.0.bb delete mode 100644 meta/recipes-core/newlib/newlib_4.2.0.bb create mode 100644 meta/recipes-core/newlib/newlib_git.bb diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index 23c2e02d0d..ec7ea90d16 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -339,7 +339,7 @@ RECIPE_MAINTAINER:pn-libgcc-initial = "Khem Raj " RECIPE_MAINTAINER:pn-libgcrypt = "Hongxu Jia " RECIPE_MAINTAINER:pn-libgfortran = "Khem Raj " RECIPE_MAINTAINER:pn-libgit2 = "Unassigned " -RECIPE_MAINTAINER:pn-libgloss = "Alejandro Hernandez " +RECIPE_MAINTAINER:pn-libgloss = "Alejandro Hernandez " RECIPE_MAINTAINER:pn-libglu = "Ross Burton " RECIPE_MAINTAINER:pn-libgpg-error = "Hongxu Jia " RECIPE_MAINTAINER:pn-libgudev = "Ross Burton " @@ -535,7 +535,7 @@ RECIPE_MAINTAINER:pn-nativesdk-libtool = "Richard Purdie -Index: newlib-3.0.0/libgloss/rs6000/Makefile.in +01/2023: Rebased for libgloss 4.3.0 + +Signed-off-by: Alejandro Enedino Hernandez Samaniego + + +Index: git/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 +--- 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: - 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 + ${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 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 +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_4.2.0.bb b/meta/recipes-core/newlib/libgloss_4.2.0.bb deleted file mode 100644 index 8c8ee91395..0000000000 --- a/meta/recipes-core/newlib/libgloss_4.2.0.bb +++ /dev/null @@ -1,33 +0,0 @@ -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 - 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/*" - -INHIBIT_PACKAGE_STRIP = "1" -INHIBIT_PACKAGE_DEBUG_SPLIT = "1" diff --git a/meta/recipes-core/newlib/libgloss_4.3.0.bb b/meta/recipes-core/newlib/libgloss_4.3.0.bb new file mode 100644 index 0000000000..7e34e33c7a --- /dev/null +++ b/meta/recipes-core/newlib/libgloss_4.3.0.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 index 27b52a43af..5351a9f991 100644 --- a/meta/recipes-core/newlib/newlib.inc +++ b/meta/recipes-core/newlib/newlib.inc @@ -10,24 +10,19 @@ LIC_FILES_CHKSUM = " \ file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \ file://COPYING.LIBGLOSS;md5=c0469b6ebb847a75781066be515f032d \ file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \ - file://COPYING.NEWLIB;md5=8bb75595dbcc7d45e5c0d116d7bdf6ce \ + file://COPYING.NEWLIB;md5=5a9d477b5f4eab20dccf655a77107a6e \ file://newlib/libc/posix/COPYRIGHT;md5=103468ff1982be840fdf4ee9f8b51bbf \ - file://newlib/libc/sys/linux/linuxthreads/LICENSE;md5=73640207fbc79b198c7ffd4ad4d97aa0 \ " -# Newlib maintainers sometimes publish the source -# from a specific snapshot, after an upgrade we can -# delete the following line and keep the empty default -NEWLIB_SNAPSHOT = ".20211231" -NEWLIB_SNAPSHOT ?= "" -SRC_URI = "https://sourceware.org/pub/newlib/newlib-${PV}${NEWLIB_SNAPSHOT}.tar.gz" -SRC_URI[sha256sum] = "c3a0e8b63bc3bef1aeee4ca3906b53b3b86c8d139867607369cb2915ffc54435" - +BASEVER = "4.3.0" +PV = "${BASEVER}+git${SRCPV}" +SRC_URI = "git://sourceware.org/git/newlib-cygwin.git;protocol=https;branch=main" +SRCREV="9e09d6ed83cce4777a5950412647ccc603040409" INHIBIT_DEFAULT_DEPS = "1" DEPENDS = "virtual/${TARGET_PREFIX}gcc" -S = "${WORKDIR}/newlib-${PV}${NEWLIB_SNAPSHOT}" +S = "${WORKDIR}/git" B = "${WORKDIR}/build" ## disable stdlib @@ -52,6 +47,12 @@ EXTRA_OECONF = " \ 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}' } diff --git a/meta/recipes-core/newlib/newlib_4.2.0.bb b/meta/recipes-core/newlib/newlib_4.2.0.bb deleted file mode 100644 index fb922d65d1..0000000000 --- a/meta/recipes-core/newlib/newlib_4.2.0.bb +++ /dev/null @@ -1,20 +0,0 @@ -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 = "" 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 = "" -- cgit v1.2.3-54-g00ecf