*bsdCross: Remove these package sets

I realized what rhelmot did in 61202561d9
(specify what packages just need `stdenvNoLibc`) is definitely the right
approach for this, and adjusted NetBSD and OpenBSD to likewise use it.
With that change, we don't need these confusing and ugly `*bsdCross`
package sets at all!

We can get rid of a lot more libc-related `*Cross`, and I will do so
soon, but this is the first step.

(adapted from commit 51f1ecaa59)
This commit is contained in:
John Ericson 2024-06-18 12:38:21 -04:00
parent 9abf384c54
commit 744d7e7477
20 changed files with 104 additions and 102 deletions

View File

@ -3,7 +3,6 @@
makeScopeWithSplicing',
generateSplicesForMkScope,
callPackage,
crossLibcStdenv,
attributePathToSplice ? [ "freebsd" ],
branch ? "release/14.0.0",
}:
@ -24,41 +23,30 @@ let
Branches can be selected by overriding the `branch` attribute on the freebsd package set.
'';
# `./package-set.nix` should never know the name of the package set we
# are constructing; just this function is allowed to know that. This
# is why we:
#
# - do the splicing for cross compilation here
#
# - construct the *anonymized* `buildFreebsd` attribute to be passed
# to `./package-set.nix`.
callFreeBSDWithAttrs =
extraArgs:
let
# we do not include the branch in the splice here because the branch
# parameter to this file will only ever take on one value - more values
# are provided through overrides.
otherSplices = generateSplicesForMkScope attributePathToSplice;
in
makeScopeWithSplicing' {
inherit otherSplices;
f =
self:
{
inherit branch;
}
// callPackage ./package-set.nix (
{
sourceData = versions.${self.branch} or (throw (badBranchError self.branch));
versionData = self.sourceData.version;
buildFreebsd = otherSplices.selfBuildHost;
patchesRoot = ./patches + "/${self.versionData.revision}";
}
// extraArgs
) self;
};
# we do not include the branch in the splice here because the branch
# parameter to this file will only ever take on one value - more values
# are provided through overrides.
otherSplices = generateSplicesForMkScope attributePathToSplice;
in
{
freebsd = callFreeBSDWithAttrs { };
freebsdCross = callFreeBSDWithAttrs { stdenv = crossLibcStdenv; };
# `./package-set.nix` should never know the name of the package set we
# are constructing; just this function is allowed to know that. This
# is why we:
#
# - do the splicing for cross compilation here
#
# - construct the *anonymized* `buildFreebsd` attribute to be passed
# to `./package-set.nix`.
makeScopeWithSplicing' {
inherit otherSplices;
f =
self:
{
inherit branch;
}
// callPackage ./package-set.nix ({
sourceData = versions.${self.branch} or (throw (badBranchError self.branch));
versionData = self.sourceData.version;
buildFreebsd = otherSplices.selfBuildHost;
patchesRoot = ./patches + "/${self.versionData.revision}";
}) self;
}

View File

