mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-10 11:45:45 +03:00
pkgs/top-level/stage.nix: move most nixpkgs sets to variants
This commit is contained in:
parent
db1c48226a
commit
14386224a1
4 changed files with 152 additions and 103 deletions
|
@ -3,7 +3,7 @@
|
||||||
## Highlights {#sec-nixpkgs-release-25.11-highlights}
|
## Highlights {#sec-nixpkgs-release-25.11-highlights}
|
||||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||||
|
|
||||||
- Create the first release note entry in this section!
|
- Added `allowVariants` to gate availability of package sets like `pkgsLLVM`, `pkgsMusl`, `pkgsZig`, etc.
|
||||||
|
|
||||||
## Backward Incompatibilities {#sec-nixpkgs-release-25.11-incompatibilities}
|
## Backward Incompatibilities {#sec-nixpkgs-release-25.11-incompatibilities}
|
||||||
|
|
||||||
|
|
|
@ -137,6 +137,18 @@ let
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
allowVariants = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
description = ''
|
||||||
|
Whether to expose the nixpkgs variants.
|
||||||
|
|
||||||
|
Variants are instances of the current nixpkgs instance with different stdenvs or other applied options.
|
||||||
|
This allows for using different toolchains, libcs, or global build changes across nixpkgs.
|
||||||
|
Disabling can ensure nixpkgs is only building for the platform which you specified.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
cudaSupport = mkMassRebuild {
|
cudaSupport = mkMassRebuild {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
|
|
|
@ -191,6 +191,16 @@ let
|
||||||
|
|
||||||
aliases = self: super: lib.optionalAttrs config.allowAliases (import ./aliases.nix lib self super);
|
aliases = self: super: lib.optionalAttrs config.allowAliases (import ./aliases.nix lib self super);
|
||||||
|
|
||||||
|
variants = import ./variants.nix {
|
||||||
|
inherit
|
||||||
|
lib
|
||||||
|
nixpkgsFun
|
||||||
|
stdenv
|
||||||
|
overlays
|
||||||
|
makeMuslParsedPlatform
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
# stdenvOverrides is used to avoid having multiple of versions
|
# stdenvOverrides is used to avoid having multiple of versions
|
||||||
# of certain dependencies that were used in bootstrapping the
|
# of certain dependencies that were used in bootstrapping the
|
||||||
# standard environment.
|
# standard environment.
|
||||||
|
@ -214,6 +224,7 @@ let
|
||||||
# - pkgsCross.<system> where system is a member of lib.systems.examples
|
# - pkgsCross.<system> where system is a member of lib.systems.examples
|
||||||
# - pkgsMusl
|
# - pkgsMusl
|
||||||
# - pkgsi686Linux
|
# - pkgsi686Linux
|
||||||
|
# NOTE: add new non-critical package sets to "pkgs/top-level/variants.nix"
|
||||||
otherPackageSets = self: super: {
|
otherPackageSets = self: super: {
|
||||||
# This maps each entry in lib.systems.examples to its own package
|
# This maps each entry in lib.systems.examples to its own package
|
||||||
# set. Each of these will contain all packages cross compiled for
|
# set. Each of these will contain all packages cross compiled for
|
||||||
|
@ -222,69 +233,6 @@ let
|
||||||
# Raspberry Pi.
|
# Raspberry Pi.
|
||||||
pkgsCross = lib.mapAttrs (n: crossSystem: nixpkgsFun { inherit crossSystem; }) lib.systems.examples;
|
pkgsCross = lib.mapAttrs (n: crossSystem: nixpkgsFun { inherit crossSystem; }) lib.systems.examples;
|
||||||
|
|
||||||
pkgsLLVM = nixpkgsFun {
|
|
||||||
overlays = [
|
|
||||||
(self': super': {
|
|
||||||
pkgsLLVM = super';
|
|
||||||
})
|
|
||||||
] ++ overlays;
|
|
||||||
# Bootstrap a cross stdenv using the LLVM toolchain.
|
|
||||||
# This is currently not possible when compiling natively,
|
|
||||||
# so we don't need to check hostPlatform != buildPlatform.
|
|
||||||
crossSystem = stdenv.hostPlatform // {
|
|
||||||
useLLVM = true;
|
|
||||||
linker = "lld";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
pkgsArocc = nixpkgsFun {
|
|
||||||
overlays = [
|
|
||||||
(self': super': {
|
|
||||||
pkgsArocc = super';
|
|
||||||
})
|
|
||||||
] ++ overlays;
|
|
||||||
# Bootstrap a cross stdenv using the Aro C compiler.
|
|
||||||
# This is currently not possible when compiling natively,
|
|
||||||
# so we don't need to check hostPlatform != buildPlatform.
|
|
||||||
crossSystem = stdenv.hostPlatform // {
|
|
||||||
useArocc = true;
|
|
||||||
linker = "lld";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
pkgsZig = nixpkgsFun {
|
|
||||||
overlays = [
|
|
||||||
(self': super': {
|
|
||||||
pkgsZig = super';
|
|
||||||
})
|
|
||||||
] ++ overlays;
|
|
||||||
# Bootstrap a cross stdenv using the Zig toolchain.
|
|
||||||
# This is currently not possible when compiling natively,
|
|
||||||
# so we don't need to check hostPlatform != buildPlatform.
|
|
||||||
crossSystem = stdenv.hostPlatform // {
|
|
||||||
useZig = true;
|
|
||||||
linker = "lld";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# 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
|
|
||||||
nixpkgsFun {
|
|
||||||
overlays = [
|
|
||||||
(self': super': {
|
|
||||||
pkgsMusl = super';
|
|
||||||
})
|
|
||||||
] ++ overlays;
|
|
||||||
${if stdenv.hostPlatform == stdenv.buildPlatform then "localSystem" else "crossSystem"} = {
|
|
||||||
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.
|
# All packages built for i686 Linux.
|
||||||
# Used by wine, firefox with debugging version of Flash, ...
|
# Used by wine, firefox with debugging version of Flash, ...
|
||||||
pkgsi686Linux =
|
pkgsi686Linux =
|
||||||
|
@ -376,45 +324,6 @@ let
|
||||||
// stdenv.hostPlatform.gcc or { };
|
// stdenv.hostPlatform.gcc or { };
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
# Full package set with rocm on cuda off
|
|
||||||
# Mostly useful for asserting pkgs.pkgsRocm.torchWithRocm == pkgs.torchWithRocm and similar
|
|
||||||
pkgsRocm = nixpkgsFun ({
|
|
||||||
config = super.config // {
|
|
||||||
cudaSupport = false;
|
|
||||||
rocmSupport = true;
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
pkgsExtraHardening = nixpkgsFun {
|
|
||||||
overlays = [
|
|
||||||
(
|
|
||||||
self': super':
|
|
||||||
{
|
|
||||||
pkgsExtraHardening = super';
|
|
||||||
stdenv = super'.withDefaultHardeningFlags (
|
|
||||||
super'.stdenv.cc.defaultHardeningFlags
|
|
||||||
++ [
|
|
||||||
"shadowstack"
|
|
||||||
"nostrictaliasing"
|
|
||||||
"pacret"
|
|
||||||
"trivialautovarinit"
|
|
||||||
]
|
|
||||||
) super'.stdenv;
|
|
||||||
glibc = super'.glibc.override rec {
|
|
||||||
enableCET = if self'.stdenv.hostPlatform.isx86_64 then "permissive" else false;
|
|
||||||
enableCETRuntimeDefault = enableCET != false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
// lib.optionalAttrs (with super'.stdenv.hostPlatform; isx86_64 && isLinux) {
|
|
||||||
# causes shadowstack disablement
|
|
||||||
pcre = super'.pcre.override { enableJit = false; };
|
|
||||||
pcre-cpp = super'.pcre-cpp.override { enableJit = false; };
|
|
||||||
pcre16 = super'.pcre16.override { enableJit = false; };
|
|
||||||
}
|
|
||||||
)
|
|
||||||
] ++ overlays;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# The complete chain of package set builders, applied from top to bottom.
|
# The complete chain of package set builders, applied from top to bottom.
|
||||||
|
@ -430,6 +339,7 @@ let
|
||||||
allPackages
|
allPackages
|
||||||
otherPackageSets
|
otherPackageSets
|
||||||
aliases
|
aliases
|
||||||
|
variants
|
||||||
configOverrides
|
configOverrides
|
||||||
]
|
]
|
||||||
++ overlays
|
++ overlays
|
||||||
|
|
127
pkgs/top-level/variants.nix
Normal file
127
pkgs/top-level/variants.nix
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
/*
|
||||||
|
This file contains all of the different variants of nixpkgs instances.
|
||||||
|
|
||||||
|
Unlike the other package sets like pkgsCross, pkgsi686Linux, etc., this
|
||||||
|
contains non-critical package sets. The intent is to be a shorthand
|
||||||
|
for things like using different toolchains in every package in nixpkgs.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
nixpkgsFun,
|
||||||
|
overlays,
|
||||||
|
makeMuslParsedPlatform,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
makeLLVMParsedPlatform =
|
||||||
|
parsed:
|
||||||
|
(
|
||||||
|
parsed
|
||||||
|
// {
|
||||||
|
abi = lib.systems.parse.abis.llvm;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
self: super: {
|
||||||
|
pkgsLLVM = nixpkgsFun {
|
||||||
|
overlays = [
|
||||||
|
(self': super': {
|
||||||
|
pkgsLLVM = super';
|
||||||
|
})
|
||||||
|
] ++ overlays;
|
||||||
|
# Bootstrap a cross stdenv using the LLVM toolchain.
|
||||||
|
# This is currently not possible when compiling natively,
|
||||||
|
# so we don't need to check hostPlatform != buildPlatform.
|
||||||
|
crossSystem = stdenv.hostPlatform // {
|
||||||
|
useLLVM = true;
|
||||||
|
linker = "lld";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pkgsArocc = nixpkgsFun {
|
||||||
|
overlays = [
|
||||||
|
(self': super': {
|
||||||
|
pkgsArocc = super';
|
||||||
|
})
|
||||||
|
] ++ overlays;
|
||||||
|
# Bootstrap a cross stdenv using the Aro C compiler.
|
||||||
|
# This is currently not possible when compiling natively,
|
||||||
|
# so we don't need to check hostPlatform != buildPlatform.
|
||||||
|
crossSystem = stdenv.hostPlatform // {
|
||||||
|
useArocc = true;
|
||||||
|
linker = "lld";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pkgsZig = nixpkgsFun {
|
||||||
|
overlays = [
|
||||||
|
(self': super': {
|
||||||
|
pkgsZig = super';
|
||||||
|
})
|
||||||
|
] ++ overlays;
|
||||||
|
# Bootstrap a cross stdenv using the Zig toolchain.
|
||||||
|
# This is currently not possible when compiling natively,
|
||||||
|
# so we don't need to check hostPlatform != buildPlatform.
|
||||||
|
crossSystem = stdenv.hostPlatform // {
|
||||||
|
useZig = true;
|
||||||
|
linker = "lld";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# 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
|
||||||
|
nixpkgsFun {
|
||||||
|
overlays = [
|
||||||
|
(self': super': {
|
||||||
|
pkgsMusl = super';
|
||||||
|
})
|
||||||
|
] ++ overlays;
|
||||||
|
${if stdenv.hostPlatform == stdenv.buildPlatform then "localSystem" else "crossSystem"} = {
|
||||||
|
config = lib.systems.parse.tripleFromSystem (makeMuslParsedPlatform stdenv.hostPlatform.parsed);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw "Musl libc only supports 64-bit Linux systems.";
|
||||||
|
|
||||||
|
# Full package set with rocm on cuda off
|
||||||
|
# Mostly useful for asserting pkgs.pkgsRocm.torchWithRocm == pkgs.torchWithRocm and similar
|
||||||
|
pkgsRocm = nixpkgsFun ({
|
||||||
|
config = super.config // {
|
||||||
|
cudaSupport = false;
|
||||||
|
rocmSupport = true;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
pkgsExtraHardening = nixpkgsFun {
|
||||||
|
overlays = [
|
||||||
|
(
|
||||||
|
self': super':
|
||||||
|
{
|
||||||
|
pkgsExtraHardening = super';
|
||||||
|
stdenv = super'.withDefaultHardeningFlags (
|
||||||
|
super'.stdenv.cc.defaultHardeningFlags
|
||||||
|
++ [
|
||||||
|
"shadowstack"
|
||||||
|
"nostrictaliasing"
|
||||||
|
"pacret"
|
||||||
|
"trivialautovarinit"
|
||||||
|
]
|
||||||
|
) super'.stdenv;
|
||||||
|
glibc = super'.glibc.override rec {
|
||||||
|
enableCET = if self'.stdenv.hostPlatform.isx86_64 then "permissive" else false;
|
||||||
|
enableCETRuntimeDefault = enableCET != false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (with super'.stdenv.hostPlatform; isx86_64 && isLinux) {
|
||||||
|
# causes shadowstack disablement
|
||||||
|
pcre = super'.pcre.override { enableJit = false; };
|
||||||
|
pcre-cpp = super'.pcre-cpp.override { enableJit = false; };
|
||||||
|
pcre16 = super'.pcre16.override { enableJit = false; };
|
||||||
|
}
|
||||||
|
)
|
||||||
|
] ++ overlays;
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue