about summary refs log tree commit diff
path: root/pkgs/development/misc
diff options
context:
space:
mode:
authorArtturi <Artturin@artturin.com>2023-04-06 19:50:31 +0300
committerGitHub <noreply@github.com>2023-04-06 19:50:31 +0300
commit4d383f2c4f16be2b79ff72fdaecdebc557cd066a (patch)
treedfa0dc8c6a0a9ac0c0789eed02081d90213ee415 /pkgs/development/misc
parentd3f37613e93528fa24b70fe62187da08f8f20869 (diff)
parenteca3d38d188dd9d9ebb60a502ba42a6ca92d550d (diff)
Merge pull request #222401 from Artturin/newlibincr
Diffstat (limited to 'pkgs/development/misc')
-rw-r--r--pkgs/development/misc/newlib/default.nix74
1 files changed, 60 insertions, 14 deletions
diff --git a/pkgs/development/misc/newlib/default.nix b/pkgs/development/misc/newlib/default.nix
index 60ad50a8e4f7a..4ec603f250d52 100644
--- a/pkgs/development/misc/newlib/default.nix
+++ b/pkgs/development/misc/newlib/default.nix
@@ -1,20 +1,32 @@
-{ stdenv, fetchurl, buildPackages
+{ stdenv, fetchurl, buildPackages, lib, fetchpatch, texinfo
 , # "newlib-nano" is what the official ARM embedded toolchain calls this build
   # configuration that prioritizes low space usage. We include it as a preset
   # for embedded projects striving for a similar configuration.
   nanoizeNewlib ? false
 }:
 
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "newlib";
-  version = "4.1.0";
+  version = "4.3.0.20230120";
 
   src = fetchurl {
-    url = "ftp://sourceware.org/pub/newlib/newlib-${version}.tar.gz";
-    sha256 = "0m01sjjyj0ib7bwlcrvmk1qkkgd66zf1dhbw716j490kymrf75pj";
+    url = "ftp://sourceware.org/pub/newlib/newlib-${finalAttrs.version}.tar.gz";
+    sha256 = "sha256-g6Yqma9Z4465sMWO0JLuJNcA//Q6IsA+QzlVET7zUVA=";
   };
 
-  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  patches = lib.optionals nanoizeNewlib [
+    # https://bugs.gentoo.org/723756
+    (fetchpatch {
+      name = "newlib-3.3.0-no-nano-cxx.patch";
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-libs/newlib/files/newlib-3.3.0-no-nano-cxx.patch?id=9ee5a1cd6f8da6d084b93b3dbd2e8022a147cfbf";
+      sha256 = "sha256-S3mf7vwrzSMWZIGE+d61UDH+/SK/ao1hTPee1sElgco=";
+    })
+  ];
+
+  depsBuildBuild = [
+    buildPackages.stdenv.cc
+    texinfo # for makeinfo
+  ];
 
   # newlib expects CC to build for build platform, not host platform
   preConfigure = ''
@@ -22,31 +34,65 @@ stdenv.mkDerivation rec {
   '';
 
   configurePlatforms = [ "build" "target" ];
+  # flags copied from https://community.arm.com/support-forums/f/compilers-and-libraries-forum/53310/gcc-arm-none-eabi-what-were-the-newlib-compilation-options
+  # sort alphabetically
   configureFlags = [
     "--host=${stdenv.buildPlatform.config}"
-
+  ] ++ (if !nanoizeNewlib then [
     "--disable-newlib-supplied-syscalls"
     "--disable-nls"
-    "--enable-newlib-retargetable-locking"
-  ] ++ (if !nanoizeNewlib then [
+    "--enable-newlib-io-c99-formats"
     "--enable-newlib-io-long-long"
+    "--enable-newlib-reent-check-verify"
     "--enable-newlib-register-fini"
+    "--enable-newlib-retargetable-locking"
   ] else [
-    "--enable-newlib-reent-small"
-    "--disable-newlib-fvwrite-in-streamio"
     "--disable-newlib-fseek-optimization"
-    "--disable-newlib-wide-orient"
-    "--enable-newlib-nano-malloc"
+    "--disable-newlib-fvwrite-in-streamio"
+    "--disable-newlib-supplied-syscalls"
     "--disable-newlib-unbuf-stream-opt"
+    "--disable-newlib-wide-orient"
+    "--disable-nls"
     "--enable-lite-exit"
     "--enable-newlib-global-atexit"
     "--enable-newlib-nano-formatted-io"
+    "--enable-newlib-nano-malloc"
+    "--enable-newlib-reent-check-verify"
+    "--enable-newlib-reent-small"
+    "--enable-newlib-retargetable-locking"
   ]);
 
   dontDisableStatic = true;
 
+  # apply necessary nano changes from https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/manifest/copy_nano_libraries.sh?rev=4c50be6ccb9c4205a5262a3925317073&hash=1375A7B0A1CD0DB9B9EB0D2B574ADF66
+  postInstall = lib.optionalString nanoizeNewlib ''
+    mkdir -p $out${finalAttrs.passthru.incdir}/newlib-nano
+    cp $out${finalAttrs.passthru.incdir}/newlib.h $out${finalAttrs.passthru.incdir}/newlib-nano/
+
+    (
+      cd $out${finalAttrs.passthru.libdir}
+
+      for f in librdimon.a libc.a libg.a; do
+        cp "$f" "''${f%%\.a}_nano.a"
+      done
+    )
+  '';
+
   passthru = {
     incdir = "/${stdenv.targetPlatform.config}/include";
     libdir = "/${stdenv.targetPlatform.config}/lib";
   };
-}
+
+  meta = with lib; {
+    description = "a C library intended for use on embedded systems";
+    homepage = "https://sourceware.org/newlib/";
+    # arch has "bsd" while gentoo has "NEWLIB LIBGLOSS GPL-2" while COPYING has "gpl2"
+    # there are 5 copying files in total
+    # COPYING
+    # COPYING.LIB
+    # COPYING.LIBGLOSS
+    # COPYING.NEWLIB
+    # COPYING3
+    license = licenses.gpl2Plus;
+  };
+})