chromium,chromedriver: 129.0.6668.91 -> 129.0.6668.100
[NixPkgs.git] / pkgs / by-name / uc / uclibc-ng / package.nix
blob8869dce9d187e7b8523bf16eef034f67689aa8d6
1 { lib
2 , stdenvNoLibc
3 , buildPackages
4 , fetchurl
5 , gitUpdater
6 , linuxHeaders
7 , libiconvReal
8 , extraConfig ? ""
9 }:
11 let
12   stdenv = stdenvNoLibc;
13   isCross = (stdenv.buildPlatform != stdenv.hostPlatform);
14   configParser = ''
15     function parseconfig {
16         set -x
17         while read LINE; do
18             NAME=`echo "$LINE" | cut -d \  -f 1`
19             OPTION=`echo "$LINE" | cut -d \  -f 2`
21             if test -z "$NAME"; then
22                 continue
23             fi
25             echo "parseconfig: removing $NAME"
26             sed -i /^$NAME=/d .config
28             #if test "$OPTION" != n; then
29                 echo "parseconfig: setting $NAME=$OPTION"
30                 echo "$NAME=$OPTION" >> .config
31             #fi
32         done
33         set +x
34     }
35   '';
37   # UCLIBC_SUSV4_LEGACY defines 'tmpnam', needed for gcc libstdc++ builds.
38   nixConfig = ''
39     RUNTIME_PREFIX "/"
40     DEVEL_PREFIX "/"
41     UCLIBC_HAS_WCHAR y
42     UCLIBC_HAS_FTW y
43     UCLIBC_HAS_RPC y
44     DO_C99_MATH y
45     UCLIBC_HAS_PROGRAM_INVOCATION_NAME y
46     UCLIBC_HAS_RESOLVER_SUPPORT y
47     UCLIBC_SUSV4_LEGACY y
48     UCLIBC_HAS_THREADS_NATIVE y
49     KERNEL_HEADERS "${linuxHeaders}/include"
50   '' + lib.optionalString (stdenv.hostPlatform.gcc.float or "" == "soft") ''
51     UCLIBC_HAS_FPU n
52   '' + lib.optionalString (stdenv.hostPlatform.isAarch32 && isCross) ''
53     CONFIG_ARM_EABI y
54     ARCH_WANTS_BIG_ENDIAN n
55     ARCH_BIG_ENDIAN n
56     ARCH_WANTS_LITTLE_ENDIAN y
57     ARCH_LITTLE_ENDIAN y
58     UCLIBC_HAS_FPU n
59   '';
61 stdenv.mkDerivation (finalAttrs: {
62   pname = "uclibc-ng";
63   version = "1.0.50";
65   src = fetchurl {
66     url = "https://downloads.uclibc-ng.org/releases/${finalAttrs.version}/uClibc-ng-${finalAttrs.version}.tar.xz";
67     hash = "sha256-rthnJR9II6dOpeOjmT06fBIygKvhXjjcIGdww5aPIc8=";
68   };
70   # 'ftw' needed to build acl, a coreutils dependency
71   configurePhase = ''
72     make defconfig
73     ${configParser}
74     cat << EOF | parseconfig
75     ${nixConfig}
76     ${extraConfig}
77     ${stdenv.hostPlatform.uclibc.extraConfig or ""}
78     EOF
79     ( set +o pipefail; yes "" | make oldconfig )
80   '';
82   hardeningDisable = [ "stackprotector" ];
84   # Cross stripping hurts.
85   dontStrip = isCross;
87   depsBuildBuild = [ buildPackages.stdenv.cc ];
89   makeFlags = [
90     "ARCH=${stdenv.hostPlatform.linuxArch}"
91     "TARGET_ARCH=${stdenv.hostPlatform.linuxArch}"
92     "VERBOSE=1"
93   ] ++ lib.optionals (isCross) [
94     "CROSS=${stdenv.cc.targetPrefix}"
95   ];
97   # `make libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelrwlock.h`:
98   # error: bits/sysnum.h: No such file or directory
99   enableParallelBuilding = false;
101   installPhase = ''
102     runHook preInstall
104     mkdir -p $out
105     make $makeFlags PREFIX=$out VERBOSE=1 install
106     (cd $out/include && ln -s $(ls -d ${linuxHeaders}/include/* | grep -v "scsi$") .)
107     # libpthread.so may not exist, so I do || true
108     sed -i s@/lib/@$out/lib/@g $out/lib/libc.so $out/lib/libpthread.so || true
110     runHook postInstall
111   '';
113   passthru = {
114     # Derivations may check for the existance of this attribute, to know what to
115     # link to.
116     libiconv = libiconvReal;
118     updateScript = gitUpdater {
119       url = "https://git.uclibc-ng.org/git/uclibc-ng.git";
120       rev-prefix = "v";
121     };
122   };
124   meta = {
125     homepage = "https://uclibc-ng.org";
126     description = "Embedded C library";
127     longDescription = ''
128       uClibc-ng is a small C library for developing embedded Linux systems. It
129       is much smaller than the GNU C Library, but nearly all applications
130       supported by glibc also work perfectly with uClibc-ng.
132       Porting applications from glibc to uClibc-ng typically involves just
133       recompiling the source code. uClibc-ng supports shared libraries and
134       threading. It currently runs on standard Linux and MMU-less (also known as
135       uClinux) systems with support for Aarch64, Alpha, ARC, ARM, AVR32,
136       Blackfin, CRIS, C-Sky, C6X, FR-V, H8/300, HPPA, i386, IA64, KVX, LM32,
137       M68K/Coldfire, Metag, Microblaze, MIPS, MIPS64, NDS32, NIOS2, OpenRISC,
138       PowerPC, RISCV64, Sparc, Sparc64, SuperH, Tile, X86_64 and XTENSA
139       processors. Alpha, FR-V, HPPA, IA64, LM32, NIOS2, Tile and Sparc64 are
140       experimental and need more testing.
141     '';
142     license = lib.licenses.lgpl2Plus;
143     maintainers = with lib.maintainers; [ rasendubi AndersonTorres ];
144     platforms = lib.platforms.linux;
145     badPlatforms = lib.platforms.aarch64;
146   };