Merge pull request #24610 from Ericson2314/platform-normalization

Platform normalization
This commit is contained in:
John Ericson 2017-04-17 17:28:01 -04:00 committed by GitHub
commit f0b634c7e8
17 changed files with 346 additions and 221 deletions

View File

@ -2,7 +2,7 @@
let let
inherit (builtins) head tail length; inherit (builtins) head tail length;
inherit (import ./trivial.nix) or; inherit (import ./trivial.nix) and or;
inherit (import ./default.nix) fold; inherit (import ./default.nix) fold;
inherit (import ./strings.nix) concatStringsSep; inherit (import ./strings.nix) concatStringsSep;
inherit (import ./lists.nix) concatMap concatLists all deepSeqList; inherit (import ./lists.nix) concatMap concatLists all deepSeqList;
@ -417,18 +417,15 @@ rec {
/* Returns true if the pattern is contained in the set. False otherwise. /* Returns true if the pattern is contained in the set. False otherwise.
FIXME(zimbatm): this example doesn't work !!!
Example: Example:
sys = mkSystem { } matchAttrs { cpu = {}; } { cpu = { bits = 64; }; }
matchAttrs { cpu = { bits = 64; }; } sys
=> true => true
*/ */
matchAttrs = pattern: attrs: matchAttrs = pattern: attrs: assert isAttrs pattern;
fold or false (attrValues (zipAttrsWithNames (attrNames pattern) (n: values: fold and true (attrValues (zipAttrsWithNames (attrNames pattern) (n: values:
let pat = head values; val = head (tail values); in let pat = head values; val = head (tail values); in
if length values == 1 then false if length values == 1 then false
else if isAttrs pat then isAttrs val && matchAttrs head values else if isAttrs pat then isAttrs val && matchAttrs pat val
else pat == val else pat == val
) [pattern attrs])); ) [pattern attrs]));

View File

@ -27,8 +27,7 @@ let
# constants # constants
licenses = import ./licenses.nix; licenses = import ./licenses.nix;
platforms = import ./platforms.nix; systems = import ./systems;
systems = import ./systems.nix;
# misc # misc
debug = import ./debug.nix; debug = import ./debug.nix;
@ -47,13 +46,15 @@ in
attrsets lists strings stringsWithDeps attrsets lists strings stringsWithDeps
customisation maintainers meta sources customisation maintainers meta sources
modules options types modules options types
licenses platforms systems licenses systems
debug generators misc debug generators misc
sandbox fetchers filesystem; sandbox fetchers filesystem;
# back-compat aliases
platforms = systems.doubles;
} }
# !!! don't include everything at top-level; perhaps only the most # !!! don't include everything at top-level; perhaps only the most
# commonly used functions. # commonly used functions.
// trivial // lists // strings // stringsWithDeps // attrsets // sources // trivial // lists // strings // stringsWithDeps // attrsets // sources
// options // types // meta // debug // misc // modules // options // types // meta // debug // misc // modules
// systems
// customisation // customisation

View File

