openbsd: init at 7.5

This commit is contained in:
Ali Abrar 2024-05-15 22:41:09 -04:00 committed by John Ericson
parent ad6fa01c06
commit 888dee445d
20 changed files with 491 additions and 7 deletions

View File

@ -93,6 +93,7 @@ let
else if final.isAndroid then "bionic"
else if final.isLinux /* default */ then "glibc"
else if final.isFreeBSD then "fblibc"
else if final.isOpenBSD then "oblibc"
else if final.isNetBSD then "nblibc"
else if final.isAvr then "avrlibc"
else if final.isGhcjs then null

View File

@ -342,6 +342,11 @@ rec {
useLLVM = true;
};
x86_64-openbsd = {
config = "x86_64-unknown-openbsd";
useLLVM = true;
};
#
# WASM
#

View File

@ -469,6 +469,7 @@ rec {
elem (elemAt l 2) [ "wasi" "redox" "mmixware" "ghcjs" "mingw32" ] ||
hasPrefix "freebsd" (elemAt l 2) ||
hasPrefix "netbsd" (elemAt l 2) ||
hasPrefix "openbsd" (elemAt l 2) ||
hasPrefix "genode" (elemAt l 2)
then {
cpu = elemAt l 0;

View File

@ -14,5 +14,5 @@
}
.${stdenv'.hostPlatform.parsed.cpu.name} or stdenv'.hostPlatform.parsed.cpu.name;
install-wrapper = builtins.readFile ./install-wrapper.sh;
install-wrapper = builtins.readFile ../../lib/install-wrapper.sh;
}

View File

@ -17,12 +17,12 @@
# HACK: to ensure parent directories exist. This emulates GNU
# installs -D option. No alternative seems to exist in BSD install.
let
binstall = writeShellScript "binstall" ''
set -eu
for last in "$@"; do true; done
mkdir -p $(dirname $last)
@out@/bin/xinstall "$@"
'';
binstall = writeShellScript "binstall" (
builtins.readFile ../../../lib/install-wrapper.sh
+ ''
@out@/bin/xinstall "''${args[@]}"
''
);
in
mkDerivation {
path = "usr.bin/xinstall";

View File

@ -0,0 +1,49 @@
{
stdenv,
lib,
stdenvNoCC,
makeScopeWithSplicing',
generateSplicesForMkScope,
pkgs,
buildPackages,
netbsd,
}:
makeScopeWithSplicing' {
otherSplices = generateSplicesForMkScope "openbsd";
f = (
self:
lib.packagesFromDirectoryRecursive {
callPackage = self.callPackage;
directory = ./pkgs;
}
// {
libc = self.callPackage ./pkgs/libc/package.nix {
inherit (self) csu include lorder;
inherit (buildPackages.openbsd) makeMinimal;
inherit (buildPackages.netbsd)
install
gencat
rpcgen
tsort
;
};
makeMinimal = buildPackages.netbsd.makeMinimal.override { inherit (self) make-rules; };
mkDerivation = self.callPackage ./pkgs/mkDerivation.nix {
inherit stdenv;
inherit (buildPackages.netbsd) install;
};
include = self.callPackage ./pkgs/include/package.nix {
inherit (buildPackages.openbsd) makeMinimal;
inherit (buildPackages.netbsd) install rpcgen mtree;
};
csu = self.callPackage ./pkgs/csu.nix {
inherit (self) include;
inherit (buildPackages.openbsd) makeMinimal;
inherit (buildPackages.netbsd) install;
};
make-rules = self.callPackage ./pkgs/make-rules/package.nix { };
lorder = self.callPackage ./pkgs/lorder.nix { inherit (buildPackages.netbsd) install; };
}
);
}

View File

@ -0,0 +1,22 @@
{
lib,
mkDerivation,
bsdSetupHook,
openbsdSetupHook,
makeMinimal,
install,
include,
}:
mkDerivation {
path = "lib/csu";
nativeBuildInputs = [
bsdSetupHook
openbsdSetupHook
makeMinimal
install
];
buildInputs = [ include ];
meta.platforms = lib.platforms.openbsd;
extraPaths = [ "libexec/ld.so" ];
}

View File

@ -0,0 +1,57 @@
{
lib,
mkDerivation,
makeMinimal,
bsdSetupHook,
openbsdSetupHook,
install,
rpcgen,
mtree,
pax,
buildPackages,
}:
mkDerivation {
path = "include";
noCC = true;
extraPaths = [
"lib"
#"sys"
"sys/arch"
# LDIRS from the mmakefile
"sys/crypto"
"sys/ddb"
"sys/dev"
"sys/isofs"
"sys/miscfs"
"sys/msdosfs"
"sys/net"
"sys/netinet"
"sys/netinet6"
"sys/netmpls"
"sys/net80211"
"sys/nfs"
"sys/ntfs"
"sys/scsi"
"sys/sys"
"sys/ufs"
"sys/uvm"
];
nativeBuildInputs = [
bsdSetupHook
install
makeMinimal
mtree
openbsdSetupHook
pax
rpcgen
];
makeFlags = [
"RPCGEN_CPP=${buildPackages.stdenv.cc.cc}/bin/cpp"
"-B"
];
headersOnly = true;
}