@ -58,12 +58,9 @@ lib.makeOverridable (
HOST_SH = stdenv'.shell;
# Since STRIP below is the flag
STRIPBIN = "${stdenv.cc.bintools.targetPrefix}strip";
makeFlags = [
"STRIP=-s" # flag to install, not command
] ++ lib.optional (!stdenv.hostPlatform.isFreeBSD) "MK_WERROR=no";
] ++ lib.optional (!stdenv'.hostPlatform.isFreeBSD) "MK_WERROR=no";
# amd64 not x86_64 for this on unlike NetBSD
MACHINE_ARCH = freebsd-lib.mkBsdArch stdenv';
@ -91,6 +88,9 @@ 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 stdenv'.isDarwin { MKRELRO = "no"; }
// lib.optionalAttrs (stdenv'.cc.isClang or false) {

View File

@ -1,5 +1,4 @@
{
stdenv,
lib,
stdenvNoCC,
makeScopeWithSplicing',
@ -21,7 +20,9 @@ makeScopeWithSplicing' {
defaultMakeFlags = [
"MKSOFTFLOAT=${
if stdenv.hostPlatform.gcc.float or (stdenv.hostPlatform.parsed.abi.float or "hard") == "soft" then
if
stdenvNoCC.hostPlatform.gcc.float or (stdenvNoCC.hostPlatform.parsed.abi.float or "hard") == "soft"
then
"yes"
else
"no"
@ -36,7 +37,6 @@ makeScopeWithSplicing' {
# because of the splices.
mkDerivation = self.callPackage ./pkgs/mkDerivation.nix {
inherit stdenv stdenvNoCC;
inherit (buildPackages.netbsd)
netbsdSetupHook
makeMinimal
@ -55,12 +55,7 @@ makeScopeWithSplicing' {
inherit (buildPackages.darwin) cctools-port;
inherit (buildPackages.buildPackages) rsync;
inherit (buildPackages.netbsd) makeMinimal;
inherit (self)
install
include
libc
libutil
;
inherit (self) install;
};
install = self.callPackage ./pkgs/install/package.nix {
@ -129,7 +124,7 @@ makeScopeWithSplicing' {
libpthread-headers = self.callPackage ./pkgs/libpthread/headers.nix { };
csu = self.callPackage ./pkgs/csu.nix {
inherit (self) headers sys ld_elf_so;
inherit (self) headers sys-headers ld_elf_so;
inherit (buildPackages.netbsd)
netbsdSetupHook
makeMinimal

View File

@ -6,9 +6,6 @@
defaultMakeFlags,
coreutils,
cctools-port,
include,
libc,
libutil,
install,
bsdSetupHook,
netbsdSetupHook,
@ -130,12 +127,13 @@ mkDerivation (
--subst-var-by version ${version}
'';
extraPaths = [
include.path
libc.path
libutil.path
"common"
"include"
"lib/libc"
"lib/libutil"
"external/bsd/flex"
"sys/sys"
"sys"
"common/include/rpc/types.h"
] ++ libutil.extraPaths ++ _mainLibcExtraPaths;
] ++ _mainLibcExtraPaths;
}
)

View File

@ -16,11 +16,12 @@
statHook,
rsync,
headers,
sys,
sys-headers,
ld_elf_so,
}:
mkDerivation {
noLibc = true;
path = "lib/csu";
meta.platforms = lib.platforms.netbsd;
nativeBuildInputs = [
@ -41,7 +42,7 @@ mkDerivation {
];
buildInputs = [ headers ];
extraPaths = [
sys.path
sys-headers.path
ld_elf_so.path
];
}

View File

@ -15,6 +15,7 @@
}:
mkDerivation {
noLibc = true;
path = "include";
nativeBuildInputs = [
bsdSetupHook

View File

@ -6,6 +6,7 @@
}:
mkDerivation {
noLibc = true;
path = "libexec/ld.elf_so";
meta.platforms = lib.platforms.netbsd;
LIBC_PIC = "${libc}/lib/libc_pic.a";

View File

@ -24,6 +24,7 @@
}:
mkDerivation {
noLibc = true;
path = "lib/libc";
USE_FORT = "yes";
MKPROFILE = "no";
@ -94,5 +95,8 @@ mkDerivation {
make -C $BSDSRCDIR/lib/libcrypt $makeFlags
make -C $BSDSRCDIR/lib/libcrypt $makeFlags install
'';
inherit (librt) postPatch;
postPatch = ''
sed -i 's,/usr\(/include/sys/syscall.h\),${headers}\1,g' \
$BSDSRCDIR/lib/{libc,librt}/sys/Makefile.inc
'';
}

View File

@ -9,8 +9,5 @@ mkDerivation {
path = "lib/librt";
meta.platforms = lib.platforms.netbsd;
extraPaths = [ libc.path ] ++ libc.extraPaths;
postPatch = ''
sed -i 's,/usr\(/include/sys/syscall.h\),${headers}\1,g' \
$BSDSRCDIR/lib/{libc,librt}/sys/Makefile.inc
'';
inherit (libc) postPatch;
}

View File

@ -19,8 +19,8 @@ mkDerivation {
path = "lib/libutil";
extraPaths = [
"common"
libc.path
sys.path
"lib/libc"
"sys"
];
nativeBuildInputs = [
bsdSetupHook

View File

@ -23,7 +23,13 @@
lib.makeOverridable (
attrs:
let
stdenv' = if attrs.noCC or false then stdenvNoCC else stdenv;
stdenv' =
if attrs.noCC or false then
stdenvNoCC
else if attrs.noLibc or false then
crossLibcStdenv
else
stdenv;
in
stdenv'.mkDerivation (
rec {

View File

@ -1,16 +1,17 @@
{
stdenv,
lib,
stdenvNoCC,
makeScopeWithSplicing',
generateSplicesForMkScope,
pkgs,
buildPackages,
netbsd,
}:
makeScopeWithSplicing' {
let
otherSplices = generateSplicesForMkScope "openbsd";
buildOpenbsd = otherSplices.selfBuildHost;
in
makeScopeWithSplicing' {
inherit otherSplices;
f = (
self:
lib.packagesFromDirectoryRecursive {
@ -19,8 +20,8 @@ makeScopeWithSplicing' {
}
// {
libc = self.callPackage ./pkgs/libc/package.nix {
inherit (self) csu include lorder;
inherit (buildPackages.openbsd) makeMinimal;
inherit (self) csu include;
inherit (buildOpenbsd) makeMinimal;
inherit (buildPackages.netbsd)
install
gencat
@ -30,16 +31,16 @@ makeScopeWithSplicing' {
};
makeMinimal = buildPackages.netbsd.makeMinimal.override { inherit (self) make-rules; };
mkDerivation = self.callPackage ./pkgs/mkDerivation.nix {
inherit stdenv;
inherit (buildPackages.netbsd) install;
inherit (buildPackages.buildPackages) rsync;
};
include = self.callPackage ./pkgs/include/package.nix {
inherit (buildPackages.openbsd) makeMinimal;
inherit (buildOpenbsd) makeMinimal;
inherit (buildPackages.netbsd) install rpcgen mtree;
};
csu = self.callPackage ./pkgs/csu.nix {
inherit (self) include;
inherit (buildPackages.openbsd) makeMinimal;
inherit (buildOpenbsd) makeMinimal;
inherit (buildPackages.netbsd) install;
};
make-rules = self.callPackage ./pkgs/make-rules/package.nix { };

View File

@ -9,6 +9,7 @@
}:
mkDerivation {
noLibc = true;
path = "lib/csu";
nativeBuildInputs = [
bsdSetupHook

View File

@ -1,6 +1,6 @@
{
lib,
stdenv,
crossLibcStdenv,
mkDerivation,
bsdSetupHook,
openbsdSetupHook,
@ -10,7 +10,6 @@
byacc,
gencat,
rpcgen,
lorder,
csu,
include,
ctags,
@ -19,7 +18,8 @@
fetchpatch,
}:
mkDerivation rec {
mkDerivation {
noLibc = true;
pname = "libc";
path = "lib/libc";
extraPaths = [
@ -53,7 +53,6 @@ mkDerivation rec {
gencat
rpcgen
ctags
lorder
tsort
];
@ -69,7 +68,9 @@ mkDerivation rec {
# 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";
env.NIX_LDFLAGS = lib.optionalString (
crossLibcStdenv.hostPlatform.linker == "lld"
) "--undefined-version";
makeFlags = [
"STRIP=-s" # flag to install, not command

View File

@ -8,6 +8,7 @@
}:
mkDerivation {
noCC = true;
path = "usr.bin/lorder";
nativeBuildInputs = [
bsdSetupHook

View File

@ -2,7 +2,6 @@
fetchpatch,
lib,
mkDerivation,
stdenv,
}:
mkDerivation {

View File

@ -2,6 +2,7 @@
lib,
stdenv,
stdenvNoCC,
crossLibcStdenv,
runCommand,
rsync,
source,
@ -14,7 +15,13 @@
lib.makeOverridable (
attrs:
let
stdenv' = if attrs.noCC or false then stdenvNoCC else stdenv;
stdenv' =
if attrs.noCC or false then
stdenvNoCC
else if attrs.noLibc or false then
crossLibcStdenv
else
stdenv;
in
stdenv'.mkDerivation (
rec {
@ -43,9 +50,6 @@ lib.makeOverridable (
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"
@ -81,6 +85,9 @@ 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";

View File

@ -32,7 +32,11 @@ rec {
# Override the compiler in stdenv for specific packages.
overrideCC = stdenv: cc: stdenv.override { allowedRequisites = null; cc = cc; };
overrideCC = stdenv: cc: stdenv.override {
allowedRequisites = null;
cc = cc;
hasCC = cc != null;
};
# Add some arbitrary packages to buildInputs for specific packages.

View File

@ -1477,6 +1477,10 @@ mapAliases ({
inherit (stdenv.hostPlatform) system; # Added 2021-10-22
inherit (stdenv) buildPlatform hostPlatform targetPlatform; # Added 2023-01-09
freebsdCross = freebsd; # Added 2024-06-18
netbsdCross = netbsd; # Added 2024-06-18
openbsdCross = openbsd; # Added 2024-06-18
# LLVM packages for (integration) testing that should not be used inside Nixpkgs:
llvmPackages_latest = llvmPackages_18;
llvmPackages_git = recurseIntoAttrs (callPackage ../development/compilers/llvm/git {

View File

@ -61,7 +61,7 @@ with pkgs;
};
stdenvNoLibs =
if stdenv.hostPlatform != stdenv.buildPlatform && (stdenv.hostPlatform.isDarwin || stdenv.hostPlatform.useLLVM or false)
if stdenvNoCC.hostPlatform != stdenvNoCC.buildPlatform && (stdenv.hostPlatform.isDarwin || stdenv.hostPlatform.useLLVM or false)
then
# We cannot touch binutils or cc themselves, because that will cause
# infinite recursion. So instead, we just choose a libc based on the
@ -20954,9 +20954,9 @@ with pkgs;
if stdenv.targetPlatform.useiOSPrebuilt
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 == "fblibc" then targetPackages.freebsd.libc or freebsd.libc
else if name == "oblibc" then targetPackages.openbsd.libc or openbsd.libc
else if name == "nblibc" then targetPackages.netbsd.libc or netbsd.libc
else if name == "wasilibc" then targetPackages.wasilibc or wasilibc
else if name == "relibc" then targetPackages.relibc or relibc
else throw "Unknown libc ${name}";
@ -40585,18 +40585,11 @@ with pkgs;
name = "bsd-setup-hook";
} ../os-specific/bsd/setup-hook.sh;
inherit (callPackage ../os-specific/bsd/freebsd { })
freebsd freebsdCross;
freebsd = callPackage ../os-specific/bsd/freebsd { };
netbsd = callPackage ../os-specific/bsd/netbsd { };
netbsdCross = callPackage ../os-specific/bsd/netbsd {
stdenv = crossLibcStdenv;
};
openbsd = callPackage ../os-specific/bsd/openbsd { };
openbsdCross = callPackage ../os-specific/bsd/openbsd {
stdenv = crossLibcStdenv;
};
powershell = callPackage ../shells/powershell { };