b1b7266aa3
Updating the cross-build expressions, adding some flexibility. Updated the linux headers used cross building, as 2.6.28 had bugs on endianness in sparc64. There were, as usual some bugs in gcc. Maybe not many make a cross compiler to ultrasparc. For the record, I could build an ultrasparc kernel with this base nix: import /etc/nixos/nixpkgs/default.nix # The root nixpkgs default.nix { crossSystem = { config = "sparc64-unknown-linux"; bigEndian = true; arch = "sparc64"; float = "soft"; withTLS = true; cpu = "ultrasparc"; }; config = pkgs: { packageOverrides = pkgs : { platform = { name = "sparc64"; kernelHeadersBaseConfig = "sparc64_defconfig"; kernelBaseConfig = "sparc64_defconfig"; kernelArch = "sparc"; kernelAutoModules = false; kernelTarget = "zImage"; uboot = null; }; }; }; } Although it did not boot directly in qemu-system-sparc64: [sparc64] Kernel already loaded Unhandled Exception 0x0000000000000020 PC = 0x0000000000404000 NPC = 0x0000000000404004 svn path=/nixpkgs/trunk/; revision=20269
56 lines
1.5 KiB
Nix
56 lines
1.5 KiB
Nix
{stdenv, fetchurl, perl, cross ? null, platform}:
|
|
|
|
assert cross == null -> stdenv.isLinux;
|
|
|
|
let version = "2.6.32.9"; in
|
|
|
|
stdenv.mkDerivation {
|
|
name = "linux-headers-${version}";
|
|
|
|
src = fetchurl {
|
|
url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2";
|
|
sha256 = "1g6hs7j5kmifb3phbnckdmrnxd0cpqrijnnbry86z26npsh9my7l";
|
|
};
|
|
|
|
targetConfig = if (cross != null) then cross.config else null;
|
|
|
|
platform =
|
|
if cross != null then platform.kernelArch else
|
|
if stdenv.system == "i686-linux" then "i386" else
|
|
if stdenv.system == "x86_64-linux" then "x86_64" else
|
|
if stdenv.system == "powerpc-linux" then "powerpc" else
|
|
if stdenv.system == "armv5tel-linux" then "arm" else
|
|
abort "don't know what the kernel include directory is called for this platform";
|
|
|
|
buildInputs = [perl];
|
|
|
|
extraIncludeDirs =
|
|
if cross != null then
|
|
(if cross.arch == "powerpc" then ["ppc"] else [])
|
|
else if stdenv.system == "powerpc-linux" then ["ppc"] else [];
|
|
|
|
buildPhase = ''
|
|
if test -n "$targetConfig"; then
|
|
export ARCH=$platform
|
|
fi
|
|
make ${platform.kernelHeadersBaseConfig}
|
|
make mrproper headers_check
|
|
'';
|
|
|
|
installPhase = ''
|
|
make INSTALL_HDR_PATH=$out headers_install
|
|
|
|
# Some builds (e.g. KVM) want a kernel.release.
|
|
ensureDir $out/include/config
|
|
echo "${version}-default" > $out/include/config/kernel.release
|
|
'';
|
|
|
|
# !!! hacky
|
|
fixupPhase = ''
|
|
ln -s asm $out/include/asm-$platform
|
|
if test "$platform" = "i386" -o "$platform" = "x86_64"; then
|
|
ln -s asm $out/include/asm-x86
|
|
fi
|
|
'';
|
|
}
|