2017-01-14 19:25:01 +00:00
|
|
|
|
|
|
|
{ # The platforms for which we build Nixpkgs.
|
|
|
|
supportedSystems ? [ builtins.currentSystem ]
|
|
|
|
, # Strip most of attributes when evaluating to spare memory usage
|
|
|
|
scrubJobs ? true
|
|
|
|
}:
|
|
|
|
|
|
|
|
with import ./release-lib.nix { inherit supportedSystems scrubJobs; };
|
|
|
|
|
2010-03-09 14:14:30 +00:00
|
|
|
let
|
2017-01-15 19:06:35 +00:00
|
|
|
inherit (pkgs) lib;
|
2016-12-25 18:50:53 +00:00
|
|
|
|
2010-03-09 14:14:30 +00:00
|
|
|
nativePlatforms = linux;
|
|
|
|
|
|
|
|
/* Basic list of packages to cross-build */
|
2012-12-28 18:42:10 +00:00
|
|
|
basicCrossDrv = {
|
2010-09-02 20:18:04 +01:00
|
|
|
gccCrossStageFinal = nativePlatforms;
|
2012-12-28 18:08:19 +00:00
|
|
|
bison.crossDrv = nativePlatforms;
|
|
|
|
busybox.crossDrv = nativePlatforms;
|
|
|
|
coreutils.crossDrv = nativePlatforms;
|
|
|
|
dropbear.crossDrv = nativePlatforms;
|
2010-03-09 14:14:30 +00:00
|
|
|
};
|
2010-03-09 10:33:31 +00:00
|
|
|
|
2010-03-09 14:14:30 +00:00
|
|
|
/* Basic list of packages to be natively built,
|
|
|
|
but need a crossSystem defined to get meaning */
|
2012-12-28 18:42:10 +00:00
|
|
|
basicNativeDrv = {
|
2017-01-14 21:39:03 +00:00
|
|
|
gdbCross.nativeDrv = nativePlatforms;
|
2010-03-09 14:14:30 +00:00
|
|
|
};
|
|
|
|
|
2012-12-28 18:42:10 +00:00
|
|
|
basic = basicCrossDrv // basicNativeDrv;
|
2010-03-09 14:14:30 +00:00
|
|
|
|
|
|
|
in
|
2010-03-09 10:33:31 +00:00
|
|
|
|
2016-12-25 16:11:12 +00:00
|
|
|
{
|
2016-12-25 18:50:53 +00:00
|
|
|
# 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;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2016-12-25 16:11:12 +00:00
|
|
|
/* 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;
|
|
|
|
});
|
2010-03-09 14:14:30 +00:00
|
|
|
|
2010-03-09 10:33:31 +00:00
|
|
|
|
2016-12-25 16:11:12 +00:00
|
|
|
/* Test some cross builds on 32 bit mingw-w64 */
|
|
|
|
crossMingw32 = let
|
|
|
|
crossSystem = {
|
2014-03-03 21:31:18 +00:00
|
|
|
config = "i686-w64-mingw32";
|
|
|
|
arch = "x86"; # Irrelevant
|
2010-05-06 19:47:35 +01:00
|
|
|
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
|
|
|
|
platform = {};
|
2016-12-25 16:11:12 +00:00
|
|
|
};
|
|
|
|
in mapTestOnCross crossSystem {
|
2012-12-28 18:08:19 +00:00
|
|
|
coreutils.crossDrv = nativePlatforms;
|
|
|
|
boehmgc.crossDrv = nativePlatforms;
|
|
|
|
gmp.crossDrv = nativePlatforms;
|
|
|
|
guile_1_8.crossDrv = nativePlatforms;
|
|
|
|
libffi.crossDrv = nativePlatforms;
|
|
|
|
libtool.crossDrv = nativePlatforms;
|
|
|
|
libunistring.crossDrv = nativePlatforms;
|
|
|
|
windows.wxMSW.crossDrv = nativePlatforms;
|
2010-05-06 19:47:35 +01:00
|
|
|
};
|
2010-05-12 16:46:55 +01:00
|
|
|
|
2016-12-25 16:11:12 +00:00
|
|
|
|
|
|
|
/* Test some cross builds on 64 bit mingw-w64 */
|
|
|
|
crossMingwW64 = let
|
|
|
|
crossSystem = {
|
2014-03-03 21:31:18 +00:00
|
|
|
# That's the triplet they use in the mingw-w64 docs.
|
2012-05-24 23:07:23 +01:00
|
|
|
config = "x86_64-w64-mingw32";
|
|
|
|
arch = "x86_64"; # Irrelevant
|
|
|
|
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
|
|
|
|
platform = {};
|
2016-12-25 16:11:12 +00:00
|
|
|
};
|
|
|
|
in mapTestOnCross crossSystem {
|
2012-12-28 18:08:19 +00:00
|
|
|
coreutils.crossDrv = nativePlatforms;
|
|
|
|
boehmgc.crossDrv = nativePlatforms;
|
|
|
|
gmp.crossDrv = nativePlatforms;
|
|
|
|
guile_1_8.crossDrv = nativePlatforms;
|
|
|
|
libffi.crossDrv = nativePlatforms;
|
|
|
|
libtool.crossDrv = nativePlatforms;
|
|
|
|
libunistring.crossDrv = nativePlatforms;
|
|
|
|
windows.wxMSW.crossDrv = nativePlatforms;
|
2012-05-24 23:07:23 +01:00
|
|
|
};
|
|
|
|
|
2010-09-02 19:41:48 +01:00
|
|
|
|
2016-12-25 16:11:12 +00:00
|
|
|
/* 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 {
|
2012-12-28 18:08:19 +00:00
|
|
|
coreutils.crossDrv = nativePlatforms;
|
|
|
|
ed.crossDrv = nativePlatforms;
|
|
|
|
patch.crossDrv = nativePlatforms;
|
2010-09-02 19:41:48 +01:00
|
|
|
};
|
|
|
|
|
2016-12-25 16:11:12 +00:00
|
|
|
|
|
|
|
/* Linux on Raspberrypi */
|
|
|
|
rpi = let
|
|
|
|
crossSystem = {
|
|
|
|
config = "armv6l-unknown-linux-gnueabi";
|
|
|
|
bigEndian = false;
|
|
|
|
arch = "arm";
|
|
|
|
float = "hard";
|
2013-05-25 23:11:13 +01:00
|
|
|
fpu = "vfp";
|
2016-12-25 16:11:12 +00:00
|
|
|
withTLS = true;
|
|
|
|
libc = "glibc";
|
|
|
|
platform = pkgs.platforms.raspberrypi;
|
|
|
|
openssl.system = "linux-generic32";
|
|
|
|
gcc = {
|
|
|
|
arch = "armv6";
|
|
|
|
fpu = "vfp";
|
|
|
|
float = "softfp";
|
|
|
|
abi = "aapcs-linux";
|
|
|
|
};
|
2013-05-25 23:11:13 +01:00
|
|
|
};
|
2016-12-25 16:11:12 +00:00
|
|
|
in mapTestOnCross crossSystem {
|
2012-12-28 18:08:19 +00:00
|
|
|
coreutils.crossDrv = nativePlatforms;
|
|
|
|
ed.crossDrv = nativePlatforms;
|
|
|
|
patch.crossDrv = nativePlatforms;
|
|
|
|
vim.crossDrv = nativePlatforms;
|
2013-05-26 11:54:13 +01:00
|
|
|
unzip.crossDrv = nativePlatforms;
|
|
|
|
ddrescue.crossDrv = nativePlatforms;
|
2012-12-28 18:08:19 +00:00
|
|
|
lynx.crossDrv = nativePlatforms;
|
|
|
|
patchelf.crossDrv = nativePlatforms;
|
|
|
|
binutils.crossDrv = nativePlatforms;
|
|
|
|
mpg123.crossDrv = nativePlatforms;
|
2010-09-02 19:41:48 +01:00
|
|
|
};
|
2016-07-17 22:04:51 +01:00
|
|
|
|
2016-12-25 16:11:12 +00:00
|
|
|
|
|
|
|
/* Cross-built bootstrap tools for every supported platform */
|
|
|
|
bootstrapTools = let
|
|
|
|
tools = import ../stdenv/linux/make-bootstrap-tools-cross.nix { system = "x86_64-linux"; };
|
2017-01-15 19:06:35 +00:00
|
|
|
maintainers = [ lib.maintainers.dezgeg ];
|
|
|
|
mkBootstrapToolsJob = drv: hydraJob' (lib.addMetaAttrs { inherit maintainers; } drv);
|
|
|
|
in lib.mapAttrsRecursiveCond (as: !lib.isDerivation as) (name: mkBootstrapToolsJob) tools;
|
2016-12-25 16:11:12 +00:00
|
|
|
}
|