summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/stdenv/adapters.nix2
-rw-r--r--pkgs/stdenv/cross/default.nix16
-rw-r--r--pkgs/stdenv/custom/default.nix9
-rw-r--r--pkgs/stdenv/darwin/default.nix17
-rw-r--r--pkgs/stdenv/default.nix4
-rw-r--r--pkgs/stdenv/freebsd/default.nix8
-rw-r--r--pkgs/stdenv/linux/default.nix32
-rw-r--r--pkgs/stdenv/native/default.nix13
-rw-r--r--pkgs/stdenv/nix/default.nix4
-rw-r--r--pkgs/top-level/default.nix3
-rw-r--r--pkgs/top-level/stage.nix82
11 files changed, 136 insertions, 54 deletions
diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix
index daa180c644f..5d66db266c7 100644
--- a/pkgs/stdenv/adapters.nix
+++ b/pkgs/stdenv/adapters.nix
@@ -108,7 +108,7 @@ rec {
                     crossConfig = cross.config;
                 } // args.crossAttrs or {});
     } // {
-      inherit cross gccCross binutilsCross;
+      inherit gccCross binutilsCross;
       ccCross = gccCross;
     };
 
diff --git a/pkgs/stdenv/cross/default.nix b/pkgs/stdenv/cross/default.nix
index e684c14da4a..37f403acee9 100644
--- a/pkgs/stdenv/cross/default.nix
+++ b/pkgs/stdenv/cross/default.nix
@@ -1,10 +1,10 @@
 { lib
-, system, platform, crossSystem, config, overlays
+, localSystem, crossSystem, config, overlays
 }:
 
 let
   bootStages = import ../. {
-    inherit lib system platform overlays;
+    inherit lib localSystem overlays;
     crossSystem = null;
     # Ignore custom stdenvs when cross compiling for compatability
     config = builtins.removeAttrs config [ "replaceStdenv" ];
@@ -14,21 +14,25 @@ in bootStages ++ [
 
   # Build Packages
   (vanillaPackages: {
-    inherit system platform crossSystem config overlays;
+    buildPlatform = localSystem;
+    hostPlatform = localSystem;
+    targetPlatform = crossSystem;
+    inherit config overlays;
     # Should be false, but we're trying to preserve hashes for now
     selfBuild = true;
     # It's OK to change the built-time dependencies
     allowCustomOverrides = true;
     stdenv = vanillaPackages.stdenv // {
-      # Needed elsewhere as a hacky way to pass the target
-      cross = crossSystem;
       overrides = _: _: {};
     };
   })
 
   # Run Packages
   (buildPackages: {
-    inherit system platform crossSystem config overlays;
+    buildPlatform = localSystem;
+    hostPlatform = crossSystem;
+    targetPlatform = crossSystem;
+    inherit config overlays;
     selfBuild = false;
     stdenv = if crossSystem.useiOSCross or false
       then let
diff --git a/pkgs/stdenv/custom/default.nix b/pkgs/stdenv/custom/default.nix
index d7e9bf53bed..d5dc977b37a 100644
--- a/pkgs/stdenv/custom/default.nix
+++ b/pkgs/stdenv/custom/default.nix
@@ -1,12 +1,12 @@
 { lib
-, system, platform, crossSystem, config, overlays
+, localSystem, crossSystem, config, overlays
 }:
 
 assert crossSystem == null;
 
 let
   bootStages = import ../. {
-    inherit lib system platform crossSystem overlays;
+    inherit lib localSystem crossSystem overlays;
     # Remove config.replaceStdenv to ensure termination.
     config = builtins.removeAttrs config [ "replaceStdenv" ];
   };
@@ -15,7 +15,10 @@ in bootStages ++ [
 
   # Additional stage, built using custom stdenv
   (vanillaPackages: {
-    inherit system platform crossSystem config overlays;
+    buildPlatform = localSystem;
+    hostPlatform = localSystem;
+    targetPlatform = localSystem;
+    inherit config overlays;
     stdenv = config.replaceStdenv { pkgs = vanillaPackages; };
   })
 
diff --git a/pkgs/stdenv/darwin/default.nix b/pkgs/stdenv/darwin/default.nix
index e3a87ea078f..e647c81890e 100644
--- a/pkgs/stdenv/darwin/default.nix
+++ b/pkgs/stdenv/darwin/default.nix
@@ -1,11 +1,12 @@
 { lib
-, system, platform, crossSystem, config, overlays
+, localSystem, crossSystem, config, overlays
 
 # Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools
 , bootstrapFiles ? let
   fetch = { file, sha256, executable ? true }: import <nix/fetchurl.nix> {
     url = "http://tarballs.nixos.org/stdenv-darwin/x86_64/33f59c9d11b8d5014dfd18cc11a425f6393c884a/${file}";
-    inherit sha256 system executable;
+    inherit (localSystem) system;
+    inherit sha256 executable;
   }; in {
     sh      = fetch { file = "sh";    sha256 = "1rx4kg6358xdj05z0m139a0zn4f4zfmq4n4vimlmnwyfiyn4x7wk"; };
     bzip2   = fetch { file = "bzip2"; sha256 = "104qnhzk79vkbp2yi0kci6lszgfppvrwk3rgxhry842ly1xz2r7l"; };
@@ -18,6 +19,8 @@
 assert crossSystem == null;
 
 let
+  inherit (localSystem) system platform;
+
   libSystemProfile = ''
     (import "${./standard-sandbox.sb}")
   '';
@@ -98,7 +101,10 @@ in rec {
       };
 
     in {
-      inherit system platform crossSystem config overlays;
+      buildPlatform = localSystem;
+      hostPlatform = localSystem;
+      targetPlatform = localSystem;
+      inherit config overlays;
       stdenv = thisStdenv;
     };
 
@@ -316,7 +322,10 @@ in rec {
     stage3
     stage4
     (prevStage: {
-      inherit system crossSystem platform config overlays;
+      buildPlatform = localSystem;
+      hostPlatform = localSystem;
+      targetPlatform = localSystem;
+      inherit config overlays;
       stdenv = stdenvDarwin prevStage;
     })
   ];
diff --git a/pkgs/stdenv/default.nix b/pkgs/stdenv/default.nix
index f60ffec4b56..78dbde13b89 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
-, system, platform, crossSystem, config, overlays
+, localSystem, crossSystem, config, overlays
 } @ args:
 
 let
@@ -51,4 +51,4 @@ in
     "i686-cygwin" = stagesNative;
     "x86_64-cygwin" = stagesNative;
     "x86_64-freebsd" = stagesFreeBSD;
-  }.${system} or stagesNative
+  }.${localSystem.system} or stagesNative
diff --git a/pkgs/stdenv/freebsd/default.nix b/pkgs/stdenv/freebsd/default.nix
index 2cb059deb34..b926c6bdd90 100644
--- a/pkgs/stdenv/freebsd/default.nix
+++ b/pkgs/stdenv/freebsd/default.nix
@@ -1,8 +1,9 @@
 { lib
-, system, platform, crossSystem, config, overlays
+, localSystem, crossSystem, config, overlays
 }:
 
 assert crossSystem == null;
+let inherit (localSystem) system; in
 
 
 [
@@ -58,7 +59,10 @@ assert crossSystem == null;
   })
 
   (prevStage: {
-    inherit system crossSystem platform config overlays;
+    buildPlatform = localSystem;
+    hostPlatform = localSystem;
+    targetPlatform = localSystem;
+    inherit config overlays;
     stdenv = import ../generic {
       name = "stdenv-freebsd-boot-3";
       inherit system config;
diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix
index 12da007f2a7..611628b35ab 100644
--- a/pkgs/stdenv/linux/default.nix
+++ b/pkgs/stdenv/linux/default.nix
@@ -4,21 +4,23 @@
 # compiler and linker that do not search in default locations,
 # ensuring purity of components produced by it.
 { lib
-, system, platform, crossSystem, config, overlays
-
-, bootstrapFiles ?
-    if system == "i686-linux" then import ./bootstrap-files/i686.nix
-    else if system == "x86_64-linux" then import ./bootstrap-files/x86_64.nix
-    else if system == "armv5tel-linux" then import ./bootstrap-files/armv5tel.nix
-    else if system == "armv6l-linux" then import ./bootstrap-files/armv6l.nix
-    else if system == "armv7l-linux" then import ./bootstrap-files/armv7l.nix
-    else if system == "mips64el-linux" then import ./bootstrap-files/loongson2f.nix
-    else abort "unsupported platform for the pure Linux stdenv"
+, localSystem, crossSystem, config, overlays
+
+, bootstrapFiles ? { # switch
+    "i686-linux" = import ./bootstrap-files/i686.nix;
+    "x86_64-linux" = import ./bootstrap-files/x86_64.nix;
+    "armv5tel-linux" = import ./bootstrap-files/armv5tel.nix;
+    "armv6l-linux" = import ./bootstrap-files/armv6l.nix;
+    "armv7l-linux" = import ./bootstrap-files/armv7l.nix;
+    "mips64el-linux" = import ./bootstrap-files/loongson2f.nix;
+  }.${localSystem.system}
+    or (abort "unsupported platform for the pure Linux stdenv")
 }:
 
 assert crossSystem == null;
 
 let
+  inherit (localSystem) system platform;
 
   commonPreHook =
     ''
@@ -91,7 +93,10 @@ let
       };
 
     in {
-      inherit system platform crossSystem config overlays;
+      buildPlatform = localSystem;
+      hostPlatform = localSystem;
+      targetPlatform = localSystem;
+      inherit config overlays;
       stdenv = thisStdenv;
     };
 
@@ -246,7 +251,10 @@ in
   # dependency (`nix-store -qR') on bootstrapTools or the first
   # binutils built.
   (prevStage: {
-    inherit system crossSystem platform config overlays;
+    buildPlatform = localSystem;
+    hostPlatform = localSystem;
+    targetPlatform = localSystem;
+    inherit config overlays;
     stdenv = import ../generic rec {
       inherit system config;
 
diff --git a/pkgs/stdenv/native/default.nix b/pkgs/stdenv/native/default.nix
index 4028638009e..f5c0976bf93 100644
--- a/pkgs/stdenv/native/default.nix
+++ b/pkgs/stdenv/native/default.nix
@@ -1,10 +1,11 @@
 { lib
-, system, platform, crossSystem, config, overlays
+, localSystem, crossSystem, config, overlays
 }:
 
 assert crossSystem == null;
 
 let
+  inherit (localSystem) system platform;
 
   shell =
     if system == "i686-freebsd" || system == "x86_64-freebsd" then "/usr/local/bin/bash"
@@ -134,7 +135,10 @@ in
 
   # First build a stdenv based only on tools outside the store.
   (prevStage: {
-    inherit system crossSystem platform config overlays;
+    buildPlatform = localSystem;
+    hostPlatform = localSystem;
+    targetPlatform = localSystem;
+    inherit config overlays;
     stdenv = makeStdenv {
       inherit (prevStage) cc fetchurl;
     } // { inherit (prevStage) fetchurl; };
@@ -143,7 +147,10 @@ in
   # Using that, build a stdenv that adds the ‘xz’ command (which most systems
   # don't have, so we mustn't rely on the native environment providing it).
   (prevStage: {
-    inherit system crossSystem platform config overlays;
+    buildPlatform = localSystem;
+    hostPlatform = localSystem;
+    targetPlatform = localSystem;
+    inherit config overlays;
     stdenv = makeStdenv {
       inherit (prevStage.stdenv) cc fetchurl;
       extraPath = [ prevStage.xz ];
diff --git a/pkgs/stdenv/nix/default.nix b/pkgs/stdenv/nix/default.nix
index a5f0a18464c..9aece3ce829 100644
--- a/pkgs/stdenv/nix/default.nix
+++ b/pkgs/stdenv/nix/default.nix
@@ -9,9 +9,9 @@ assert crossSystem == null;
 bootStages ++ [
   (prevStage: let
     inherit (prevStage) stdenv;
-    inherit (stdenv) system platform;
   in {
-    inherit system platform crossSystem config;
+    inherit (prevStage) buildPlatform hostPlatform targetPlatform;
+    inherit config overlays;
 
     stdenv = import ../generic rec {
       inherit config;
diff --git a/pkgs/top-level/default.nix b/pkgs/top-level/default.nix
index a146dad63bc..b7a4273acff 100644
--- a/pkgs/top-level/default.nix
+++ b/pkgs/top-level/default.nix
@@ -83,7 +83,8 @@ in let
   boot = import ../stdenv/booter.nix { inherit lib allPackages; };
 
   stages = stdenvStages {
-    inherit lib system platform crossSystem config overlays;
+    localSystem = { inherit system platform; };
+    inherit lib crossSystem config overlays;
   };
 
   pkgs = boot stages;
diff --git a/pkgs/top-level/stage.nix b/pkgs/top-level/stage.nix
index c100e21473c..780be566436 100644
--- a/pkgs/top-level/stage.nix
+++ b/pkgs/top-level/stage.nix
@@ -9,10 +9,43 @@
    import `pkgs/default.nix` or `default.nix`. */
 
 
-{ # The system (e.g., `i686-linux') for which to build the packages.
-  system
-
-, # the package set used at build-time
+{ ## Misc parameters kept the same for all stages
+  ##
+
+  # Utility functions, could just import but passing in for efficiency
+  lib
+
+, # Use to reevaluate Nixpkgs; a dirty hack that should be removed
+  nixpkgsFun
+
+  ## Platform parameters
+  ##
+  ## The "build" "host" "target" terminology below comes from GNU Autotools. See
+  ## its documentation for more information on what those words mean. Note that
+  ## each should always be defined, even when not cross compiling.
+  ##
+  ## For purposes of bootstrapping, think of each stage as a "sliding window"
+  ## over a list of platforms. Specifically, the host platform of the previous
+  ## stage becomes the build platform of the current one, and likewise the
+  ## target platform of the previous stage becomes the host platform of the
+  ## current one.
+  ##
+
+, # The platform on which packages are built. Consists of `system`, a
+  # string (e.g.,`i686-linux') identifying the most import attributes of the
+  # build platform, and `platform` a set of other details.
+  buildPlatform
+
+, # The platform on which packages run.
+  hostPlatform
+
+, # The platform which build tools (especially compilers) build for in this stage,
+  targetPlatform
+
+  ## Other parameters
+  ##
+
+, # The package set used at build-time
   buildPackages
 
 , # The standard environment to use for building packages.
@@ -24,21 +57,19 @@
   allowCustomOverrides
 
 , # Non-GNU/Linux OSes are currently "impure" platforms, with their libc
-  # outside of the store.  Thus, GCC, GFortran, & co. must always look for
-  # files in standard system directories (/usr/include, etc.)
-  noSysDirs ? (system != "x86_64-freebsd" && system != "i686-freebsd"
-               && system != "x86_64-solaris"
-               && system != "x86_64-kfreebsd-gnu")
+  # outside of the store.  Thus, GCC, GFortran, & co. must always look for files
+  # in standard system directories (/usr/include, etc.)
+  noSysDirs ? buildPlatform.system != "x86_64-freebsd"
+           && buildPlatform.system != "i686-freebsd"
+           && buildPlatform.system != "x86_64-solaris"
+           && buildPlatform.system != "x86_64-kfreebsd-gnu"
 
 , # The configuration attribute set
   config
 
-, overlays # List of overlays to use in the fix-point.
-
-, crossSystem
-, platform
-, lib
-, nixpkgsFun
+, # A list of overlays (Additional `self: super: { .. }` customization
+  # functions) to be fixed together in the produced package set
+  overlays
 }:
 
 let
@@ -53,10 +84,24 @@ let
     };
 
   stdenvBootstappingAndPlatforms = self: super: {
-    stdenv = stdenv // { inherit platform; };
     buildPackages = buildPackages // { recurseForDerivations = false; };
-    inherit
-      system platform crossSystem;
+    inherit stdenv
+      buildPlatform hostPlatform targetPlatform;
+  };
+
+  # The old identifiers for cross-compiling. These should eventually be removed,
+  # and the packages that rely on them refactored accordingly.
+  platformCompat = self: super: let
+    # TODO(@Ericson2314) this causes infinite recursion
+    #inherit (self) buildPlatform hostPlatform targetPlatform;
+  in {
+    stdenv = super.stdenv // {
+      inherit (buildPlatform) platform;
+    } // lib.optionalAttrs (targetPlatform != buildPlatform) {
+      cross = targetPlatform;
+    };
+    inherit (buildPlatform) system platform;
+    crossSystem = if targetPlatform != buildPlatform then targetPlatform else null;
   };
 
   splice = self: super: import ./splice.nix lib self;
@@ -89,6 +134,7 @@ let
   # The complete chain of package set builders, applied from top to bottom
   toFix = lib.foldl' (lib.flip lib.extends) (self: {}) ([
     stdenvBootstappingAndPlatforms
+    platformCompat
     stdenvAdapters
     trivialBuilders
     splice