View File

@ -0,0 +1,12 @@
diff --git a/lib/libc/Makefile b/lib/libc/Makefile
index 4bb4b67fcbb..1c8a8e08e60 100644
--- a/lib/libc/Makefile
+++ b/lib/libc/Makefile
@@ -6,7 +6,6 @@
.include <bsd.own.mk>
LIB=c
-LIBREBUILD=y
CLEANFILES+=tags Symbols.map
CFLAGS+=-Wimplicit
#CFLAGS+=-Werror

View File

@ -0,0 +1,16 @@
NetBSD's make uses `${variable:tl}` not `${variable:L}`.
diff --git a/lib/libc/Makefile b/lib/libc/Makefile
index 4bb4b67fcbb..ffb35c196ea 100644
--- a/lib/libc/Makefile
+++ b/lib/libc/Makefile
@@ -11,8 +11,8 @@ CLEANFILES+=tags Symbols.map
CFLAGS+=-Wimplicit
#CFLAGS+=-Werror
LDADD=-nostdlib
-.if ${COMPILER_VERSION:L} == "clang"
+.if ${COMPILER_VERSION:tl} == "clang"
LDADD+=-lcompiler_rt
.else
LDADD+=-lgcc
.endif

View File

@ -0,0 +1,120 @@
{
lib,
stdenv,
mkDerivation,
bsdSetupHook,
openbsdSetupHook,
makeMinimal,
install,
flex,
byacc,
gencat,
rpcgen,
lorder,
csu,
include,
ctags,
tsort,
llvmPackages,
fetchpatch,
}:
mkDerivation rec {
pname = "libc";
path = "lib/libc";
extraPaths = [
"lib/csu/os-note-elf.h"
"sys/arch"
"lib/libm"
"lib/libpthread"
"lib/librpcsvc"
"lib/librpcsvc"
"lib/librthread"
"lib/libutil"
];
patches = [
./netbsd-make-to-lower.patch
./disable-librebuild.patch
(fetchpatch {
url = "https://marc.info/?l=openbsd-tech&m=171575286706032&q=raw";
sha256 = "sha256-2fqabJZLUvXUIWe5WZ4NrTOwgQCXqH49Wo0hAPu5lu0=";
})
];
nativeBuildInputs = [
bsdSetupHook
openbsdSetupHook
makeMinimal
install
flex
byacc
gencat
rpcgen
ctags
lorder
tsort
];
buildInputs = [
include
csu
];
env.NIX_CFLAGS_COMPILE = builtins.toString [
"-B${csu}/lib"
"-Wno-error"
];
# Suppress lld >= 16 undefined version errors
# https://github.com/freebsd/freebsd-src/commit/2ba84b4bcdd6012e8cfbf8a0d060a4438623a638
env.NIX_LDFLAGS = lib.optionalString (stdenv.hostPlatform.linker == "lld") "--undefined-version";
makeFlags = [
"STRIP=-s" # flag to install, not command
"COMPILER_VERSION=clang"
"LIBC_TAGS=no"
];
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/\{} \;
popd
substituteInPlace $out/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/\{} \;
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
'';
}

View File

@ -0,0 +1,20 @@
{
lib,
mkDerivation,
bsdSetupHook,
openbsdSetupHook,
makeMinimal,
install,
}:
mkDerivation {
path = "usr.bin/lorder";
nativeBuildInputs = [
bsdSetupHook
openbsdSetupHook
makeMinimal
install
];
meta.platforms = lib.platforms.unix;
}

View File

@ -0,0 +1,15 @@
NetBSD make prefers `.-include` to `sinclude` (without a dot)
diff --git a/share/mk/bsd.dep.mk b/share/mk/bsd.dep.mk
index 7019adb57f7..277064eb5c2 100644
--- a/share/mk/bsd.dep.mk
+++ b/share/mk/bsd.dep.mk
@@ -11,7 +11,7 @@ depend:
# catch22: don't include potentially bogus files we are going to clean
. if !(make(clean) || make(cleandir) || make(obj))
. for o in ${DEPS}
- sinclude $o
+. -include "$o"
. endfor
. endif
.endif

View File

@ -0,0 +1,36 @@
{
fetchpatch,
lib,
mkDerivation,
stdenv,
}:
mkDerivation {
path = "share/mk";
noCC = true;
buildInputs = [ ];
nativeBuildInputs = [ ];
dontBuild = true;
patches = [
(fetchpatch {
url = "https://marc.info/?l=openbsd-tech&m=171575284906018&q=raw";
sha256 = "sha256-bigxJGbaf9mCmFXxLVzQpnUUaEMMDfF3eZkTXVzd6B8=";
})
./netbsd-make-sinclude.patch
];
postPatch = ''
sed -i -E \
-e 's|/usr/lib|\$\{LIBDIR\}|' \
share/mk/bsd.prog.mk
'';
installPhase = ''
cp -r share/mk $out
'';
meta.platforms = lib.platforms.unix;
}

View File

