11aa65c28a
I introduce the new nixpkgs parameter "platform", defaulting to "pc", which was before defined as an attribute of nixpkgs. I made the crossSystem nixpkgs attribute set parameter contain its own 'platform'. This allows cross-building a kernel for a given crossSystem.platform in a non-PC platform. The actual native platform can be taken from stdenv.platform, and this way we also avoid the constant passing of 'platform' to packages for platform-dependant builds (kernel, initrd, ...). I will update nixos accordingly to these changes, for non-PC platforms to work. I think we are gaining on flexibility and clearness. I could cross build succesfully an ultrasparc kernel and a mipsel kernel on PC. But since this change, I should be able to do this also in non-PC. Before this change, there was no possibility of distinguishing the "target platform" or the "native build platform" when cross building, being the single "platform" attribute always interpreted as target platform. The platform is a quite relevant attribute set, as it determines the linuxHeaders used (in the case, by now the only one supported, of linux targets). The platform attributes are quite linux centric still. Let's hope for more generality to come. svn path=/nixpkgs/trunk/; revision=20273
44 lines
1.5 KiB
Nix
44 lines
1.5 KiB
Nix
# Create an initial ramdisk containing the closure of the specified
|
|
# file system objects. An initial ramdisk is used during the initial
|
|
# stages of booting a Linux system. It is loaded by the boot loader
|
|
# along with the kernel image. It's supposed to contain everything
|
|
# (such as kernel modules) necessary to allow us to mount the root
|
|
# file system. Once the root file system is mounted, the `real' boot
|
|
# script can be called.
|
|
#
|
|
# An initrd is really just a gzipped cpio archive.
|
|
#
|
|
# Symlinks are created for each top-level file system object. E.g.,
|
|
# `contents = {object = ...; symlink = /init;}' is a typical
|
|
# argument.
|
|
|
|
{stdenv, perl, cpio, contents, ubootChooser}:
|
|
|
|
let
|
|
inputsFun = ubootName : [perl cpio]
|
|
++ stdenv.lib.optional (ubootName != null) [ ubootChooser ubootName ];
|
|
makeUInitrdFun = ubootName : (ubootName != null);
|
|
in
|
|
stdenv.mkDerivation {
|
|
name = "initrd";
|
|
builder = ./make-initrd.sh;
|
|
buildNativeInputs = inputsFun stdenv.platform.uboot;
|
|
|
|
makeUInitrd = makeUInitrdFun stdenv.platform.uboot;
|
|
|
|
# !!! should use XML.
|
|
objects = map (x: x.object) contents;
|
|
symlinks = map (x: x.symlink) contents;
|
|
suffices = map (x: if x ? suffix then x.suffix else "none") contents;
|
|
|
|
# For obtaining the closure of `contents'.
|
|
exportReferencesGraph =
|
|
map (x: [("closure-" + baseNameOf x.symlink) x.object]) contents;
|
|
pathsFromGraph = ./paths-from-graph.pl;
|
|
|
|
crossAttrs = {
|
|
buildNativeInputs = inputsFun stdenv.cross.platform.uboot;
|
|
makeUInitrd = makeUInitrdFun stdenv.cross.platform.uboot;
|
|
};
|
|
}
|