Merge pull request #21414 from Ericson2314/release-cross

Improve release-cross tests
This commit is contained in:
John Ericson 2016-12-29 10:59:41 -07:00 committed by GitHub
commit 614ae8f660
2 changed files with 122 additions and 96 deletions

View File

@ -1,5 +1,7 @@
with import ./release-lib.nix { supportedSystems = []; };
with import ./release-lib.nix { supportedSystems = [ builtins.currentSystem ]; };
let
lib = import ../../lib;
nativePlatforms = linux;
/* Basic list of packages to cross-build */
@ -20,39 +22,68 @@ let
basic = basicCrossDrv // basicNativeDrv;
in
(
/* Test some cross builds to the Sheevaplug */
let
crossSystem = {
config = "armv5tel-unknown-linux-gnueabi";
bigEndian = false;
arch = "arm";
float = "soft";
withTLS = true;
platform = pkgs.platforms.sheevaplug;
libc = "glibc";
openssl.system = "linux-generic32";
{
# These `nativeDrv`s should be identical to their vanilla ones --- cross
# compiling should not affect the native derivation.
ensureUnaffected = let
# Absurd values are fine here, as we are not building anything. In fact,
# there probably a good idea to try to be "more parametric" --- i.e. avoid
# any special casing.
crossSystem = {
config = "foosys";
libc = "foolibc";
};
# Converting to a string (drv path) before checking equality is probably a
# good idea lest there be some irrelevant pass-through debug attrs that
# cause false negatives.
testEqualOne = path: system: let
f = attrs: builtins.toString (lib.getAttrFromPath path (allPackages attrs));
in assert f { inherit system; } == f { inherit system crossSystem; }; true;
testEqual = path: systems: forAllSupportedSystems systems (testEqualOne path);
mapTestEqual = lib.mapAttrsRecursive testEqual;
in mapTestEqual {
boehmgc = nativePlatforms;
libffi = nativePlatforms;
libiconv = nativePlatforms;
libtool = nativePlatforms;
zlib = nativePlatforms;
readline = nativePlatforms;
libxml2 = nativePlatforms;
guile = nativePlatforms;
};
in {
crossSheevaplugLinux = mapTestOnCross crossSystem (
basic //
{
ubootSheevaplug.crossDrv = nativePlatforms;
});
}) // (
/* Test some cross builds on 32 bit mingw-w64 */
let
crossSystem = {
/* Test some cross builds to the Sheevaplug */
crossSheevaplugLinux = let
crossSystem = {
config = "armv5tel-unknown-linux-gnueabi";
bigEndian = false;
arch = "arm";
float = "soft";
withTLS = true;
platform = pkgs.platforms.sheevaplug;
libc = "glibc";
openssl.system = "linux-generic32";
};
in mapTestOnCross crossSystem (basic // {
ubootSheevaplug.crossDrv = nativePlatforms;
});
/* Test some cross builds on 32 bit mingw-w64 */
crossMingw32 = let
crossSystem = {
config = "i686-w64-mingw32";
arch = "x86"; # Irrelevant
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
platform = {};
};
in {
crossMingw32 = mapTestOnCross crossSystem {
};
in mapTestOnCross crossSystem {
coreutils.crossDrv = nativePlatforms;
boehmgc.crossDrv = nativePlatforms;
gmp.crossDrv = nativePlatforms;
@ -62,19 +93,18 @@ in {
libunistring.crossDrv = nativePlatforms;
windows.wxMSW.crossDrv = nativePlatforms;
};
}) // (
/* Test some cross builds on 64 bit mingw-w64 */
let
crossSystem = {
/* Test some cross builds on 64 bit mingw-w64 */
crossMingwW64 = let
crossSystem = {
# That's the triplet they use in the mingw-w64 docs.
config = "x86_64-w64-mingw32";
arch = "x86_64"; # Irrelevant
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
platform = {};
};
in {
crossMingwW64 = mapTestOnCross crossSystem {
};
in mapTestOnCross crossSystem {
coreutils.crossDrv = nativePlatforms;
boehmgc.crossDrv = nativePlatforms;
gmp.crossDrv = nativePlatforms;
@ -84,63 +114,60 @@ in {
libunistring.crossDrv = nativePlatforms;
windows.wxMSW.crossDrv = nativePlatforms;
};
}) // (
/* Linux on the fuloong */
let
crossSystem = {
config = "mips64el-unknown-linux";
bigEndian = false;
arch = "mips";
float = "hard";
withTLS = true;
libc = "glibc";
platform = {
name = "fuloong-minipc";
kernelMajor = "2.6";
kernelBaseConfig = "lemote2f_defconfig";
kernelHeadersBaseConfig = "fuloong2e_defconfig";
uboot = null;
kernelArch = "mips";
kernelAutoModules = false;
kernelTarget = "vmlinux";
};
openssl.system = "linux-generic32";
gcc = {
arch = "loongson2f";
abi = "n32";
};
};
in {
fuloongminipc = mapTestOnCross crossSystem {
/* Linux on the fuloong */
fuloongminipc = let
crossSystem = {
config = "mips64el-unknown-linux";
bigEndian = false;
arch = "mips";
float = "hard";
withTLS = true;
libc = "glibc";
platform = {
name = "fuloong-minipc";
kernelMajor = "2.6";
kernelBaseConfig = "lemote2f_defconfig";
kernelHeadersBaseConfig = "fuloong2e_defconfig";
uboot = null;
kernelArch = "mips";
kernelAutoModules = false;
kernelTarget = "vmlinux";
};
openssl.system = "linux-generic32";
gcc = {
arch = "loongson2f";
abi = "n32";
};
};
in mapTestOnCross crossSystem {
coreutils.crossDrv = nativePlatforms;
ed.crossDrv = nativePlatforms;
patch.crossDrv = nativePlatforms;
};
}) // (
/* Linux on Raspberrypi */
let
crossSystem = {
config = "armv6l-unknown-linux-gnueabi";
bigEndian = false;
arch = "arm";
float = "hard";
fpu = "vfp";
withTLS = true;
libc = "glibc";
platform = pkgs.platforms.raspberrypi;
openssl.system = "linux-generic32";
gcc = {
arch = "armv6";
/* Linux on Raspberrypi */
rpi = let
crossSystem = {
config = "armv6l-unknown-linux-gnueabi";
bigEndian = false;
arch = "arm";
float = "hard";
fpu = "vfp";
float = "softfp";
abi = "aapcs-linux";
withTLS = true;
libc = "glibc";
platform = pkgs.platforms.raspberrypi;
openssl.system = "linux-generic32";
gcc = {
arch = "armv6";
fpu = "vfp";
float = "softfp";
abi = "aapcs-linux";
};
};
};
in {
rpi = mapTestOnCross crossSystem {
in mapTestOnCross crossSystem {
coreutils.crossDrv = nativePlatforms;
ed.crossDrv = nativePlatforms;
patch.crossDrv = nativePlatforms;
@ -152,13 +179,12 @@ in {
binutils.crossDrv = nativePlatforms;
mpg123.crossDrv = nativePlatforms;
};
}) // (
/* Cross-built bootstrap tools for every supported platform */
let
tools = import ../stdenv/linux/make-bootstrap-tools-cross.nix { system = "x86_64-linux"; };
maintainers = [ pkgs.lib.maintainers.dezgeg ];
mkBootstrapToolsJob = bt: hydraJob' (pkgs.lib.addMetaAttrs { inherit maintainers; } bt.dist);
in {
bootstrapTools = pkgs.lib.mapAttrs (name: mkBootstrapToolsJob) tools;
})
/* Cross-built bootstrap tools for every supported platform */
bootstrapTools = let
tools = import ../stdenv/linux/make-bootstrap-tools-cross.nix { system = "x86_64-linux"; };
maintainers = [ pkgs.lib.maintainers.dezgeg ];
mkBootstrapToolsJob = bt: hydraJob' (pkgs.lib.addMetaAttrs { inherit maintainers; } bt.dist);
in pkgs.lib.mapAttrs (name: mkBootstrapToolsJob) tools;
}

View File

@ -46,23 +46,23 @@ rec {
interested in the result of cross building a package. */
crossMaintainers = [ maintainers.viric ];
forAllSupportedSystems = systems: f:
genAttrs (filter (x: elem x supportedSystems) systems) f;
/* Build a package on the given set of platforms. The function `f'
is called for each supported platform with Nixpkgs for that
platform as an argument . We return an attribute set containing
a derivation for each supported platform, i.e. { x86_64-linux =
f pkgs_x86_64_linux; i686-linux = f pkgs_i686_linux; ... }. */
testOn = systems: f: genAttrs
(filter (x: elem x supportedSystems) systems) (system: hydraJob' (f (pkgsFor system)));
testOn = systems: f: forAllSupportedSystems systems
(system: hydraJob' (f (pkgsFor system)));
/* Similar to the testOn function, but with an additional
'crossSystem' parameter for allPackages, defining the target
platform for cross builds. */
testOnCross = crossSystem: systems: f: {system ? builtins.currentSystem}:
if elem system systems
then f (allPackages { inherit system crossSystem; })
else {};
testOnCross = crossSystem: systems: f: forAllSupportedSystems systems
(system: hydraJob' (f (allPackages { inherit system crossSystem; })));
/* Given a nested set where the leaf nodes are lists of platforms,