-
-
Notifications
You must be signed in to change notification settings - Fork 18.2k
pkgs/top-level/stage.nix: move most nixpkgs sets to variants #400351
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 | ||
| ; | ||
| }; | ||
|
Comment on lines
+194
to
+202
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So we now have an What was the intent to introduce this again, when apparently nobody has used it, yet?
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The plan is to set it to true in CI once we have a competent replacement. #410056 is one that I've worked on. We're kinda blocked on that with GCC NG, @Ericson2314 and I are working on it.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I think this is just a typo and you mean I think you missed my point: When I use
But apparently this has been lost during later refactors of the PR. Now all variants are unconditionally included all the time. We currently have a prominently placed release note (including a backport) which mentions that we have a new config option I hope that clarifies it.
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Yes, I meant false. It was a typo.
Huh, lemme check if this works. I remember testing it and it did work.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's easy to confirm that it can't work. Just grep for
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh now I see what's going on, after #400351 (comment) I didn't add in |
||
|
|
||
| # 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 | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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; | ||
| }; | ||
| } |
Uh oh!
There was an error while loading. Please reload this page.