mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-28 01:43:15 +00:00
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
|
||||
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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user