Merge pull request #196502 from r-burns/mips-darwin-cross

linuxHeaders: fix darwin -> linux-mips cross-compilation
This commit is contained in:
Ryan Burns 2022-11-06 20:16:49 -08:00 committed by GitHub
commit 5a81fe3684
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 1 deletions

View File

@ -1,11 +1,37 @@
{ stdenvNoCC, lib, buildPackages, fetchurl, perl, elf-header
, bison ? null, flex ? null, python ? null, rsync ? null
, writeTextFile
}:
assert stdenvNoCC.hostPlatform.isAndroid ->
(flex != null && bison != null && python != null && rsync != null);
let
# As part of building a hostPlatform=mips kernel, Linux creates and runs a
# tiny utility `arch/mips/boot/tools/relocs_main.c` for the buildPlatform.
# This utility references a glibc-specific header `byteswap.h`. There is a
# compatibility header in gnulib for most BSDs, but not for Darwin, so we
# synthesize one here.
darwin-endian-h = writeTextFile {
name = "endian-h";
text = ''
#include <byteswap.h>
'';
destination = "/include/endian.h";
};
darwin-byteswap-h = writeTextFile {
name = "byteswap-h";
text = ''
#pragma once
#include <libkern/OSByteOrder.h>
#define bswap_16 OSSwapInt16
#define bswap_32 OSSwapInt32
#define bswap_64 OSSwapInt64
'';
destination = "/include/byteswap.h";
};
makeLinuxHeaders = { src, version, patches ? [] }: stdenvNoCC.mkDerivation {
inherit src;
@ -25,6 +51,10 @@ let
perl elf-header
] ++ lib.optionals stdenvNoCC.hostPlatform.isAndroid [
flex bison python rsync
] ++ lib.optionals (stdenvNoCC.buildPlatform.isDarwin &&
stdenvNoCC.hostPlatform.isMips) [
darwin-endian-h
darwin-byteswap-h
];
extraIncludeDirs = lib.optionals (with stdenvNoCC.hostPlatform; isPower && is32bit && isBigEndian) ["ppc"];

View File

@ -25126,7 +25126,7 @@ with pkgs;
lkl = callPackage ../applications/virtualization/lkl { };
lklWithFirewall = callPackage ../applications/virtualization/lkl { firewallSupport = true; };
inherit (callPackages ../os-specific/linux/kernel-headers { })
inherit (callPackages ../os-specific/linux/kernel-headers { inherit (pkgsBuildBuild) elf-header; })
linuxHeaders makeLinuxHeaders;
linuxHeaders_5_19 = linuxHeaders.overrideAttrs (_: rec {