Skip to content

Commit

Permalink
pkgs/top-level: refactor mkHybridPkgs
Browse files Browse the repository at this point in the history
  • Loading branch information
wolfgangwalther committed Dec 15, 2024
1 parent 5b8f835 commit e80ac15
Showing 1 changed file with 23 additions and 25 deletions.
48 changes: 23 additions & 25 deletions pkgs/top-level/stage.nix
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,13 @@ let
});
# This is always cross.
mkCrossPkgs = name: crossAttrs: mkPkgs name (prevArgs: {
crossSystem = (lib.systems.systemToAttrs (lib.defaultTo prevArgs.localSystem prevArgs.crossSystem or null)) // crossAttrs;
crossSystem =
(lib.systems.systemToAttrs (lib.defaultTo prevArgs.localSystem prevArgs.crossSystem or null)) // crossAttrs;
});
# This is only cross when we are already cross, otherwise local.
mkHybridPkgs = name: hybridAttrs: mkPkgs name (prevArgs: {
${if prevArgs ? crossSystem then "crossSystem" else "localSystem"} =
(lib.systems.systemToAttrs (lib.defaultTo prevArgs.localSystem prevArgs.crossSystem or null)) // hybridAttrs;
});
in self: super: {
# This maps each entry in lib.systems.examples to its own package
Expand Down Expand Up @@ -223,42 +229,34 @@ let
# All packages built with the Musl libc. This will override the
# default GNU libc on Linux systems. Non-Linux systems are not
# supported. 32-bit is also not supported.
pkgsMusl = if stdenv.hostPlatform.isLinux && stdenv.buildPlatform.is64bit then mkPkgs "pkgsMusl" (prevArgs: {
${if prevArgs ? crossSystem then "crossSystem" else "localSystem"} = (lib.systems.systemToAttrs (lib.defaultTo prevArgs.localSystem prevArgs.crossSystem or null)) // {
config = lib.systems.parse.tripleFromSystem (makeMuslParsedPlatform stdenv.hostPlatform.parsed);
};
}) else throw "Musl libc only supports 64-bit Linux systems.";
pkgsMusl = if stdenv.hostPlatform.isLinux && stdenv.buildPlatform.is64bit then mkHybridPkgs "pkgsMusl" {
config = lib.systems.parse.tripleFromSystem (makeMuslParsedPlatform stdenv.hostPlatform.parsed);
} else throw "Musl libc only supports 64-bit Linux systems.";

# All packages built for i686 Linux.
# Used by wine, firefox with debugging version of Flash, ...
pkgsi686Linux = if stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isx86 then mkPkgs "pkgsi686Linux" (prevArgs: {
${if prevArgs ? crossSystem then "crossSystem" else "localSystem"} = (lib.systems.systemToAttrs (lib.defaultTo prevArgs.localSystem prevArgs.crossSystem or null)) // {
config = lib.systems.parse.tripleFromSystem (stdenv.hostPlatform.parsed // {
cpu = lib.systems.parse.cpuTypes.i686;
});
};
}) else throw "i686 Linux package set can only be used with the x86 family.";
pkgsi686Linux = if stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isx86 then mkHybridPkgs "pkgsi686Linux" {
config = lib.systems.parse.tripleFromSystem (stdenv.hostPlatform.parsed // {
cpu = lib.systems.parse.cpuTypes.i686;
});
} else throw "i686 Linux package set can only be used with the x86 family.";

# x86_64-darwin packages for aarch64-darwin users to use with Rosetta for incompatible packages
pkgsx86_64Darwin = if stdenv.hostPlatform.isDarwin then mkPkgs "pkgsx86_64Darwin" (prevArgs: {
${if prevArgs ? crossSystem then "crossSystem" else "localSystem"} = (lib.systems.systemToAttrs (lib.defaultTo prevArgs.localSystem prevArgs.crossSystem or null)) // {
config = lib.systems.parse.tripleFromSystem (stdenv.hostPlatform.parsed // {
cpu = lib.systems.parse.cpuTypes.x86_64;
});
};
}) else throw "x86_64 Darwin package set can only be used on Darwin systems.";
pkgsx86_64Darwin = if stdenv.hostPlatform.isDarwin then mkHybridPkgs "pkgsx86_64Darwin" {
config = lib.systems.parse.tripleFromSystem (stdenv.hostPlatform.parsed // {
cpu = lib.systems.parse.cpuTypes.x86_64;
});
} else throw "x86_64 Darwin package set can only be used on Darwin systems.";

# If already linux: the same package set unaltered
# Otherwise, return a linux package set for the current cpu architecture string.
# (ABI and other details will be set to the default for the cpu/os pair)
pkgsLinux =
if stdenv.hostPlatform.isLinux
then self
else mkPkgs "pkgsLinux" (prevArgs: {
${if prevArgs ? crossSystem then "crossSystem" else "localSystem"} = (lib.systems.systemToAttrs (lib.defaultTo prevArgs.localSystem prevArgs.crossSystem or null)) // {
config = lib.systems.parse.tripleFromSystem (lib.systems.elaborate "${stdenv.hostPlatform.parsed.cpu.name}-linux").parsed;
};
});
else mkHybridPkgs "pkgsLinux" {
config = lib.systems.parse.tripleFromSystem (lib.systems.elaborate "${stdenv.hostPlatform.parsed.cpu.name}-linux").parsed;
};

# Fully static packages.
# Currently uses Musl on Linux (couldn’t get static glibc to work).
Expand Down

0 comments on commit e80ac15

Please sign in to comment.