2016-12-16 08:22:02 -05:00
|
|
|
# This file chooses a sane default stdenv given the system, platform, etc.
|
2004-02-19 11:33:10 -05:00
|
|
|
#
|
2016-12-16 08:22:02 -05:00
|
|
|
# Rather than returning a stdenv, this returns a list of functions---one per
|
|
|
|
# each bootstrapping stage. See `./booter.nix` for exactly what this list should
|
|
|
|
# contain.
|
2004-02-19 11:33:10 -05:00
|
|
|
|
2016-11-27 15:37:45 -05:00
|
|
|
{ # Args just for stdenvs' usage
|
2016-12-16 08:22:02 -05:00
|
|
|
lib
|
|
|
|
# Args to pass on to the pkgset builder, too
|
2018-12-04 22:06:46 -05:00
|
|
|
, localSystem, crossSystem, config, overlays, crossOverlays ? []
|
2016-11-30 18:51:13 -05:00
|
|
|
} @ args:
|
2006-02-08 12:37:45 -05:00
|
|
|
|
2016-11-13 13:38:41 -05:00
|
|
|
let
|
2004-02-19 11:33:10 -05:00
|
|
|
# The native (i.e., impure) build environment. This one uses the
|
|
|
|
# tools installed on the system outside of the Nix environment,
|
|
|
|
# i.e., the stuff in /bin, /usr/bin, etc. This environment should
|
|
|
|
# be used with care, since many Nix packages will not build properly
|
|
|
|
# with it (e.g., because they require GNU Make).
|
2016-12-16 08:22:02 -05:00
|
|
|
stagesNative = import ./native args;
|
2004-02-19 11:33:10 -05:00
|
|
|
|
|
|
|
# The Nix build environment.
|
2016-12-16 08:22:02 -05:00
|
|
|
stagesNix = import ./nix (args // { bootStages = stagesNative; });
|
2004-03-29 12:23:01 -05:00
|
|
|
|
2016-12-16 08:22:02 -05:00
|
|
|
stagesFreeBSD = import ./freebsd args;
|
2015-11-25 21:35:12 -05:00
|
|
|
|
2016-12-16 08:22:02 -05:00
|
|
|
# On Linux systems, the standard build environment consists of Nix-built
|
|
|
|
# instances glibc and the `standard' Unix tools, i.e., the Posix utilities,
|
|
|
|
# the GNU C compiler, and so on.
|
2016-12-24 10:38:56 -05:00
|
|
|
stagesLinux = import ./linux args;
|
2004-05-18 06:59:18 -04:00
|
|
|
|
2016-12-16 08:22:02 -05:00
|
|
|
inherit (import ./darwin args) stagesDarwin;
|
2016-11-07 00:27:38 -05:00
|
|
|
|
2016-12-16 08:22:02 -05:00
|
|
|
stagesCross = import ./cross args;
|
2015-06-18 13:03:32 -04:00
|
|
|
|
2016-12-16 08:22:02 -05:00
|
|
|
stagesCustom = import ./custom args;
|
2016-04-27 12:09:27 -04:00
|
|
|
|
2016-12-16 08:22:02 -05:00
|
|
|
# Select the appropriate stages for the platform `system'.
|
2016-11-13 13:38:41 -05:00
|
|
|
in
|
2018-12-04 22:06:46 -05:00
|
|
|
if crossSystem != localSystem || crossOverlays != [] then stagesCross
|
2016-12-16 08:22:02 -05:00
|
|
|
else if config ? replaceStdenv then stagesCustom
|
|
|
|
else { # switch
|
|
|
|
"i686-linux" = stagesLinux;
|
|
|
|
"x86_64-linux" = stagesLinux;
|
|
|
|
"armv5tel-linux" = stagesLinux;
|
|
|
|
"armv6l-linux" = stagesLinux;
|
|
|
|
"armv7l-linux" = stagesLinux;
|
2016-02-04 17:47:23 -05:00
|
|
|
"aarch64-linux" = stagesLinux;
|
2017-12-05 05:27:45 -05:00
|
|
|
"mipsel-linux" = stagesLinux;
|
2016-12-16 08:22:02 -05:00
|
|
|
"powerpc-linux" = /* stagesLinux */ stagesNative;
|
2018-08-21 15:31:34 -04:00
|
|
|
"powerpc64le-linux" = stagesLinux;
|
2016-12-16 08:22:02 -05:00
|
|
|
"x86_64-darwin" = stagesDarwin;
|
|
|
|
"x86_64-solaris" = stagesNix;
|
|
|
|
"i686-cygwin" = stagesNative;
|
|
|
|
"x86_64-cygwin" = stagesNative;
|
|
|
|
"x86_64-freebsd" = stagesFreeBSD;
|
2016-12-24 13:55:11 -05:00
|
|
|
}.${localSystem.system} or stagesNative
|