diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2017-07-09 15:12:32 -0400 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2017-08-24 11:31:56 -0400 |
commit | 791ce593ce065cf074edf1509ff52ebc69136d9e (patch) | |
tree | 58c0622619eedfbbfcbe82a9180378de4f651f0b /pkgs/os-specific/linux/kernel-headers | |
parent | 9884a3b17a817b4b5aee2ce01a10a08f98653a62 (diff) | |
download | nixpkgs-791ce593ce065cf074edf1509ff52ebc69136d9e.tar nixpkgs-791ce593ce065cf074edf1509ff52ebc69136d9e.tar.gz nixpkgs-791ce593ce065cf074edf1509ff52ebc69136d9e.tar.bz2 nixpkgs-791ce593ce065cf074edf1509ff52ebc69136d9e.tar.lz nixpkgs-791ce593ce065cf074edf1509ff52ebc69136d9e.tar.xz nixpkgs-791ce593ce065cf074edf1509ff52ebc69136d9e.tar.zst nixpkgs-791ce593ce065cf074edf1509ff52ebc69136d9e.zip |
linux-headers: Improve derivation, removing cross arg
- Perl is used at build time, so must be in `nativeBuildInputs`. It's not used at run time so it should not be in `buildInputs`, too. - Don't treat headers like a compiler---use the build and host platforms not host and target. Perhaps that would make sense if every library's headers could be a separate derivation, but since that is not feasible, best to keep the implementation and interface in the same stage. To do this, we used `stdenvNoCC` to get rid of the normal toolchain, and added a dependency for the toolchain targeting the build platform --- `buildPackages.stdenv.cc` --- thus everything is effectively slid a stage black.
Diffstat (limited to 'pkgs/os-specific/linux/kernel-headers')
-rw-r--r-- | pkgs/os-specific/linux/kernel-headers/4.4.nix | 44 |
1 files changed, 19 insertions, 25 deletions
diff --git a/pkgs/os-specific/linux/kernel-headers/4.4.nix b/pkgs/os-specific/linux/kernel-headers/4.4.nix index be6dd847201..716ad799bc6 100644 --- a/pkgs/os-specific/linux/kernel-headers/4.4.nix +++ b/pkgs/os-specific/linux/kernel-headers/4.4.nix @@ -1,19 +1,16 @@ -{ stdenv, fetchurl, perl, cross ? null }: +{ stdenvNoCC, lib, buildPackages +, buildPlatform, hostPlatform +, fetchurl, perl +}: -assert cross == null -> stdenv.isLinux; +assert hostPlatform.isLinux; let - version = "4.4.10"; - - kernelHeadersBaseConfig = - if cross == null - then stdenv.platform.kernelHeadersBaseConfig - else cross.platform.kernelHeadersBaseConfig; - + inherit (hostPlatform.platform) kernelHeadersBaseConfig; in -stdenv.mkDerivation { +stdenvNoCC.mkDerivation { name = "linux-headers-${version}"; src = fetchurl { @@ -21,23 +18,20 @@ stdenv.mkDerivation { sha256 = "1kpjvvd9q9wwr3314q5ymvxii4dv2d27295bzly225wlc552xhja"; }; - targetConfig = if cross != null then cross.config else null; + targetConfig = if hostPlatform != buildPlatform then hostPlatform.config else null; - platform = - if cross != null then cross.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.isArm then "arm" else - if stdenv.platform ? kernelArch then stdenv.platform.kernelArch else - abort "don't know what the kernel include directory is called for this platform"; + platform = hostPlatform.platform.kernelArch or ( + if hostPlatform.system == "i686-linux" then "i386" else + if hostPlatform.system == "x86_64-linux" then "x86_64" else + if hostPlatform.system == "powerpc-linux" then "powerpc" else + if hostPlatform.isArm then "arm" else + abort "don't know what the kernel include directory is called for this platform"); - buildInputs = [perl]; + # It may look odd that we use `stdenvNoCC`, and yet explicit depend on a cc. + # We do this so we have a build->build, not build->host, C compiler. + nativeBuildInputs = [ buildPackages.stdenv.cc perl ]; - extraIncludeDirs = - if cross != null then - (if cross.arch == "powerpc" then ["ppc"] else []) - else if stdenv.system == "powerpc-linux" then ["ppc"] else []; + extraIncludeDirs = lib.optional hostPlatform.isPowerPC ["ppc"]; buildPhase = '' if test -n "$targetConfig"; then @@ -63,7 +57,7 @@ stdenv.mkDerivation { fi ''; - meta = with stdenv.lib; { + meta = with lib; { description = "Header files and scripts for Linux kernel"; license = licenses.gpl2; platforms = platforms.linux; |