separate cross builds in separate release expression, will add extra jobset

svn path=/nixpkgs/trunk/; revision=20484
This commit is contained in:
Rob Vermaas 2010-03-09 10:33:31 +00:00
parent 8d8e6f7e4c
commit b44af59afb
3 changed files with 213 additions and 207 deletions

View File

@ -0,0 +1,107 @@
with (import ./release-lib.nix);
(
/* 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;
openssl.system = "linux-generic32";
};
nativePlatforms = linux;
in {
crossSheevaplugLinux = mapTestOnCross crossSystem (rec {
bison = nativePlatforms;
tightvnc = nativePlatforms;
#openoffice = nativePlatforms;
wxGTK = nativePlatforms;
#firefox = nativePlatforms;
xorg = {
#xorgserver = nativePlatforms;
};
nixUnstable = linux;
linuxPackages_2_6_32.kernel = linux;
linuxPackages_2_6_33.kernel = linux;
gdbCross = nativePlatforms;
});
}) // (
/* Test some cross builds to the mipsel */
let
crossSystem = {
config = "mipsel-unknown-linux";
bigEndian = false;
arch = "mips";
float = "soft";
withTLS = true;
platform = {
name = "malta";
kernelBaseConfig = "malta_defconfig";
kernelHeadersBaseConfig = "malta_defconfig";
uboot = null;
kernelArch = "mips";
kernelAutoModules = false;
kernelTarget = "vmlinux.bin";
};
openssl.system = "linux-generic32";
};
nativePlatforms = linux;
in {
crossMipselLinux = mapTestOnCross crossSystem (rec {
bison = nativePlatforms;
tightvnc = nativePlatforms;
#openoffice = nativePlatforms;
wxGTK = nativePlatforms;
#firefox = nativePlatforms;
xorg = {
#xorgserver = nativePlatforms;
};
nixUnstable = linux;
linuxPackages_2_6_32.kernel = linux;
linuxPackages_2_6_33.kernel = linux;
gdbCross = nativePlatforms;
});
}) // (
/* Test some cross builds to the ultrasparc */
let
crossSystem = {
config = "sparc64-unknown-linux";
bigEndian = true;
arch = "sparc64";
float = "hard";
withTLS = true;
cpu = "ultrasparc";
platform = {
name = "ultrasparc";
kernelHeadersBaseConfig = "sparc64_defconfig";
kernelBaseConfig = "sparc64_defconfig";
kernelArch = "sparc";
kernelAutoModules = false;
kernelTarget = "zImage";
uboot = null;
};
openssl.system = "linux64-sparcv9";
};
nativePlatforms = linux;
in {
crossUltraSparcLinux = mapTestOnCross crossSystem (rec {
bison = nativePlatforms;
tightvnc = nativePlatforms;
#openoffice = nativePlatforms;
wxGTK = nativePlatforms;
#firefox = nativePlatforms;
xorg = {
#xorgserver = nativePlatforms;
};
nixUnstable = linux;
linuxPackages_2_6_32.kernel = linux;
linuxPackages_2_6_33.kernel = linux;
gdbCross = nativePlatforms;
});
})

View File

