From b98dc9f0efff5667debcf1f7d1b655268c27b8db Mon Sep 17 00:00:00 2001 From: John Ericson Date: Thu, 20 Jun 2024 15:05:27 -0400 Subject: [PATCH 1/3] bsdSetupHook: Do not define empty `DESTDIR` This breaks OpenBSD, and isn't actually needed for the others after all. --- pkgs/os-specific/bsd/setup-hook.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/pkgs/os-specific/bsd/setup-hook.sh b/pkgs/os-specific/bsd/setup-hook.sh index f9453708ab5d..bc8d372ca8b8 100644 --- a/pkgs/os-specific/bsd/setup-hook.sh +++ b/pkgs/os-specific/bsd/setup-hook.sh @@ -28,7 +28,6 @@ addMakeFlags() { # Definitions passed to share/mk/*.mk. Should be pretty simple - # eventually maybe move it to a configure script. - export DESTDIR= export USETOOLS=never export NOCLANGERROR=yes export NOGCCERROR=yes From 716d8a752a886019f32b6783b54666a55656ffda Mon Sep 17 00:00:00 2001 From: John Ericson Date: Thu, 20 Jun 2024 15:26:55 -0400 Subject: [PATCH 2/3] openbsd: Remove `STRIP` hack This is just a FreeBSD thing, not OpenBSD or NetBSD thing. --- pkgs/os-specific/bsd/openbsd/pkgs/libc/package.nix | 1 - pkgs/os-specific/bsd/openbsd/pkgs/mkDerivation.nix | 4 ---- 2 files changed, 5 deletions(-) diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/libc/package.nix b/pkgs/os-specific/bsd/openbsd/pkgs/libc/package.nix index 1a6b6d06a193..5ad6bb2edaa6 100644 --- a/pkgs/os-specific/bsd/openbsd/pkgs/libc/package.nix +++ b/pkgs/os-specific/bsd/openbsd/pkgs/libc/package.nix @@ -73,7 +73,6 @@ mkDerivation { ) "--undefined-version"; makeFlags = [ - "STRIP=-s" # flag to install, not command "COMPILER_VERSION=clang" "LIBC_TAGS=no" ]; diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/mkDerivation.nix b/pkgs/os-specific/bsd/openbsd/pkgs/mkDerivation.nix index 371c6c58b91f..252854c2d93a 100644 --- a/pkgs/os-specific/bsd/openbsd/pkgs/mkDerivation.nix +++ b/pkgs/os-specific/bsd/openbsd/pkgs/mkDerivation.nix @@ -51,7 +51,6 @@ lib.makeOverridable ( HOST_SH = stdenv'.shell; makeFlags = [ - "STRIP=-s" # flag to install, not command "-B" ]; @@ -85,9 +84,6 @@ lib.makeOverridable ( // lib.optionalAttrs stdenv'.hasCC { # TODO should CC wrapper set this? CPP = "${stdenv'.cc.targetPrefix}cpp"; - - # Since STRIP in `makeFlags` has to be a flag, not the binary itself - STRIPBIN = "${stdenv'.cc.bintools.targetPrefix}strip"; } // lib.optionalAttrs (attrs.headersOnly or false) { installPhase = "includesPhase"; From 56c2439a45ba7784676c6ec6ac01d6c6bda5a574 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Thu, 20 Jun 2024 13:44:46 -0400 Subject: [PATCH 3/3] openbsd.libc: Create from constituent pkgs not hack 9d4e3b597fded2aee92cb7a7b2195072f812a6d3 but for OpenBSD instead of NetBSD. --- pkgs/os-specific/bsd/netbsd/default.nix | 2 + .../bsd/netbsd/pkgs/libpthread/package.nix | 1 - pkgs/os-specific/bsd/netbsd/pkgs/libutil.nix | 1 - pkgs/os-specific/bsd/openbsd/default.nix | 71 +++++++++++++++---- pkgs/os-specific/bsd/openbsd/pkgs/libc.nix | 47 ++++++++++++ .../disable-librebuild.patch | 0 .../netbsd-make-to-lower.patch | 0 .../pkgs/{libc => libcMinimal}/package.nix | 60 ++++------------ pkgs/os-specific/bsd/openbsd/pkgs/libm.nix | 16 +++++ .../bsd/openbsd/pkgs/librpcsvc.nix | 38 ++++++++++ .../bsd/openbsd/pkgs/librthread.nix | 29 ++++++++ pkgs/os-specific/bsd/openbsd/pkgs/libutil.nix | 40 +++++++++++ .../bsd/openbsd/pkgs/mkDerivation.nix | 11 +-- .../pkgs/openbsdSetupHook/setup-hook.sh | 13 ++++ pkgs/os-specific/bsd/openbsd/pkgs/source.nix | 8 ++- 15 files changed, 268 insertions(+), 69 deletions(-) create mode 100644 pkgs/os-specific/bsd/openbsd/pkgs/libc.nix rename pkgs/os-specific/bsd/openbsd/pkgs/{libc => libcMinimal}/disable-librebuild.patch (100%) rename pkgs/os-specific/bsd/openbsd/pkgs/{libc => libcMinimal}/netbsd-make-to-lower.patch (100%) rename pkgs/os-specific/bsd/openbsd/pkgs/{libc => libcMinimal}/package.nix (51%) create mode 100644 pkgs/os-specific/bsd/openbsd/pkgs/libm.nix create mode 100644 pkgs/os-specific/bsd/openbsd/pkgs/librpcsvc.nix create mode 100644 pkgs/os-specific/bsd/openbsd/pkgs/librthread.nix create mode 100644 pkgs/os-specific/bsd/openbsd/pkgs/libutil.nix diff --git a/pkgs/os-specific/bsd/netbsd/default.nix b/pkgs/os-specific/bsd/netbsd/default.nix index 3c9f83ab48d0..e288e6d21686 100644 --- a/pkgs/os-specific/bsd/netbsd/default.nix +++ b/pkgs/os-specific/bsd/netbsd/default.nix @@ -40,8 +40,10 @@ makeScopeWithSplicing' { stdenvLibcMinimal = crossLibcStdenv.override (old: { cc = old.cc.override { libc = self.libcMinimal; + noLibc = false; bintools = old.cc.bintools.override { libc = self.libcMinimal; + noLibc = false; sharedLibraryLoader = null; }; }; diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/package.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/package.nix index 8e0ef5fd1b74..ad9c9dd2292d 100644 --- a/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/package.nix +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/package.nix @@ -2,7 +2,6 @@ lib, stdenvLibcMinimal, mkDerivation, - headers, libcMinimal, librt, }: diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libutil.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libutil.nix index c217f6a7ce46..9ebbaa974c57 100644 --- a/pkgs/os-specific/bsd/netbsd/pkgs/libutil.nix +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libutil.nix @@ -11,7 +11,6 @@ lorder, mandoc, statHook, - headers, }: mkDerivation { diff --git a/pkgs/os-specific/bsd/openbsd/default.nix b/pkgs/os-specific/bsd/openbsd/default.nix index bfc88f097865..4db2df57bc26 100644 --- a/pkgs/os-specific/bsd/openbsd/default.nix +++ b/pkgs/os-specific/bsd/openbsd/default.nix @@ -1,5 +1,7 @@ { lib, + crossLibcStdenv, + stdenvNoCC, makeScopeWithSplicing', generateSplicesForMkScope, buildPackages, @@ -19,32 +21,71 @@ makeScopeWithSplicing' { directory = ./pkgs; } // { - libc = self.callPackage ./pkgs/libc/package.nix { - inherit (self) csu include; - inherit (buildOpenbsd) makeMinimal; - inherit (buildPackages.netbsd) - install - gencat - rpcgen - tsort - ; - }; + version = "7.5"; + + stdenvLibcMinimal = crossLibcStdenv.override (old: { + cc = old.cc.override { + libc = self.libcMinimal; + noLibc = false; + bintools = old.cc.bintools.override { + libc = self.libcMinimal; + noLibc = false; + sharedLibraryLoader = null; + }; + }; + }); + makeMinimal = buildPackages.netbsd.makeMinimal.override { inherit (self) make-rules; }; - mkDerivation = self.callPackage ./pkgs/mkDerivation.nix { - inherit (buildPackages.netbsd) install; - inherit (buildPackages.buildPackages) rsync; - }; + + # The manual callPackages below should in principle be unnecessary, but are + # necessary. See note in ../netbsd/default.nix + include = self.callPackage ./pkgs/include/package.nix { inherit (buildOpenbsd) makeMinimal; inherit (buildPackages.netbsd) install rpcgen mtree; }; + csu = self.callPackage ./pkgs/csu.nix { inherit (self) include; inherit (buildOpenbsd) makeMinimal; inherit (buildPackages.netbsd) install; }; - make-rules = self.callPackage ./pkgs/make-rules/package.nix { }; + + libcMinimal = self.callPackage ./pkgs/libcMinimal/package.nix { + inherit (self) csu include; + inherit (buildOpenbsd) makeMinimal; + inherit (buildPackages.netbsd) + install + gencat + tsort + rpcgen + ; + }; + + librpcsvc = self.callPackage ./pkgs/librpcsvc.nix { + inherit (buildOpenbsd) openbsdSetupHook makeMinimal lorder; + inherit (buildPackages.netbsd) + install + tsort + statHook + rpcgen + ; + }; + + libutil = self.callPackage ./pkgs/libutil.nix { + inherit (self) libcMinimal; + inherit (buildOpenbsd) openbsdSetupHook makeMinimal lorder; + inherit (buildPackages.netbsd) install tsort statHook; + }; + lorder = self.callPackage ./pkgs/lorder.nix { inherit (buildPackages.netbsd) install; }; + + make-rules = self.callPackage ./pkgs/make-rules/package.nix { }; + + mkDerivation = self.callPackage ./pkgs/mkDerivation.nix { + inherit (buildPackages.netbsd) install tsort; + inherit (buildPackages.buildPackages) rsync; + }; } ); } diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/libc.nix b/pkgs/os-specific/bsd/openbsd/pkgs/libc.nix new file mode 100644 index 000000000000..895b82ed5307 --- /dev/null +++ b/pkgs/os-specific/bsd/openbsd/pkgs/libc.nix @@ -0,0 +1,47 @@ +{ + lib, + symlinkJoin, + libcMinimal, + librthread, + libm, + librpcsvc, + libutil, + version, +}: + +symlinkJoin rec { + name = "${pname}-${version}"; + pname = "libc-openbsd"; + inherit version; + + outputs = [ + "out" + "dev" + "man" + ]; + + paths = + lib.concatMap + (p: [ + (lib.getDev p) + (lib.getLib p) + (lib.getMan p) + ]) + [ + libcMinimal + libm + librthread + librpcsvc + libutil + ]; + + postBuild = '' + rm -r "$out/nix-support" + mkdir -p "$man/share/man" + mv "$out/share"/man* "$man/share/man" + rmdir "$out/share" + fixupPhase + ''; + + meta.platforms = lib.platforms.openbsd; +} diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/libc/disable-librebuild.patch b/pkgs/os-specific/bsd/openbsd/pkgs/libcMinimal/disable-librebuild.patch similarity index 100% rename from pkgs/os-specific/bsd/openbsd/pkgs/libc/disable-librebuild.patch rename to pkgs/os-specific/bsd/openbsd/pkgs/libcMinimal/disable-librebuild.patch diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/libc/netbsd-make-to-lower.patch b/pkgs/os-specific/bsd/openbsd/pkgs/libcMinimal/netbsd-make-to-lower.patch similarity index 100% rename from pkgs/os-specific/bsd/openbsd/pkgs/libc/netbsd-make-to-lower.patch rename to pkgs/os-specific/bsd/openbsd/pkgs/libcMinimal/netbsd-make-to-lower.patch diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/libc/package.nix b/pkgs/os-specific/bsd/openbsd/pkgs/libcMinimal/package.nix similarity index 51% rename from pkgs/os-specific/bsd/openbsd/pkgs/libc/package.nix rename to pkgs/os-specific/bsd/openbsd/pkgs/libcMinimal/package.nix index 5ad6bb2edaa6..d8d6cc398e0d 100644 --- a/pkgs/os-specific/bsd/openbsd/pkgs/libc/package.nix +++ b/pkgs/os-specific/bsd/openbsd/pkgs/libcMinimal/package.nix @@ -20,18 +20,16 @@ mkDerivation { noLibc = true; - pname = "libc"; path = "lib/libc"; + pname = "libcMinimal-openbsd"; + outputs = [ + "out" + "dev" + "man" + ]; extraPaths = [ "lib/csu/os-note-elf.h" "sys/arch" - - "lib/libm" - "lib/libpthread" - "lib/librpcsvc" - "lib/librpcsvc" - "lib/librthread" - "lib/libutil" ]; patches = [ @@ -48,12 +46,8 @@ mkDerivation { openbsdSetupHook makeMinimal install - flex - byacc - gencat - rpcgen - ctags tsort + gencat ]; buildInputs = [ @@ -78,43 +72,17 @@ mkDerivation { ]; postInstall = '' - symlink_so () { - pushd $out/lib - ln -s "lib$1".so.* "lib$1.so" - popd - } - - symlink_so c - pushd ${include} - find . -type d -exec mkdir -p $out/\{} \; - find . \( -type f -o -type l \) -exec cp -pr \{} $out/\{} \; + find include -type d -exec mkdir -p "$dev/{}" ';' + find include '(' -type f -o -type l ')' -exec cp -pr "{}" "$dev/{}" ';' popd - substituteInPlace $out/include/sys/time.h --replace "defined (_LIBC)" "true" + substituteInPlace "$dev/include/sys/time.h" --replace "defined (_LIBC)" "true" pushd ${csu} - find . -type d -exec mkdir -p $out/\{} \; - find . \( -type f -o -type l \) -exec cp -pr \{} $out/\{} \; + find lib -type d -exec mkdir -p "$out/{}" ';' + find lib '(' -type f -o -type l ')' -exec cp -pr "{}" "$out/{}" ';' popd - - NIX_CFLAGS_COMPILE+=" -B$out/lib" - NIX_CFLAGS_COMPILE+=" -I$out/include" - NIX_LDFLAGS+=" -L$out/lib" - - make -C $BSDSRCDIR/lib/libm $makeFlags - make -C $BSDSRCDIR/lib/libm $makeFlags install - symlink_so m - - make -C $BSDSRCDIR/lib/librthread $makeFlags - make -C $BSDSRCDIR/lib/librthread $makeFlags install - symlink_so pthread - - make -C $BSDSRCDIR/lib/librpcsvc $makeFlags - make -C $BSDSRCDIR/lib/librpcsvc $makeFlags install - symlink_so rpcsv - - make -C $BSDSRCDIR/lib/libutil $makeFlags - make -C $BSDSRCDIR/lib/libutil $makeFlags install - symlink_so util ''; + + meta.platforms = lib.platforms.openbsd; } diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/libm.nix b/pkgs/os-specific/bsd/openbsd/pkgs/libm.nix new file mode 100644 index 000000000000..bf7e933a092b --- /dev/null +++ b/pkgs/os-specific/bsd/openbsd/pkgs/libm.nix @@ -0,0 +1,16 @@ +{ lib, mkDerivation }: + +mkDerivation { + path = "lib/libm"; + + libcMinimal = true; + + outputs = [ + "out" + "man" + ]; + + extraPaths = [ "sys" ]; + + meta.platforms = lib.platforms.openbsd; +} diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/librpcsvc.nix b/pkgs/os-specific/bsd/openbsd/pkgs/librpcsvc.nix new file mode 100644 index 000000000000..77783a041894 --- /dev/null +++ b/pkgs/os-specific/bsd/openbsd/pkgs/librpcsvc.nix @@ -0,0 +1,38 @@ +{ + lib, + mkDerivation, + bsdSetupHook, + openbsdSetupHook, + makeMinimal, + install, + tsort, + lorder, + rpcgen, + statHook, +}: + +mkDerivation { + path = "lib/librpcsvc"; + + libcMinimal = true; + + outputs = [ + "out" + "dev" + ]; + + nativeBuildInputs = [ + bsdSetupHook + openbsdSetupHook + makeMinimal + install + tsort + lorder + rpcgen + statHook + ]; + + makeFlags = [ "INCSDIR=$(dev)/include/rpcsvc" ]; + + meta.platforms = lib.platforms.openbsd; +} diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/librthread.nix b/pkgs/os-specific/bsd/openbsd/pkgs/librthread.nix new file mode 100644 index 000000000000..1d42d55290c3 --- /dev/null +++ b/pkgs/os-specific/bsd/openbsd/pkgs/librthread.nix @@ -0,0 +1,29 @@ +{ + lib, + stdenvLibcMinimal, + mkDerivation, + libcMinimal, +}: + +mkDerivation { + path = "lib/librthread"; + + libcMinimal = true; + + outputs = [ + "out" + "dev" + ]; + + makeFlags = [ "LIBCSRCDIR=../libc" ]; + + env.NIX_CFLAGS_COMPILE = "-Wno-error"; + + extraPaths = [ + "lib/libpthread" + libcMinimal.path + #"sys" + ]; + + meta.platforms = lib.platforms.openbsd; +} diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/libutil.nix b/pkgs/os-specific/bsd/openbsd/pkgs/libutil.nix new file mode 100644 index 000000000000..627fabe8cf2a --- /dev/null +++ b/pkgs/os-specific/bsd/openbsd/pkgs/libutil.nix @@ -0,0 +1,40 @@ +{ + lib, + stdenvLibcMinimal, + mkDerivation, + libcMinimal, + bsdSetupHook, + openbsdSetupHook, + makeMinimal, + byacc, + install, + tsort, + lorder, + mandoc, + statHook, +}: + +mkDerivation { + path = "lib/libutil"; + + libcMinimal = true; + + outputs = [ + "out" + "man" + ]; + + nativeBuildInputs = [ + bsdSetupHook + openbsdSetupHook + makeMinimal + byacc + install + tsort + lorder + mandoc + statHook + ]; + + meta.platforms = lib.platforms.openbsd; +} diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/mkDerivation.nix b/pkgs/os-specific/bsd/openbsd/pkgs/mkDerivation.nix index 252854c2d93a..a238a326f46d 100644 --- a/pkgs/os-specific/bsd/openbsd/pkgs/mkDerivation.nix +++ b/pkgs/os-specific/bsd/openbsd/pkgs/mkDerivation.nix @@ -3,6 +3,7 @@ stdenv, stdenvNoCC, crossLibcStdenv, + stdenvLibcMinimal, runCommand, rsync, source, @@ -10,6 +11,8 @@ openbsdSetupHook, makeMinimal, install, + tsort, + lorder, }: lib.makeOverridable ( @@ -20,6 +23,8 @@ lib.makeOverridable ( stdenvNoCC else if attrs.noLibc or false then crossLibcStdenv + else if attrs.libcMinimal or false then + stdenvLibcMinimal else stdenv; in @@ -46,14 +51,12 @@ lib.makeOverridable ( openbsdSetupHook makeMinimal install + tsort + lorder ]; HOST_SH = stdenv'.shell; - makeFlags = [ - "-B" - ]; - MACHINE_ARCH = { # amd64 not x86_64 for this on unlike NetBSD diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/openbsdSetupHook/setup-hook.sh b/pkgs/os-specific/bsd/openbsd/pkgs/openbsdSetupHook/setup-hook.sh index 50e79bc2928a..c0fee276fea3 100644 --- a/pkgs/os-specific/bsd/openbsd/pkgs/openbsdSetupHook/setup-hook.sh +++ b/pkgs/os-specific/bsd/openbsd/pkgs/openbsdSetupHook/setup-hook.sh @@ -17,5 +17,18 @@ setBinownBingrp() { export BINGRP=$(id -g) } +makeOpenBSDUnversionedLinks() { + [[ -d "$out/lib" ]] || return 0 + pushd "$out/lib" + local l + for l in lib*.so.*; do + l="${l//.so.*/}" + [[ ! -f "$l.so" ]] || continue + ln -s "$l".so.* "$l.so" + done + popd +} + preConfigureHooks+=(addOpenBSDMakeFlags) postPatchHooks+=(fixOpenBSDInstallDirs setBinownBingrp) +preFixupHooks+=(makeOpenBSDUnversionedLinks) diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/source.nix b/pkgs/os-specific/bsd/openbsd/pkgs/source.nix index 359c3f2fbc91..a92dfbd2b221 100644 --- a/pkgs/os-specific/bsd/openbsd/pkgs/source.nix +++ b/pkgs/os-specific/bsd/openbsd/pkgs/source.nix @@ -1,8 +1,12 @@ -{ fetchcvs }: +{ + lib, + fetchcvs, + version, +}: fetchcvs { cvsRoot = "anoncvs@anoncvs.fr.openbsd.org/cvs"; module = "src"; - tag = "OPENBSD_7_5"; + tag = "OPENBSD_${lib.replaceStrings [ "." ] [ "_" ] version}-RELEASE"; sha256 = "sha256-hzdATew6h/FQV72SWtg3YvUXdPoGjm2SoUS7m3c3fSU="; }