@ -0,0 +1,91 @@
{
lib,
stdenv,
stdenvNoCC,
runCommand,
rsync,
source,
bsdSetupHook,
openbsdSetupHook,
makeMinimal,
install,
}:
lib.makeOverridable (
attrs:
let
stdenv' = if attrs.noCC or false then stdenvNoCC else stdenv;
in
stdenv'.mkDerivation (
rec {
pname = "${attrs.pname or (baseNameOf attrs.path)}-openbsd";
version = "0";
src = runCommand "${pname}-filtered-src" { nativeBuildInputs = [ rsync ]; } ''
for p in ${lib.concatStringsSep " " ([ attrs.path ] ++ attrs.extraPaths or [ ])}; do
set -x
path="$out/$p"
mkdir -p "$(dirname "$path")"
src_path="${source}/$p"
if [[ -d "$src_path" ]]; then src_path+=/; fi
rsync --chmod="+w" -r "$src_path" "$path"
set +x
done
'';
extraPaths = [ ];
nativeBuildInputs = [
bsdSetupHook
openbsdSetupHook
makeMinimal
install
];
HOST_SH = stdenv'.shell;
# Since STRIP below is the flag
STRIPBIN = "${stdenv.cc.bintools.targetPrefix}strip";
makeFlags = [
"STRIP=-s" # flag to install, not command
"-B"
];
MACHINE_ARCH =
{
# amd64 not x86_64 for this on unlike NetBSD
x86_64 = "amd64";
aarch64 = "arm64";
i486 = "i386";
i586 = "i386";
i686 = "i386";
}
.${stdenv'.hostPlatform.parsed.cpu.name} or stdenv'.hostPlatform.parsed.cpu.name;
MACHINE = MACHINE_ARCH;
MACHINE_CPU = MACHINE_ARCH;
MACHINE_CPUARCH = MACHINE_ARCH;
COMPONENT_PATH = attrs.path or null;
strictDeps = true;
meta = with lib; {
maintainers = with maintainers; [ ericson2314 ];
platforms = platforms.openbsd;
license = licenses.bsd2;
};
}
// lib.optionalAttrs stdenv'.hasCC {
# TODO should CC wrapper set this?
CPP = "${stdenv'.cc.targetPrefix}cpp";
}
// lib.optionalAttrs (attrs.headersOnly or false) {
installPhase = "includesPhase";
dontBuild = true;
}
// attrs
)
)

View File

@ -0,0 +1,3 @@
{ makeSetupHook }:
makeSetupHook { name = "openbsd-setup-hook"; } ./setup-hook.sh

View File

@ -0,0 +1,21 @@
addOpenBSDMakeFlags() {
makeFlags="INCSDIR=${!outputDev}/include $makeFlags"
makeFlags="MANDIR=${!outputMan}/share/man $makeFlags"
}
fixOpenBSDInstallDirs() {
find "$BSDSRCDIR" -name Makefile -exec \
sed -i -E \
-e 's|/usr/include|${INCSDIR}|' \
-e 's|/usr/bin|${BINDIR}|' \
-e 's|/usr/lib|${LIBDIR}|' \
{} \;
}
setBinownBingrp() {
export BINOWN=$(id -u)
export BINGRP=$(id -g)
}
preConfigureHooks+=(addOpenBSDMakeFlags)
postPatchHooks+=(fixOpenBSDInstallDirs setBinownBingrp)

View File

@ -0,0 +1,8 @@
{ fetchcvs }:
fetchcvs {
cvsRoot = "anoncvs@anoncvs.fr.openbsd.org/cvs";
module = "src";
tag = "OPENBSD_7_5";
sha256 = "sha256-hzdATew6h/FQV72SWtg3YvUXdPoGjm2SoUS7m3c3fSU=";
}

View File

@ -16284,6 +16284,7 @@ with pkgs;
choose = platform:
/**/ if platform.isDarwin then 16
else if platform.isFreeBSD then 16
else if platform.isOpenBSD then 18
else if platform.isAndroid then 12
else if platform.isLinux then 17
else if platform.isWasm then 16
@ -21019,6 +21020,7 @@ with pkgs;
then targetPackages.darwin.iosSdkPkgs.libraries or darwin.iosSdkPkgs.libraries
else targetPackages.darwin.LibsystemCross or (throw "don't yet have a `targetPackages.darwin.LibsystemCross for ${stdenv.targetPlatform.config}`")
else if name == "fblibc" then targetPackages.freebsdCross.libc or freebsdCross.libc
else if name == "oblibc" then targetPackages.openbsdCross.libc or openbsdCross.libc
else if name == "nblibc" then targetPackages.netbsdCross.libc or netbsdCross.libc
else if name == "wasilibc" then targetPackages.wasilibc or wasilibc
else if name == "relibc" then targetPackages.relibc or relibc
@ -40744,6 +40746,11 @@ with pkgs;
stdenv = crossLibcStdenv;
};
openbsd = callPackage ../os-specific/bsd/openbsd { };
openbsdCross = callPackage ../os-specific/bsd/openbsd {
stdenv = crossLibcStdenv;
};
yrd = callPackage ../tools/networking/yrd { };
powershell = callPackage ../shells/powershell { };