1{ stdenv, fetchurl, perl, cross ? null }:
2
3assert cross == null -> stdenv.isLinux;
4
5let
6
7 version = "3.18.14";
8
9 kernelHeadersBaseConfig =
10 if cross == null
11 then stdenv.platform.kernelHeadersBaseConfig
12 else cross.platform.kernelHeadersBaseConfig;
13
14in
15
16stdenv.mkDerivation {
17 name = "linux-headers-${version}";
18
19 src = fetchurl {
20 url = "mirror://kernel/linux/kernel/v3.x/linux-${version}.tar.xz";
21 sha256 = "1xh0vvn1l2g1kkg54f0mg0inbpsiqs24ybgsakksmcpcadjgqk1i";
22 };
23
24 targetConfig = if cross != null then cross.config else null;
25
26 platform =
27 if cross != null then cross.platform.kernelArch else
28 if stdenv.system == "i686-linux" then "i386" else
29 if stdenv.system == "x86_64-linux" then "x86_64" else
30 if stdenv.system == "powerpc-linux" then "powerpc" else
31 if stdenv.isArm then "arm" else
32 if stdenv.platform ? kernelArch then stdenv.platform.kernelArch else
33 abort "don't know what the kernel include directory is called for this platform";
34
35 buildInputs = [perl];
36
37 # FIXME needs gcc 4.9 in bootstrap tools
38 hardeningDisable = [ "stackprotector" ];
39
40 extraIncludeDirs =
41 if cross != null then
42 (if cross.arch == "powerpc" then ["ppc"] else [])
43 else if stdenv.system == "powerpc-linux" then ["ppc"] else [];
44
45 buildPhase = ''
46 if test -n "$targetConfig"; then
47 export ARCH=$platform
48 fi
49 make ${kernelHeadersBaseConfig} SHELL=bash
50 make mrproper headers_check SHELL=bash
51 '';
52
53 installPhase = ''
54 make INSTALL_HDR_PATH=$out headers_install
55
56 # Some builds (e.g. KVM) want a kernel.release.
57 mkdir -p $out/include/config
58 echo "${version}-default" > $out/include/config/kernel.release
59 '';
60
61 # !!! hacky
62 fixupPhase = ''
63 ln -s asm $out/include/asm-$platform
64 if test "$platform" = "i386" -o "$platform" = "x86_64"; then
65 ln -s asm $out/include/asm-x86
66 fi
67 '';
68
69 meta = with stdenv.lib; {
70 description = "Header files and scripts for Linux kernel";
71 license = licenses.gpl2;
72 platforms = platforms.linux;
73 };
74}