Merge pull request #21414 from Ericson2314/release-cross
Improve release-cross tests
This commit is contained in:
commit
614ae8f660
@ -1,5 +1,7 @@
|
|||||||
with import ./release-lib.nix { supportedSystems = []; };
|
with import ./release-lib.nix { supportedSystems = [ builtins.currentSystem ]; };
|
||||||
let
|
let
|
||||||
|
lib = import ../../lib;
|
||||||
|
|
||||||
nativePlatforms = linux;
|
nativePlatforms = linux;
|
||||||
|
|
||||||
/* Basic list of packages to cross-build */
|
/* Basic list of packages to cross-build */
|
||||||
@ -20,39 +22,68 @@ let
|
|||||||
basic = basicCrossDrv // basicNativeDrv;
|
basic = basicCrossDrv // basicNativeDrv;
|
||||||
|
|
||||||
in
|
in
|
||||||
(
|
|
||||||
|
|
||||||
/* Test some cross builds to the Sheevaplug */
|
{
|
||||||
let
|
# These `nativeDrv`s should be identical to their vanilla ones --- cross
|
||||||
crossSystem = {
|
# compiling should not affect the native derivation.
|
||||||
config = "armv5tel-unknown-linux-gnueabi";
|
ensureUnaffected = let
|
||||||
bigEndian = false;
|
# Absurd values are fine here, as we are not building anything. In fact,
|
||||||
arch = "arm";
|
# there probably a good idea to try to be "more parametric" --- i.e. avoid
|
||||||
float = "soft";
|
# any special casing.
|
||||||
withTLS = true;
|
crossSystem = {
|
||||||
platform = pkgs.platforms.sheevaplug;
|
config = "foosys";
|
||||||
libc = "glibc";
|
libc = "foolibc";
|
||||||
openssl.system = "linux-generic32";
|
};
|
||||||
|
|
||||||
|
# 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 */
|
/* Test some cross builds to the Sheevaplug */
|
||||||
let
|
crossSheevaplugLinux = let
|
||||||
crossSystem = {
|
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";
|
config = "i686-w64-mingw32";
|
||||||
arch = "x86"; # Irrelevant
|
arch = "x86"; # Irrelevant
|
||||||
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
|
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
|
||||||
platform = {};
|
platform = {};
|
||||||
};
|
};
|
||||||
in {
|
in mapTestOnCross crossSystem {
|
||||||
crossMingw32 = mapTestOnCross crossSystem {
|
|
||||||
coreutils.crossDrv = nativePlatforms;
|
coreutils.crossDrv = nativePlatforms;
|
||||||
boehmgc.crossDrv = nativePlatforms;
|
boehmgc.crossDrv = nativePlatforms;
|
||||||
gmp.crossDrv = nativePlatforms;
|
gmp.crossDrv = nativePlatforms;
|
||||||
@ -62,19 +93,18 @@ in {
|
|||||||
libunistring.crossDrv = nativePlatforms;
|
libunistring.crossDrv = nativePlatforms;
|
||||||
windows.wxMSW.crossDrv = nativePlatforms;
|
windows.wxMSW.crossDrv = nativePlatforms;
|
||||||
};
|
};
|
||||||
}) // (
|
|
||||||
|
|
||||||
/* Test some cross builds on 64 bit mingw-w64 */
|
|
||||||
let
|
/* Test some cross builds on 64 bit mingw-w64 */
|
||||||
crossSystem = {
|
crossMingwW64 = let
|
||||||
|
crossSystem = {
|
||||||
# That's the triplet they use in the mingw-w64 docs.
|
# That's the triplet they use in the mingw-w64 docs.
|
||||||
config = "x86_64-w64-mingw32";
|
config = "x86_64-w64-mingw32";
|
||||||
arch = "x86_64"; # Irrelevant
|
arch = "x86_64"; # Irrelevant
|
||||||
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
|
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
|
||||||
platform = {};
|
platform = {};
|
||||||
};
|
};
|
||||||
in {
|
in mapTestOnCross crossSystem {
|
||||||
crossMingwW64 = mapTestOnCross crossSystem {
|
|
||||||
coreutils.crossDrv = nativePlatforms;
|
coreutils.crossDrv = nativePlatforms;
|
||||||
boehmgc.crossDrv = nativePlatforms;
|
boehmgc.crossDrv = nativePlatforms;
|
||||||
gmp.crossDrv = nativePlatforms;
|
gmp.crossDrv = nativePlatforms;
|
||||||
@ -84,63 +114,60 @@ in {
|
|||||||
libunistring.crossDrv = nativePlatforms;
|
libunistring.crossDrv = nativePlatforms;
|
||||||
windows.wxMSW.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;
|
coreutils.crossDrv = nativePlatforms;
|
||||||
ed.crossDrv = nativePlatforms;
|
ed.crossDrv = nativePlatforms;
|
||||||
patch.crossDrv = nativePlatforms;
|
patch.crossDrv = nativePlatforms;
|
||||||
};
|
};
|
||||||
}) // (
|
|
||||||
|
|
||||||
/* Linux on Raspberrypi */
|
|
||||||
let
|
/* Linux on Raspberrypi */
|
||||||
crossSystem = {
|
rpi = let
|
||||||
config = "armv6l-unknown-linux-gnueabi";
|
crossSystem = {
|
||||||
bigEndian = false;
|
config = "armv6l-unknown-linux-gnueabi";
|
||||||
arch = "arm";
|
bigEndian = false;
|
||||||
float = "hard";
|
arch = "arm";
|
||||||
fpu = "vfp";
|
float = "hard";
|
||||||
withTLS = true;
|
|
||||||
libc = "glibc";
|
|
||||||
platform = pkgs.platforms.raspberrypi;
|
|
||||||
openssl.system = "linux-generic32";
|
|
||||||
gcc = {
|
|
||||||
arch = "armv6";
|
|
||||||
fpu = "vfp";
|
fpu = "vfp";
|
||||||
float = "softfp";
|
withTLS = true;
|
||||||
abi = "aapcs-linux";
|
libc = "glibc";
|
||||||
|
platform = pkgs.platforms.raspberrypi;
|
||||||
|
openssl.system = "linux-generic32";
|
||||||
|
gcc = {
|
||||||
|
arch = "armv6";
|
||||||
|
fpu = "vfp";
|
||||||
|
float = "softfp";
|
||||||
|
abi = "aapcs-linux";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
in mapTestOnCross crossSystem {
|
||||||
in {
|
|
||||||
rpi = mapTestOnCross crossSystem {
|
|
||||||
coreutils.crossDrv = nativePlatforms;
|
coreutils.crossDrv = nativePlatforms;
|
||||||
ed.crossDrv = nativePlatforms;
|
ed.crossDrv = nativePlatforms;
|
||||||
patch.crossDrv = nativePlatforms;
|
patch.crossDrv = nativePlatforms;
|
||||||
@ -152,13 +179,12 @@ in {
|
|||||||
binutils.crossDrv = nativePlatforms;
|
binutils.crossDrv = nativePlatforms;
|
||||||
mpg123.crossDrv = nativePlatforms;
|
mpg123.crossDrv = nativePlatforms;
|
||||||
};
|
};
|
||||||
}) // (
|
|
||||||
|
|
||||||
/* Cross-built bootstrap tools for every supported platform */
|
|
||||||
let
|
/* Cross-built bootstrap tools for every supported platform */
|
||||||
tools = import ../stdenv/linux/make-bootstrap-tools-cross.nix { system = "x86_64-linux"; };
|
bootstrapTools = let
|
||||||
maintainers = [ pkgs.lib.maintainers.dezgeg ];
|
tools = import ../stdenv/linux/make-bootstrap-tools-cross.nix { system = "x86_64-linux"; };
|
||||||
mkBootstrapToolsJob = bt: hydraJob' (pkgs.lib.addMetaAttrs { inherit maintainers; } bt.dist);
|
maintainers = [ pkgs.lib.maintainers.dezgeg ];
|
||||||
in {
|
mkBootstrapToolsJob = bt: hydraJob' (pkgs.lib.addMetaAttrs { inherit maintainers; } bt.dist);
|
||||||
bootstrapTools = pkgs.lib.mapAttrs (name: mkBootstrapToolsJob) tools;
|
in pkgs.lib.mapAttrs (name: mkBootstrapToolsJob) tools;
|
||||||
})
|
}
|
||||||
|
@ -46,23 +46,23 @@ rec {
|
|||||||
interested in the result of cross building a package. */
|
interested in the result of cross building a package. */
|
||||||
crossMaintainers = [ maintainers.viric ];
|
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'
|
/* Build a package on the given set of platforms. The function `f'
|
||||||
is called for each supported platform with Nixpkgs for that
|
is called for each supported platform with Nixpkgs for that
|
||||||
platform as an argument . We return an attribute set containing
|
platform as an argument . We return an attribute set containing
|
||||||
a derivation for each supported platform, i.e. ‘{ x86_64-linux =
|
a derivation for each supported platform, i.e. ‘{ x86_64-linux =
|
||||||
f pkgs_x86_64_linux; i686-linux = f pkgs_i686_linux; ... }’. */
|
f pkgs_x86_64_linux; i686-linux = f pkgs_i686_linux; ... }’. */
|
||||||
testOn = systems: f: genAttrs
|
testOn = systems: f: forAllSupportedSystems systems
|
||||||
(filter (x: elem x supportedSystems) systems) (system: hydraJob' (f (pkgsFor system)));
|
(system: hydraJob' (f (pkgsFor system)));
|
||||||
|
|
||||||
|
|
||||||
/* Similar to the testOn function, but with an additional
|
/* Similar to the testOn function, but with an additional
|
||||||
'crossSystem' parameter for allPackages, defining the target
|
'crossSystem' parameter for allPackages, defining the target
|
||||||
platform for cross builds. */
|
platform for cross builds. */
|
||||||
testOnCross = crossSystem: systems: f: {system ? builtins.currentSystem}:
|
testOnCross = crossSystem: systems: f: forAllSupportedSystems systems
|
||||||
if elem system systems
|
(system: hydraJob' (f (allPackages { inherit system crossSystem; })));
|
||||||
then f (allPackages { inherit system crossSystem; })
|
|
||||||
else {};
|
|
||||||
|
|
||||||
|
|
||||||
/* Given a nested set where the leaf nodes are lists of platforms,
|
/* Given a nested set where the leaf nodes are lists of platforms,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user