diff --git a/pkgs/stdenv/cross/default.nix b/pkgs/stdenv/cross/default.nix index daa9f66615c..a6063049a3a 100644 --- a/pkgs/stdenv/cross/default.nix +++ b/pkgs/stdenv/cross/default.nix @@ -1,11 +1,14 @@ { lib -, localSystem, crossSystem, config, overlays +, localSystem, crossSystem, config, overlays, crossOverlays ? [] }: let bootStages = import ../. { inherit lib localSystem overlays; - crossSystem = null; + + crossSystem = localSystem; + crossOverlays = []; + # Ignore custom stdenvs when cross compiling for compatability config = builtins.removeAttrs config [ "replaceStdenv" ]; }; @@ -33,7 +36,8 @@ in lib.init bootStages ++ [ # Run Packages (buildPackages: { - inherit config overlays; + inherit config; + overlays = overlays ++ crossOverlays; selfBuild = false; stdenv = buildPackages.stdenv.override (old: rec { buildPlatform = localSystem; @@ -48,7 +52,7 @@ in lib.init bootStages ++ [ cc = if crossSystem.useiOSPrebuilt or false then buildPackages.darwin.iosSdkPkgs.clang - else if crossSystem.useAndroidPrebuilt + else if crossSystem.useAndroidPrebuilt or false then buildPackages.androidenv."androidndkPkgs_${crossSystem.ndkVer}".gcc else buildPackages.gcc; @@ -56,6 +60,7 @@ in lib.init bootStages ++ [ ++ lib.optionals (hostPlatform.isLinux && !buildPlatform.isLinux) [ buildPackages.patchelf buildPackages.paxctl ] + ++ lib.optional hostPlatform.isDarwin buildPackages.clang ++ lib.optional (let f = p: !p.isx86 || p.libc == "musl"; in f hostPlatform && !(f buildPlatform)) buildPackages.updateAutotoolsGnuConfigScriptsHook diff --git a/pkgs/stdenv/custom/default.nix b/pkgs/stdenv/custom/default.nix index b6ea8685f8e..e86face9519 100644 --- a/pkgs/stdenv/custom/default.nix +++ b/pkgs/stdenv/custom/default.nix @@ -2,7 +2,7 @@ , localSystem, crossSystem, config, overlays }: -assert crossSystem == null; +assert crossSystem == localSystem; let bootStages = import ../. { diff --git a/pkgs/stdenv/darwin/default.nix b/pkgs/stdenv/darwin/default.nix index 5fb410b64eb..b7d8e3ba523 100644 --- a/pkgs/stdenv/darwin/default.nix +++ b/pkgs/stdenv/darwin/default.nix @@ -1,5 +1,5 @@ { lib -, localSystem, crossSystem, config, overlays +, localSystem, crossSystem, config, overlays, crossOverlays ? [] # Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools , bootstrapFiles ? let @@ -16,7 +16,7 @@ } }: -assert crossSystem == null; +assert crossSystem == localSystem; let inherit (localSystem) system platform; diff --git a/pkgs/stdenv/default.nix b/pkgs/stdenv/default.nix index 210e0439c0b..c0bbe24e521 100644 --- a/pkgs/stdenv/default.nix +++ b/pkgs/stdenv/default.nix @@ -7,7 +7,7 @@ { # Args just for stdenvs' usage lib # Args to pass on to the pkgset builder, too -, localSystem, crossSystem, config, overlays +, localSystem, crossSystem, config, overlays, crossOverlays ? [] } @ args: let @@ -36,7 +36,7 @@ let # Select the appropriate stages for the platform `system'. in - if crossSystem != null then stagesCross + if crossSystem != localSystem || crossOverlays != [] then stagesCross else if config ? replaceStdenv then stagesCustom else { # switch "i686-linux" = stagesLinux; diff --git a/pkgs/stdenv/freebsd/default.nix b/pkgs/stdenv/freebsd/default.nix index b3a6cedad84..dbb4a056455 100644 --- a/pkgs/stdenv/freebsd/default.nix +++ b/pkgs/stdenv/freebsd/default.nix @@ -2,7 +2,7 @@ , localSystem, crossSystem, config, overlays }: -assert crossSystem == null; +assert crossSystem == localSystem; let inherit (localSystem) system; in diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 978beea692c..6d793999d90 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -4,7 +4,7 @@ # compiler and linker that do not search in default locations, # ensuring purity of components produced by it. { lib -, localSystem, crossSystem, config, overlays +, localSystem, crossSystem, config, overlays, crossOverlays ? [] , bootstrapFiles ? let table = { @@ -32,7 +32,7 @@ in files }: -assert crossSystem == null; +assert crossSystem == localSystem; let inherit (localSystem) system platform; diff --git a/pkgs/stdenv/native/default.nix b/pkgs/stdenv/native/default.nix index 37795b11f6d..810cf16301f 100644 --- a/pkgs/stdenv/native/default.nix +++ b/pkgs/stdenv/native/default.nix @@ -2,7 +2,7 @@ , localSystem, crossSystem, config, overlays }: -assert crossSystem == null; +assert crossSystem == localSystem; let inherit (localSystem) system; diff --git a/pkgs/stdenv/nix/default.nix b/pkgs/stdenv/nix/default.nix index ffff8bdf51d..a8311f49609 100644 --- a/pkgs/stdenv/nix/default.nix +++ b/pkgs/stdenv/nix/default.nix @@ -1,10 +1,10 @@ { lib -, crossSystem, config, overlays +, crossSystem, localSystem, config, overlays , bootStages , ... }: -assert crossSystem == null; +assert crossSystem == localSystem; bootStages ++ [ (prevStage: { diff --git a/pkgs/top-level/default.nix b/pkgs/top-level/default.nix index da7fc1bed34..dcd443a1c29 100644 --- a/pkgs/top-level/default.nix +++ b/pkgs/top-level/default.nix @@ -22,9 +22,8 @@ # `*Platform`s. localSystem -, # The system packages will ultimately be run on. Null if the two should be the - # same. - crossSystem ? null +, # The system packages will ultimately be run on. + crossSystem ? localSystem , # Allow a configuration attribute set to be passed in as an argument. config ? {} @@ -32,6 +31,9 @@ , # List of overlays layers used to extend Nixpkgs. overlays ? [] +, # List of overlays to apply to target packages only. + crossOverlays ? [] + , # A function booting the final package set for a specific standard # environment. See below for the arguments given to that function, the type of # list it returns. @@ -61,7 +63,8 @@ in let builtins.intersectAttrs { platform = null; } config // args.localSystem); - crossSystem = lib.mapNullable lib.systems.elaborate crossSystem0; + crossSystem = if crossSystem0 == null then localSystem + else lib.systems.elaborate crossSystem0; # A few packages make a new package set to draw their dependencies from. # (Currently to get a cross tool chain, or forced-i686 package.) Rather than @@ -91,7 +94,7 @@ in let boot = import ../stdenv/booter.nix { inherit lib allPackages; }; stages = stdenvStages { - inherit lib localSystem crossSystem config overlays; + inherit lib localSystem crossSystem config overlays crossOverlays; }; pkgs = boot stages;