@ -0,0 +1,103 @@
rec {
allPackages = import ./all-packages.nix;
pkgs = allPackages {};
/* The working or failing letters for cross builds will be sent only to
the following maintainers, as most package maintainers will not be
interested in the result of cross building a package. */
crossMaintainers = with pkgs.lib.maintainers; [ viric ];
/* Set the Hydra scheduling priority for a job. The default
priority (100) should be used for most jobs. A different
priority should only be used for a few particularly interesting
jobs (in terms of giving feedback to developers), such as stdenv.
*/
prio = level: job: toJob job // { schedulingPriority = level; };
toJob = x: if builtins.isAttrs x then x else
{ type = "job"; systems = x; schedulingPriority = 10; };
/* Perform a job on the given set of platforms. The function `f' is
called by Hydra for each platform, and should return some job
to build on that platform. `f' is passed the Nixpkgs collection
for the platform in question. */
testOn = systems: f: {system ? builtins.currentSystem}:
if pkgs.lib.elem system systems then f (allPackages {inherit system;}) else {};
/* 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 pkgs.lib.elem system systems then f (allPackages {inherit system
crossSystem;}) else {};
/* Map an attribute of the form `foo = [platforms...]' to `testOn
[platforms...] (pkgs: pkgs.foo)'. */
mapTestOn = pkgs.lib.mapAttrsRecursiveCond
(as: !(as ? type && as.type == "job"))
(path: value:
let
job = toJob value;
getPkg = pkgs:
pkgs.lib.addMetaAttrs { schedulingPriority = toString job.schedulingPriority; }
(pkgs.lib.getAttrFromPath path pkgs);
in testOn job.systems getPkg);
/* Similar to the testOn function, but with an additional 'crossSystem'
* parameter for allPackages, defining the target platform for cross builds,
* and triggering the build of the host derivation (cross built - hostDrv). */
mapTestOnCross = crossSystem: pkgs.lib.mapAttrsRecursiveCond
(as: !(as ? type && as.type == "job"))
(path: value:
let
job = toJob value;
getPkg = pkgs: setCrossMaintainers
(pkgs.lib.addMetaAttrs { schedulingPriority = toString job.schedulingPriority; }
(pkgs.lib.getAttrFromPath (path ++ ["hostDrv"]) pkgs));
in testOnCross crossSystem job.systems getPkg);
setCrossMaintainers = pkg: pkg // { meta.maintainers = crossMaintainers; };
/* Find all packages that have a meta.platforms field listing the
supported platforms. */
packagesWithMetaPlatform = attrSet:
if builtins ? tryEval then
let pairs = pkgs.lib.concatMap
(x:
let pair = builtins.tryEval
(let
attrVal = (builtins.getAttr x attrSet);
in
{val=(processPackage attrVal);
attrVal = attrVal;
attrValIsAttrs = builtins.isAttrs attrVal;
});
success = (builtins.tryEval pair.value.attrVal).success;
in
if success && pair.value.attrValIsAttrs &&
pair.value.val != [] then
[{name= x; value=pair.value.val;}] else [])
(builtins.attrNames attrSet);
in
builtins.listToAttrs pairs
else {};
# May fail as much as it wishes, we will catch the error.
processPackage = attrSet:
if attrSet ? recurseForDerivations && attrSet.recurseForDerivations then
packagesWithMetaPlatform attrSet
else
if attrSet ? meta && attrSet.meta ? platforms
then attrSet.meta.platforms
else [];
/* Common platform groups on which to test packages. */
inherit (pkgs.lib.platforms) linux darwin cygwin allBut all mesaPlatforms;
/* Platform groups for specific kinds of applications. */
x11Supported = linux;
gtkSupported = linux;
ghcSupported = linux ++ ["i686-darwin"] ;
}

View File