@ -1,24 +0,0 @@
let lists = import ./lists.nix; in
rec {
all = linux ++ darwin ++ cygwin ++ freebsd ++ openbsd ++ netbsd ++ illumos;
allBut = platforms: lists.filter (x: !(builtins.elem x platforms)) all;
none = [];
arm = ["armv5tel-linux" "armv6l-linux" "armv7l-linux" ];
i686 = ["i686-linux" "i686-freebsd" "i686-netbsd" "i686-cygwin"];
mips = [ "mips64el-linux" ];
x86_64 = ["x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin"];
cygwin = ["i686-cygwin" "x86_64-cygwin"];
darwin = ["x86_64-darwin"];
freebsd = ["i686-freebsd" "x86_64-freebsd"];
gnu = linux; /* ++ hurd ++ kfreebsd ++ ... */
illumos = ["x86_64-solaris"];
linux = ["i686-linux" "x86_64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux" "mips64el-linux"];
netbsd = ["i686-netbsd" "x86_64-netbsd"];
openbsd = ["i686-openbsd" "x86_64-openbsd"];
unix = linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos;
mesaPlatforms = ["i686-linux" "x86_64-linux" "x86_64-darwin" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux"];
}

View File

@ -1,126 +0,0 @@
# Define the list of system with their properties. Only systems tested for
# Nixpkgs are listed below
with import ./lists.nix;
with import ./types.nix;
with import ./attrsets.nix;
let
lib = import ./default.nix;
setTypes = type:
mapAttrs (name: value:
setType type ({inherit name;} // value)
);
in
rec {
isSignificantByte = isType "significant-byte";
significantBytes = setTypes "significant-byte" {
bigEndian = {};
littleEndian = {};
};
isCpuType = x: isType "cpu-type" x
&& elem x.bits [8 16 32 64 128]
&& (8 < x.bits -> isSignificantByte x.significantByte);
cpuTypes = with significantBytes;
setTypes "cpu-type" {
arm = { bits = 32; significantByte = littleEndian; };
armv5tel = { bits = 32; significantByte = littleEndian; };
armv7l = { bits = 32; significantByte = littleEndian; };
i686 = { bits = 32; significantByte = littleEndian; };
powerpc = { bits = 32; significantByte = bigEndian; };
x86_64 = { bits = 64; significantByte = littleEndian; };
};
isExecFormat = isType "exec-format";
execFormats = setTypes "exec-format" {
aout = {}; # a.out
elf = {};
macho = {};
pe = {};
unknow = {};
};
isKernel = isType "kernel";
kernels = with execFormats;
setTypes "kernel" {
cygwin = { execFormat = pe; };
darwin = { execFormat = macho; };
freebsd = { execFormat = elf; };
linux = { execFormat = elf; };
netbsd = { execFormat = elf; };
none = { execFormat = unknow; };
openbsd = { execFormat = elf; };
win32 = { execFormat = pe; };
};
isArchitecture = isType "architecture";
architectures = setTypes "architecture" {
apple = {};
pc = {};
unknow = {};
};
isSystem = x: isType "system" x
&& isCpuType x.cpu
&& isArchitecture x.arch
&& isKernel x.kernel;
mkSystem = {
cpu ? cpuTypes.i686,
arch ? architectures.pc,
kernel ? kernels.linux,
name ? "${cpu.name}-${arch.name}-${kernel.name}"
}: setType "system" {
inherit name cpu arch kernel;
};
is64Bit = matchAttrs { cpu = { bits = 64; }; };
isDarwin = matchAttrs { kernel = kernels.darwin; };
isi686 = matchAttrs { cpu = cpuTypes.i686; };
isLinux = matchAttrs { kernel = kernels.linux; };
# This should revert the job done by config.guess from the gcc compiler.
mkSystemFromString = s: let
l = lib.splitString "-" s;
getCpu = name:
attrByPath [name] (throw "Unknow cpuType `${name}'.")
cpuTypes;
getArch = name:
attrByPath [name] (throw "Unknow architecture `${name}'.")
architectures;
getKernel = name:
attrByPath [name] (throw "Unknow kernel `${name}'.")
kernels;
system =
if builtins.length l == 2 then
mkSystem rec {
name = s;
cpu = getCpu (head l);
arch =
if isDarwin system
then architectures.apple
else architectures.pc;
kernel = getKernel (head (tail l));
}
else
mkSystem {
name = s;
cpu = getCpu (head l);
arch = getArch (head (tail l));
kernel = getKernel (head (tail (tail l)));
};
in assert isSystem system; system;
}

23
lib/systems/default.nix Normal file
View File

@ -0,0 +1,23 @@
rec {
doubles = import ./doubles.nix;
parse = import ./parse.nix;
platforms = import ./platforms.nix;
# Elaborate a `localSystem` or `crossSystem` so that it contains everything
# necessary.
#
# `parsed` is inferred from args, both because there are two options with one
# clearly prefered, and to prevent cycles. A simpler fixed point where the RHS
# always just used `final.*` would fail on both counts.
elaborate = args: let
final = {
# Prefer to parse `config` as it is strictly more informative.
parsed = parse.mkSystemFromString (if args ? config then args.config else args.system);
# Either of these can be losslessly-extracted from `parsed` iff parsing succeeds.
system = parse.doubleFromSystem final.parsed;
config = parse.tripleFromSystem final.parsed;
# Just a guess, based on `system`
platform = platforms.selectBySystem final.system;
} // args;
in final;
}

44
lib/systems/doubles.nix Normal file
View File

@ -0,0 +1,44 @@
let lists = import ../lists.nix; in
let parse = import ./parse.nix; in
let inherit (import ../attrsets.nix) matchAttrs; in
let
all = [
"aarch64-linux"
"armv5tel-linux" "armv6l-linux" "armv7l-linux"
"mips64el-linux"
"i686-cygwin" "i686-freebsd" "i686-linux" "i686-netbsd" "i686-openbsd"
"x86_64-cygwin" "x86_64-darwin" "x86_64-freebsd" "x86_64-linux"
"x86_64-netbsd" "x86_64-openbsd" "x86_64-solaris"
];
allParsed = map parse.mkSystemFromString all;
filterDoubles = f: map parse.doubleFromSystem (lists.filter f allParsed);
in rec {
inherit all;
allBut = platforms: lists.filter (x: !(builtins.elem x platforms)) all;
none = [];
arm = filterDoubles (matchAttrs { cpu = { family = "arm"; bits = 32; }; });
i686 = filterDoubles parse.isi686;
mips = filterDoubles (matchAttrs { cpu = { family = "mips"; }; });
x86_64 = filterDoubles parse.isx86_64;
cygwin = filterDoubles (matchAttrs { kernel = parse.kernels.cygwin; });
darwin = filterDoubles parse.isDarwin;
freebsd = filterDoubles (matchAttrs { kernel = parse.kernels.freebsd; });
gnu = filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnu; }); # Should be better
illumos = filterDoubles (matchAttrs { kernel = parse.kernels.solaris; });
linux = filterDoubles parse.isLinux;
netbsd = filterDoubles (matchAttrs { kernel = parse.kernels.netbsd; });
openbsd = filterDoubles (matchAttrs { kernel = parse.kernels.openbsd; });
unix = filterDoubles parse.isUnix;
mesaPlatforms = ["i686-linux" "x86_64-linux" "x86_64-darwin" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux"];
}

173
lib/systems/parse.nix Normal file
View File

@ -0,0 +1,173 @@
# Define the list of system with their properties. Only systems tested for
# Nixpkgs are listed below
with import ../lists.nix;
with import ../types.nix;
with import ../attrsets.nix;
let
lib = import ../default.nix;
setTypesAssert = type: pred:
mapAttrs (name: value:
#assert pred value;
setType type ({ inherit name; } // value));
setTypes = type: setTypesAssert type (_: true);
in
rec {
isSignificantByte = isType "significant-byte";
significantBytes = setTypes "significant-byte" {
bigEndian = {};
littleEndian = {};
};
isCpuType = isType "cpu-type";
cpuTypes = with significantBytes; setTypesAssert "cpu-type"
(x: elem x.bits [8 16 32 64 128]
&& (if 8 < x.bits
then isSignificantByte x.significantByte
else !(x ? significantByte)))
{
arm = { bits = 32; significantByte = littleEndian; family = "arm"; };
armv5tel = { bits = 32; significantByte = littleEndian; family = "arm"; };
armv6l = { bits = 32; significantByte = littleEndian; family = "arm"; };
armv7a = { bits = 32; significantByte = littleEndian; family = "arm"; };
armv7l = { bits = 32; significantByte = littleEndian; family = "arm"; };
aarch64 = { bits = 64; significantByte = littleEndian; family = "arm"; };
i686 = { bits = 32; significantByte = littleEndian; family = "x86"; };
x86_64 = { bits = 64; significantByte = littleEndian; family = "x86"; };
mips64el = { bits = 32; significantByte = littleEndian; family = "mips"; };
powerpc = { bits = 32; significantByte = bigEndian; family = "powerpc"; };
};
isVendor = isType "vendor";
vendors = setTypes "vendor" {
apple = {};
pc = {};
unknown = {};
};
isExecFormat = isType "exec-format";
execFormats = setTypes "exec-format" {
aout = {}; # a.out
elf = {};
macho = {};
pe = {};
unknown = {};
};
isKernelFamily = isType "kernel-family";
kernelFamilies = setTypes "kernel-family" {
bsd = {};
unix = {};
windows-nt = {};
dos = {};
};
isKernel = x: isType "kernel" x;
kernels = with execFormats; with kernelFamilies; setTypesAssert "kernel"
(x: isExecFormat x.execFormat && all isKernelFamily (attrValues x.families))
{
cygwin = { execFormat = pe; families = { inherit /*unix*/ windows-nt; }; };
darwin = { execFormat = macho; families = { inherit unix; }; };
freebsd = { execFormat = elf; families = { inherit unix bsd; }; };
linux = { execFormat = elf; families = { inherit unix; }; };
netbsd = { execFormat = elf; families = { inherit unix bsd; }; };
none = { execFormat = unknown; families = { inherit unix; }; };
openbsd = { execFormat = elf; families = { inherit unix bsd; }; };
solaris = { execFormat = elf; families = { inherit unix; }; };
win32 = { execFormat = pe; families = { inherit dos; }; };
};
isAbi = isType "abi";
abis = setTypes "abi" {
gnu = {};
msvc = {};
eabi = {};
androideabi = {};
unknown = {};
};
isSystem = isType "system";
mkSystem = { cpu, vendor, kernel, abi }:
assert isCpuType cpu && isVendor vendor && isKernel kernel && isAbi abi;
setType "system" {
inherit cpu vendor kernel abi;
};
is64Bit = matchAttrs { cpu = { bits = 64; }; };
is32Bit = matchAttrs { cpu = { bits = 32; }; };
isi686 = matchAttrs { cpu = cpuTypes.i686; };
isx86_64 = matchAttrs { cpu = cpuTypes.x86_64; };
isDarwin = matchAttrs { kernel = kernels.darwin; };
isLinux = matchAttrs { kernel = kernels.linux; };
isUnix = matchAttrs { kernel = { families = { inherit (kernelFamilies) unix; }; }; };
isWindows = s: matchAttrs { kernel = { families = { inherit (kernelFamilies) windows-nt; }; }; } s
|| matchAttrs { kernel = { families = { inherit (kernelFamilies) dos; }; }; } s;
mkSkeletonFromList = l: {
"2" = { cpu = elemAt l 0; kernel = elemAt l 1; };
"4" = { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; abi = elemAt l 3; };
"3" = # Awkwards hacks, beware!
if elemAt l 1 == "apple"
then { cpu = elemAt l 0; vendor = "apple"; kernel = elemAt l 2; }
else if (elemAt l 1 == "linux") || (elemAt l 2 == "gnu")
then { cpu = elemAt l 0; kernel = elemAt l 1; abi = elemAt l 2; }
else throw "Target specification with 3 components is ambiguous";
}.${toString (length l)}
or (throw "system string has invalid number of hyphen-separated components");
# This should revert the job done by config.guess from the gcc compiler.
mkSystemFromSkeleton = { cpu
, # Optional, but fallback too complex for here.
# Inferred below instead.
vendor ? assert false; null
, kernel
, # Also inferred below
abi ? assert false; null
} @ args: let
getCpu = name:
attrByPath [name] (throw "Unknown CPU type: ${name}")
cpuTypes;
getVendor = name:
attrByPath [name] (throw "Unknown vendor: ${name}")
vendors;
getKernel = name:
attrByPath [name] (throw "Unknown kernel: ${name}")
kernels;
getAbi = name:
attrByPath [name] (throw "Unknown ABI: ${name}")
abis;
system = rec {
cpu = getCpu args.cpu;
vendor =
/**/ if args ? vendor then getVendor args.vendor
else if isDarwin system then vendors.apple
else if isWindows system then vendors.pc
else vendors.unknown;
kernel = getKernel args.kernel;
abi =
/**/ if args ? abi then getAbi args.abi
else if isLinux system then abis.gnu
else if isWindows system then abis.gnu
else abis.unknown;
};
in mkSystem system;
mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (lib.splitString "-" s));
doubleFromSystem = { cpu, vendor, kernel, abi, ... }: "${cpu.name}-${kernel.name}";
tripleFromSystem = { cpu, vendor, kernel, abi, ... } @ sys: assert isSystem sys; let
optAbi = lib.optionalString (abi != abis.unknown) "-${abi.name}";
in "${cpu.name}-${vendor.name}-${kernel.name}${optAbi}";
}

View File

@ -474,7 +474,7 @@ rec {
}; };
}; };
selectPlatformBySystem = system: { selectBySystem = system: {
"i686-linux" = pc32; "i686-linux" = pc32;
"x86_64-linux" = pc64; "x86_64-linux" = pc64;
"armv5tel-linux" = sheevaplug; "armv5tel-linux" = sheevaplug;

View File

@ -1,15 +1,23 @@
{ nixpkgs }: { nixpkgs ? { outPath = (import ../.).cleanSource ../..; revCount = 1234; shortRev = "abcdef"; }
, # The platforms for which we build Nixpkgs.
supportedSystems ? [ builtins.currentSystem ]
, # Strip most of attributes when evaluating to spare memory usage
scrubJobs ? true
}:
with import ../.. { }; with import ../../pkgs/top-level/release-lib.nix { inherit supportedSystems scrubJobs; };
with lib; with lib;
stdenv.mkDerivation { {
systems = import ./systems.nix { inherit lib assertTrue; };
moduleSystem = pkgs.stdenv.mkDerivation {
name = "nixpkgs-lib-tests"; name = "nixpkgs-lib-tests";
buildInputs = [ nix ]; buildInputs = [ pkgs.nix ];
NIX_PATH="nixpkgs=${nixpkgs}"; NIX_PATH="nixpkgs=${nixpkgs}";
buildCommand = '' buildCommand = ''
datadir="${nix}/share" datadir="${pkgs.nix}/share"
export TEST_ROOT=$(pwd)/test-tmp export TEST_ROOT=$(pwd)/test-tmp
export NIX_BUILD_HOOK= export NIX_BUILD_HOOK=
export NIX_CONF_DIR=$TEST_ROOT/etc export NIX_CONF_DIR=$TEST_ROOT/etc
@ -28,4 +36,5 @@ stdenv.mkDerivation {
touch $out touch $out
''; '';
};
} }

31
lib/tests/systems.nix Normal file
View File

@ -0,0 +1,31 @@
# We assert that the new algorithmic way of generating these lists matches the
# way they were hard-coded before.
#
# One might think "if we exhaustively test, what's the point of procedurally
# calculating the lists anyway?". The answer is one can mindlessly update these
# tests as new platforms become supported, and then just give the diff a quick
# sanity check before committing :).
{ lib, assertTrue }:
with lib.systems.doubles;
let mseteq = x: y: lib.sort lib.lessThan x == lib.sort lib.lessThan y; in
{
all = assertTrue (mseteq all (linux ++ darwin ++ cygwin ++ freebsd ++ openbsd ++ netbsd ++ illumos));
arm = assertTrue (mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv7l-linux" ]);
i686 = assertTrue (mseteq i686 [ "i686-linux" "i686-freebsd" "i686-netbsd" "i686-openbsd" "i686-cygwin" ]);
mips = assertTrue (mseteq mips [ "mips64el-linux" ]);
x86_64 = assertTrue (mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" ]);
cygwin = assertTrue (mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ]);
darwin = assertTrue (mseteq darwin [ "x86_64-darwin" ]);
freebsd = assertTrue (mseteq freebsd [ "i686-freebsd" "x86_64-freebsd" ]);
gnu = assertTrue (mseteq gnu (linux /* ++ hurd ++ kfreebsd ++ ... */));
illumos = assertTrue (mseteq illumos [ "x86_64-solaris" ]);
linux = assertTrue (mseteq linux [ "i686-linux" "x86_64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux" "mips64el-linux" ]);
netbsd = assertTrue (mseteq netbsd [ "i686-netbsd" "x86_64-netbsd" ]);
openbsd = assertTrue (mseteq openbsd [ "i686-openbsd" "x86_64-openbsd" ]);
unix = assertTrue (mseteq unix (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos));
}

View File

@ -303,7 +303,7 @@ with pkgs;
composableDerivation = callPackage ../../lib/composable-derivation.nix { }; composableDerivation = callPackage ../../lib/composable-derivation.nix { };
platforms = import ./platforms.nix; inherit (lib.systems) platforms;
setJavaClassPath = makeSetupHook { } ../build-support/setup-hooks/set-java-classpath.sh; setJavaClassPath = makeSetupHook { } ../build-support/setup-hooks/set-java-classpath.sh;

View File

@ -40,6 +40,7 @@
let # Rename the function arguments let # Rename the function arguments
configExpr = config; configExpr = config;
crossSystem0 = crossSystem;
in let in let
lib = import ../../lib; lib = import ../../lib;
@ -52,12 +53,15 @@ in let
then configExpr { inherit pkgs; } then configExpr { inherit pkgs; }
else configExpr; else configExpr;
# Allow setting the platform in the config file. Otherwise, let's use a # From a minimum of `system` or `config` (actually a target triple, *not*
# reasonable default. # nixpkgs configuration), infer the other one and platform as needed.
localSystem = localSystem = lib.systems.elaborate (
{ platform = (import ./platforms.nix).selectPlatformBySystem args.localSystem.system; } # Allow setting the platform in the config file. This take precedence over
// builtins.intersectAttrs { platform = null; } config # the inferred platform, but not over an explicitly passed-in onw.
// args.localSystem; builtins.intersectAttrs { platform = null; } config
// args.localSystem);
crossSystem = lib.mapNullable lib.systems.elaborate crossSystem0;
# A few packages make a new package set to draw their dependencies from. # 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 # (Currently to get a cross tool chain, or forced-i686 package.) Rather than

View File

@ -1,4 +1,3 @@
{ # The platforms for which we build Nixpkgs. { # The platforms for which we build Nixpkgs.
supportedSystems ? [ builtins.currentSystem ] supportedSystems ? [ builtins.currentSystem ]
, # Strip most of attributes when evaluating to spare memory usage , # Strip most of attributes when evaluating to spare memory usage
@ -8,8 +7,6 @@
with import ./release-lib.nix { inherit supportedSystems scrubJobs; }; with import ./release-lib.nix { inherit supportedSystems scrubJobs; };
let let
inherit (pkgs) lib;
nativePlatforms = linux; nativePlatforms = linux;
/* Basic list of packages to cross-build */ /* Basic list of packages to cross-build */
@ -50,11 +47,11 @@ in
# cause false negatives. # cause false negatives.
testEqualOne = path: system: let testEqualOne = path: system: let
f = path: attrs: builtins.toString (lib.getAttrFromPath path (allPackages attrs)); f = path: attrs: builtins.toString (lib.getAttrFromPath path (allPackages attrs));
in assert in assertTrue (
f path { inherit system; } f path { inherit system; }
== ==
f (["buildPackages"] ++ path) { inherit system crossSystem; }; f (["buildPackages"] ++ path) { inherit system crossSystem; };
true; );
testEqual = path: systems: forAllSupportedSystems systems (testEqualOne path); testEqual = path: systems: forAllSupportedSystems systems (testEqualOne path);
@ -139,16 +136,7 @@ in
float = "hard"; float = "hard";
withTLS = true; withTLS = true;
libc = "glibc"; libc = "glibc";
platform = { platform = lib.platforms.fuloong2f_n32;
name = "fuloong-minipc";
kernelMajor = "2.6";
kernelBaseConfig = "lemote2f_defconfig";
kernelHeadersBaseConfig = "fuloong2e_defconfig";
uboot = null;
kernelArch = "mips";
kernelAutoModules = false;
kernelTarget = "vmlinux";
};
openssl.system = "linux-generic32"; openssl.system = "linux-generic32";
gcc = { gcc = {
arch = "loongson2f"; arch = "loongson2f";
@ -172,7 +160,7 @@ in
fpu = "vfp"; fpu = "vfp";
withTLS = true; withTLS = true;
libc = "glibc"; libc = "glibc";
platform = pkgs.platforms.raspberrypi; platform = lib.platforms.raspberrypi;
openssl.system = "linux-generic32"; openssl.system = "linux-generic32";
gcc = { gcc = {
arch = "armv6"; arch = "armv6";

View File

@ -5,13 +5,16 @@
nixpkgsArgs ? { config = { allowUnfree = false; inHydra = true; }; } nixpkgsArgs ? { config = { allowUnfree = false; inHydra = true; }; }
}: }:
with import ../../lib; let
lib = import ../../lib;
in with lib;
rec { rec {
allPackages = args: packageSet (args // nixpkgsArgs); allPackages = args: packageSet (args // nixpkgsArgs);
pkgs = pkgsFor "x86_64-linux"; pkgs = pkgsFor "x86_64-linux";
inherit lib;
hydraJob' = if scrubJobs then hydraJob else id; hydraJob' = if scrubJobs then hydraJob else id;
@ -41,6 +44,11 @@ rec {
pkgs_x86_64_cygwin = allPackages { system = "x86_64-cygwin"; }; pkgs_x86_64_cygwin = allPackages { system = "x86_64-cygwin"; };
assertTrue = bool:
if bool
then pkgs.runCommand "evaluated-to-true" {} "touch $out"
else pkgs.runCommand "evaluated-to-false" {} "false";
/* The working or failing mails for cross builds will be sent only to /* The working or failing mails for cross builds will be sent only to
the following maintainers, as most package maintainers will not be the following maintainers, as most package maintainers will not be
interested in the result of cross building a package. */ interested in the result of cross building a package. */

View File

@ -3,14 +3,14 @@
$ hydra-eval-jobs pkgs/top-level/release-python.nix $ hydra-eval-jobs pkgs/top-level/release-python.nix
*/ */
{ nixpkgs ? { outPath = (import ../.. {}).lib.cleanSource ../..; revCount = 1234; shortRev = "abcdef"; } { nixpkgs ? { outPath = (import ../../lib).cleanSource ../..; revCount = 1234; shortRev = "abcdef"; }
, officialRelease ? false , officialRelease ? false
, # The platforms for which we build Nixpkgs. , # The platforms for which we build Nixpkgs.
supportedSystems ? [ "x86_64-linux" ] supportedSystems ? [ "x86_64-linux" ]
}: }:
with import ../../lib;
with import ./release-lib.nix {inherit supportedSystems; }; with import ./release-lib.nix {inherit supportedSystems; };
with lib;
let let
packagePython = mapAttrs (name: value: packagePython = mapAttrs (name: value:

View File

@ -1,7 +1,7 @@
/* A small release file, with few packages to be built. The aim is to reduce /* A small release file, with few packages to be built. The aim is to reduce
the load on Hydra when testing the `stdenv-updates' branch. */ the load on Hydra when testing the `stdenv-updates' branch. */
{ nixpkgs ? { outPath = (import ../.. {}).lib.cleanSource ../..; revCount = 1234; shortRev = "abcdef"; } { nixpkgs ? { outPath = (import ../../lib).cleanSource ../..; revCount = 1234; shortRev = "abcdef"; }
, supportedSystems ? [ "x86_64-linux" "i686-linux" "x86_64-darwin" ] , supportedSystems ? [ "x86_64-linux" "i686-linux" "x86_64-darwin" ]
}: }:

View File

@ -9,7 +9,7 @@
$ nix-build pkgs/top-level/release.nix -A coreutils.x86_64-linux $ nix-build pkgs/top-level/release.nix -A coreutils.x86_64-linux
*/ */
{ nixpkgs ? { outPath = (import ../.. {}).lib.cleanSource ../..; revCount = 1234; shortRev = "abcdef"; } { nixpkgs ? { outPath = (import ../../lib).cleanSource ../..; revCount = 1234; shortRev = "abcdef"; }
, officialRelease ? false , officialRelease ? false
, # The platforms for which we build Nixpkgs. , # The platforms for which we build Nixpkgs.
supportedSystems ? [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ] supportedSystems ? [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
@ -22,16 +22,13 @@
with import ./release-lib.nix { inherit supportedSystems scrubJobs nixpkgsArgs; }; with import ./release-lib.nix { inherit supportedSystems scrubJobs nixpkgsArgs; };
let let
lib = pkgs.lib;
jobs = jobs =
{ tarball = import ./make-tarball.nix { inherit pkgs nixpkgs officialRelease; }; { tarball = import ./make-tarball.nix { inherit pkgs nixpkgs officialRelease; };
metrics = import ./metrics.nix { inherit pkgs nixpkgs; }; metrics = import ./metrics.nix { inherit pkgs nixpkgs; };
manual = import ../../doc; manual = import ../../doc;
lib-tests = import ../../lib/tests/release.nix { inherit nixpkgs; }; lib-tests = import ../../lib/tests/release.nix { inherit nixpkgs supportedSystems scrubJobs; };
darwin-tested = pkgs.releaseTools.aggregate darwin-tested = pkgs.releaseTools.aggregate
{ name = "nixpkgs-darwin-${jobs.tarball.version}"; { name = "nixpkgs-darwin-${jobs.tarball.version}";
@ -55,7 +52,6 @@ let
[ jobs.tarball [ jobs.tarball
jobs.metrics jobs.metrics
jobs.manual jobs.manual
jobs.lib-tests
jobs.stdenv.x86_64-linux jobs.stdenv.x86_64-linux
jobs.stdenv.i686-linux jobs.stdenv.i686-linux
jobs.stdenv.x86_64-darwin jobs.stdenv.x86_64-darwin
@ -82,7 +78,8 @@ let
jobs.git.x86_64-darwin jobs.git.x86_64-darwin
jobs.mysql.x86_64-darwin jobs.mysql.x86_64-darwin
jobs.vim.x86_64-darwin jobs.vim.x86_64-darwin
] ++ lib.collect lib.isDerivation jobs.stdenvBootstrapTools; ] ++ lib.collect lib.isDerivation jobs.stdenvBootstrapTools
++ lib.collect lib.isDerivation jobs.lib-tests;
}; };
} // (lib.optionalAttrs (builtins.elem "i686-linux" supportedSystems) { } // (lib.optionalAttrs (builtins.elem "i686-linux" supportedSystems) {
stdenvBootstrapTools.i686-linux = stdenvBootstrapTools.i686-linux =