at 16.09-beta 74 lines 2.0 kB view raw
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}