Merge pull request #107214 from Ericson2314/linux-config-cleanup
lib: Clean up how linux and gcc config is specified
This commit is contained in:
@@ -42,7 +42,7 @@
|
||||
# symbolic name and `patch' is the actual patch. The patch may
|
||||
# optionally be compressed with gzip or bzip2.
|
||||
kernelPatches ? []
|
||||
, ignoreConfigErrors ? stdenv.hostPlatform.platform.name != "pc" ||
|
||||
, ignoreConfigErrors ? stdenv.hostPlatform.linux-kernel.name != "pc" ||
|
||||
stdenv.hostPlatform != stdenv.buildPlatform
|
||||
, extraMeta ? {}
|
||||
|
||||
@@ -51,10 +51,10 @@
|
||||
, isLibre ? false
|
||||
, isHardened ? false
|
||||
|
||||
# easy overrides to stdenv.hostPlatform.platform members
|
||||
, autoModules ? stdenv.hostPlatform.platform.kernelAutoModules
|
||||
, preferBuiltin ? stdenv.hostPlatform.platform.kernelPreferBuiltin or false
|
||||
, kernelArch ? stdenv.hostPlatform.platform.kernelArch
|
||||
# easy overrides to stdenv.hostPlatform.linux-kernel members
|
||||
, autoModules ? stdenv.hostPlatform.linux-kernel.autoModules
|
||||
, preferBuiltin ? stdenv.hostPlatform.linux-kernel.preferBuiltin or false
|
||||
, kernelArch ? stdenv.hostPlatform.linuxArch
|
||||
|
||||
, ...
|
||||
}:
|
||||
@@ -87,7 +87,7 @@ let
|
||||
intermediateNixConfig = configfile.moduleStructuredConfig.intermediateNixConfig
|
||||
# extra config in legacy string format
|
||||
+ extraConfig
|
||||
+ lib.optionalString (stdenv.hostPlatform.platform ? kernelExtraConfig) stdenv.hostPlatform.platform.kernelExtraConfig;
|
||||
+ stdenv.hostPlatform.linux-kernel.extraConfig or "";
|
||||
|
||||
structuredConfigFromPatches =
|
||||
map ({extraStructuredConfig ? {}, ...}: {settings=extraStructuredConfig;}) kernelPatches;
|
||||
@@ -113,11 +113,11 @@ let
|
||||
nativeBuildInputs = [ perl gmp libmpc mpfr ]
|
||||
++ lib.optionals (lib.versionAtLeast version "4.16") [ bison flex ];
|
||||
|
||||
platformName = stdenv.hostPlatform.platform.name;
|
||||
platformName = stdenv.hostPlatform.linux-kernel.name;
|
||||
# e.g. "defconfig"
|
||||
kernelBaseConfig = if defconfig != null then defconfig else stdenv.hostPlatform.platform.kernelBaseConfig;
|
||||
kernelBaseConfig = if defconfig != null then defconfig else stdenv.hostPlatform.linux-kernel.baseConfig;
|
||||
# e.g. "bzImage"
|
||||
kernelTarget = stdenv.hostPlatform.platform.kernelTarget;
|
||||
kernelTarget = stdenv.hostPlatform.linux-kernel.target;
|
||||
|
||||
prePatch = kernel.prePatch + ''
|
||||
# Patch kconfig to print "###" after every question so that
|
||||
|
||||
@@ -64,10 +64,10 @@ let
|
||||
|
||||
commonMakeFlags = [
|
||||
"O=$(buildRoot)"
|
||||
] ++ lib.optionals (stdenv.hostPlatform.platform ? kernelMakeFlags)
|
||||
stdenv.hostPlatform.platform.kernelMakeFlags;
|
||||
] ++ lib.optionals (stdenv.hostPlatform.linux-kernel ? makeFlags)
|
||||
stdenv.hostPlatform.linux-kernel.makeFlags;
|
||||
|
||||
drvAttrs = config_: platform: kernelPatches: configfile:
|
||||
drvAttrs = config_: kernelConf: kernelPatches: configfile:
|
||||
let
|
||||
config = let attrName = attr: "CONFIG_" + attr; in {
|
||||
isSet = attr: hasAttr (attrName attr) config;
|
||||
@@ -171,7 +171,7 @@ let
|
||||
|
||||
buildFlags = [
|
||||
"KBUILD_BUILD_VERSION=1-NixOS"
|
||||
platform.kernelTarget
|
||||
kernelConf.target
|
||||
"vmlinux" # for "perf" and things like that
|
||||
] ++ optional isModular "modules";
|
||||
|
||||
@@ -186,16 +186,16 @@ let
|
||||
'';
|
||||
|
||||
# Some image types need special install targets (e.g. uImage is installed with make uinstall)
|
||||
installTargets = [ (
|
||||
if platform ? kernelInstallTarget then platform.kernelInstallTarget
|
||||
else if platform.kernelTarget == "uImage" then "uinstall"
|
||||
else if platform.kernelTarget == "zImage" || platform.kernelTarget == "Image.gz" then "zinstall"
|
||||
else "install"
|
||||
) ];
|
||||
installTargets = [
|
||||
(kernelConf.installTarget or (
|
||||
/**/ if kernelConf.target == "uImage" then "uinstall"
|
||||
else if kernelConf.target == "zImage" || kernelConf.target == "Image.gz" then "zinstall"
|
||||
else "install"))
|
||||
];
|
||||
|
||||
postInstall = (optionalString installsFirmware ''
|
||||
mkdir -p $out/lib/firmware
|
||||
'') + (if (platform ? kernelDTB && platform.kernelDTB) then ''
|
||||
'') + (if (kernelConf.DTB or false) then ''
|
||||
make $makeFlags "''${makeFlagsArray[@]}" dtbs dtbs_install INSTALL_DTBS_PATH=$out/dtbs
|
||||
'' else "") + (if isModular then ''
|
||||
mkdir -p $dev
|
||||
@@ -300,7 +300,7 @@ in
|
||||
assert (lib.versionAtLeast version "4.14" && lib.versionOlder version "5.8") -> libelf != null;
|
||||
assert lib.versionAtLeast version "5.8" -> elfutils != null;
|
||||
|
||||
stdenv.mkDerivation ((drvAttrs config stdenv.hostPlatform.platform kernelPatches configfile) // {
|
||||
stdenv.mkDerivation ((drvAttrs config stdenv.hostPlatform.linux-kernel kernelPatches configfile) // {
|
||||
pname = "linux";
|
||||
inherit version;
|
||||
|
||||
@@ -308,7 +308,7 @@ stdenv.mkDerivation ((drvAttrs config stdenv.hostPlatform.platform kernelPatches
|
||||
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
nativeBuildInputs = [ perl bc nettools openssl rsync gmp libmpc mpfr gawk zstd ]
|
||||
++ optional (stdenv.hostPlatform.platform.kernelTarget == "uImage") buildPackages.ubootTools
|
||||
++ optional (stdenv.hostPlatform.linux-kernel.target == "uImage") buildPackages.ubootTools
|
||||
++ optional (lib.versionAtLeast version "4.14" && lib.versionOlder version "5.8") libelf
|
||||
# Removed util-linuxMinimal since it should not be a dependency.
|
||||
++ optionals (lib.versionAtLeast version "4.16") [ bison flex ]
|
||||
@@ -322,10 +322,10 @@ stdenv.mkDerivation ((drvAttrs config stdenv.hostPlatform.platform kernelPatches
|
||||
makeFlags = commonMakeFlags ++ [
|
||||
"CC=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
|
||||
"HOSTCC=${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc"
|
||||
"ARCH=${stdenv.hostPlatform.platform.kernelArch}"
|
||||
"ARCH=${stdenv.hostPlatform.linuxArch}"
|
||||
] ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) [
|
||||
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
|
||||
];
|
||||
|
||||
karch = stdenv.hostPlatform.platform.kernelArch;
|
||||
karch = stdenv.hostPlatform.linuxArch;
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user