mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-09 19:13:26 +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}
|
||||
<!-- 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}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
|
|
|
@ -191,6 +191,16 @@ let
|
|||
|
||||
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
|
||||
# of certain dependencies that were used in bootstrapping the
|
||||
# standard environment.
|
||||
|
@ -214,6 +224,7 @@ let
|
|||
# - pkgsCross.<system> where system is a member of lib.systems.examples
|
||||
# - pkgsMusl
|
||||
# - pkgsi686Linux
|
||||
# NOTE: add new non-critical package sets to "pkgs/top-level/variants.nix"
|
||||
otherPackageSets = self: super: {
|
||||
# This maps each entry in lib.systems.examples to its own package
|
||||
# set. Each of these will contain all packages cross compiled for
|
||||
|
@ -222,69 +233,6 @@ let
|
|||
# Raspberry Pi.
|
||||
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.
|
||||
# Used by wine, firefox with debugging version of Flash, ...
|
||||
pkgsi686Linux =
|
||||
|
@ -376,45 +324,6 @@ let
|
|||
// 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.
|
||||
|
@ -430,6 +339,7 @@ let
|
|||
allPackages
|
||||
otherPackageSets
|
||||
aliases
|
||||
variants
|
||||
configOverrides
|
||||
]
|
||||
++ 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