@ -1,107 +1,6 @@
let
with (import ./release-lib.nix);
allPackages = import ./all-packages.nix;
pkgs = allPackages {};
/* The working or failing letters for cross builds will be sent only to
the following maintainers, as most package maintainers will not be
interested in the result of cross building a package. */
crossMaintainers = with pkgs.lib.maintainers; [ viric ];
/* Set the Hydra scheduling priority for a job. The default
priority (100) should be used for most jobs. A different
priority should only be used for a few particularly interesting
jobs (in terms of giving feedback to developers), such as stdenv.
*/
prio = level: job: toJob job // { schedulingPriority = level; };
toJob = x: if builtins.isAttrs x then x else
{ type = "job"; systems = x; schedulingPriority = 10; };
/* Perform a job on the given set of platforms. The function `f' is
called by Hydra for each platform, and should return some job
to build on that platform. `f' is passed the Nixpkgs collection
for the platform in question. */
testOn = systems: f: {system ? builtins.currentSystem}:
if pkgs.lib.elem system systems then f (allPackages {inherit system;}) else {};
/* 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 pkgs.lib.elem system systems then f (allPackages {inherit system
crossSystem;}) else {};
/* Map an attribute of the form `foo = [platforms...]' to `testOn
[platforms...] (pkgs: pkgs.foo)'. */
mapTestOn = pkgs.lib.mapAttrsRecursiveCond
(as: !(as ? type && as.type == "job"))
(path: value:
let
job = toJob value;
getPkg = pkgs:
pkgs.lib.addMetaAttrs { schedulingPriority = toString job.schedulingPriority; }
(pkgs.lib.getAttrFromPath path pkgs);
in testOn job.systems getPkg);
/* Similar to the testOn function, but with an additional 'crossSystem'
* parameter for allPackages, defining the target platform for cross builds,
* and triggering the build of the host derivation (cross built - hostDrv). */
mapTestOnCross = crossSystem: pkgs.lib.mapAttrsRecursiveCond
(as: !(as ? type && as.type == "job"))
(path: value:
let
job = toJob value;
getPkg = pkgs: setCrossMaintainers
(pkgs.lib.addMetaAttrs { schedulingPriority = toString job.schedulingPriority; }
(pkgs.lib.getAttrFromPath (path ++ ["hostDrv"]) pkgs));
in testOnCross crossSystem job.systems getPkg);
setCrossMaintainers = pkg: pkg // { meta.maintainers = crossMaintainers; };
/* Find all packages that have a meta.platforms field listing the
supported platforms. */
packagesWithMetaPlatform = attrSet:
if builtins ? tryEval then
let pairs = pkgs.lib.concatMap
(x:
let pair = builtins.tryEval
(let
attrVal = (builtins.getAttr x attrSet);
in
{val=(processPackage attrVal);
attrVal = attrVal;
attrValIsAttrs = builtins.isAttrs attrVal;
});
success = (builtins.tryEval pair.value.attrVal).success;
in
if success && pair.value.attrValIsAttrs &&
pair.value.val != [] then
[{name= x; value=pair.value.val;}] else [])
(builtins.attrNames attrSet);
in
builtins.listToAttrs pairs
else {};
# May fail as much as it wishes, we will catch the error.
processPackage = attrSet:
if attrSet ? recurseForDerivations && attrSet.recurseForDerivations then
packagesWithMetaPlatform attrSet
else
if attrSet ? meta && attrSet.meta ? platforms
then attrSet.meta.platforms
else [];
/* Common platform groups on which to test packages. */
inherit (pkgs.lib.platforms) linux darwin cygwin allBut all mesaPlatforms;
/* Platform groups for specific kinds of applications. */
x11Supported = linux;
gtkSupported = linux;
ghcSupported = linux ++ ["i686-darwin"] ;
in {
{
tarball = import ./make-tarball.nix;
@ -699,108 +598,5 @@ in {
xset = linux;
};
} )) // (
} ))
/* 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;
openssl.system = "linux-generic32";
};
nativePlatforms = linux;
in {
crossSheevaplugLinux = mapTestOnCross crossSystem (rec {
bison = nativePlatforms;
tightvnc = nativePlatforms;
#openoffice = nativePlatforms;
wxGTK = nativePlatforms;
#firefox = nativePlatforms;
xorg = {
#xorgserver = nativePlatforms;
};
nixUnstable = linux;
linuxPackages_2_6_32.kernel = linux;
linuxPackages_2_6_33.kernel = linux;
gdbCross = nativePlatforms;
});
}) // (
/* Test some cross builds to the mipsel */
let
crossSystem = {
config = "mipsel-unknown-linux";
bigEndian = false;
arch = "mips";
float = "soft";
withTLS = true;
platform = {
name = "malta";
kernelBaseConfig = "malta_defconfig";
kernelHeadersBaseConfig = "malta_defconfig";
uboot = null;
kernelArch = "mips";
kernelAutoModules = false;
kernelTarget = "vmlinux.bin";
};
openssl.system = "linux-generic32";
};
nativePlatforms = linux;
in {
crossMipselLinux = mapTestOnCross crossSystem (rec {
bison = nativePlatforms;
tightvnc = nativePlatforms;
#openoffice = nativePlatforms;
wxGTK = nativePlatforms;
#firefox = nativePlatforms;
xorg = {
#xorgserver = nativePlatforms;
};
nixUnstable = linux;
linuxPackages_2_6_32.kernel = linux;
linuxPackages_2_6_33.kernel = linux;
gdbCross = nativePlatforms;
});
}) // (
/* Test some cross builds to the ultrasparc */
let
crossSystem = {
config = "sparc64-unknown-linux";
bigEndian = true;
arch = "sparc64";
float = "hard";
withTLS = true;
cpu = "ultrasparc";
platform = {
name = "ultrasparc";
kernelHeadersBaseConfig = "sparc64_defconfig";
kernelBaseConfig = "sparc64_defconfig";
kernelArch = "sparc";
kernelAutoModules = false;
kernelTarget = "zImage";
uboot = null;
};
openssl.system = "linux64-sparcv9";
};
nativePlatforms = linux;
in {
crossUltraSparcLinux = mapTestOnCross crossSystem (rec {
bison = nativePlatforms;
tightvnc = nativePlatforms;
#openoffice = nativePlatforms;
wxGTK = nativePlatforms;
#firefox = nativePlatforms;
xorg = {
#xorgserver = nativePlatforms;
};
nixUnstable = linux;
linuxPackages_2_6_32.kernel = linux;
linuxPackages_2_6_33.kernel = linux;
gdbCross = nativePlatforms;
});
})