linux_latest: optionally build Linux 6.7 and onwards with rust support
With the current patching situation around enabling Linux to build with whatever rustc/bindgen version we have in nixpkgs, it feels like supporting a Rust-by-default build at this time is not fully justified. Co-authored-by: Julian Stecklina <julian.stecklina@cyberus-technology.de>
This commit is contained in:
parent
cc34adbe66
commit
8a5f6594da
3 changed files with 46 additions and 20 deletions
|
@ -380,6 +380,16 @@ let
|
|||
DRM_VC4_HDMI_CEC = yes;
|
||||
};
|
||||
|
||||
# Enables Rust support in the Linux kernel. This is currently not enabled by default, because it occasionally requires
|
||||
# patching the Linux kernel for the specific Rust toolchain in nixpkgs. These patches usually take a bit
|
||||
# of time to appear and this would hold up Linux kernel and Rust toolchain updates.
|
||||
#
|
||||
# Once Rust in the kernel has more users, we can reconsider enabling it by default.
|
||||
rust = optionalAttrs ((features.rust or false) && versionAtLeast version "6.7") {
|
||||
RUST = yes;
|
||||
GCC_PLUGINS = no;
|
||||
};
|
||||
|
||||
sound = {
|
||||
SND_DYNAMIC_MINORS = yes;
|
||||
SND_AC97_POWER_SAVE = yes; # AC97 Power-Saving Mode
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
, pahole
|
||||
, lib
|
||||
, stdenv
|
||||
, rustc
|
||||
, rustPlatform
|
||||
, rust-bindgen
|
||||
|
||||
, # The kernel source tarball.
|
||||
src
|
||||
|
@ -117,6 +120,8 @@ let
|
|||
map ({extraConfig ? "", ...}: extraConfig) kernelPatches;
|
||||
in lib.concatStringsSep "\n" ([baseConfigStr] ++ configFromPatches);
|
||||
|
||||
withRust = ((configfile.moduleStructuredConfig.settings.RUST or {}).tristate or null) == "y";
|
||||
|
||||
configfile = stdenv.mkDerivation {
|
||||
inherit ignoreConfigErrors autoModules preferBuiltin kernelArch extraMakeFlags;
|
||||
pname = "linux-config";
|
||||
|
@ -130,7 +135,11 @@ let
|
|||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
nativeBuildInputs = [ perl gmp libmpc mpfr ]
|
||||
++ lib.optionals (lib.versionAtLeast version "4.16") [ bison flex ]
|
||||
++ lib.optional (lib.versionAtLeast version "5.2") pahole;
|
||||
++ lib.optional (lib.versionAtLeast version "5.2") pahole
|
||||
++ lib.optionals withRust [ rust-bindgen rustc ]
|
||||
;
|
||||
|
||||
RUST_LIB_SRC = lib.optionalString withRust rustPlatform.rustLibSrc;
|
||||
|
||||
platformName = stdenv.hostPlatform.linux-kernel.name;
|
||||
# e.g. "defconfig"
|
||||
|
@ -202,7 +211,7 @@ let
|
|||
inherit kernelPatches randstructSeed extraMakeFlags extraMeta configfile;
|
||||
pos = builtins.unsafeGetAttrPos "version" args;
|
||||
|
||||
config = { CONFIG_MODULES = "y"; CONFIG_FW_LOADER = "m"; };
|
||||
config = { CONFIG_MODULES = "y"; CONFIG_FW_LOADER = "m"; } // lib.optionalAttrs withRust { CONFIG_RUST = "y"; };
|
||||
} // lib.optionalAttrs (modDirVersion != null) { inherit modDirVersion; });
|
||||
|
||||
passthru = basicArgs // {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{ lib, stdenv, buildPackages, runCommand, nettools, bc, bison, flex, perl, rsync, gmp, libmpc, mpfr, openssl
|
||||
, libelf, cpio, elfutils, zstd, python3Minimal, zlib, pahole, kmod, ubootTools
|
||||
, fetchpatch
|
||||
, rustc, rust-bindgen, rustPlatform
|
||||
}:
|
||||
|
||||
let
|
||||
|
@ -56,15 +57,6 @@ let
|
|||
inherit (lib)
|
||||
hasAttr getAttr optional optionals optionalString optionalAttrs maintainers platforms;
|
||||
|
||||
# Dependencies that are required to build kernel modules
|
||||
moduleBuildDependencies = [
|
||||
pahole
|
||||
perl
|
||||
libelf
|
||||
# module makefiles often run uname commands to find out the kernel version
|
||||
(buildPackages.deterministic-uname.override { inherit modDirVersion; })
|
||||
] ++ optional (lib.versionAtLeast version "5.13") zstd;
|
||||
|
||||
drvAttrs = config_: kernelConf: kernelPatches: configfile:
|
||||
let
|
||||
config = let attrName = attr: "CONFIG_" + attr; in {
|
||||
|
@ -84,14 +76,27 @@ let
|
|||
} // config_;
|
||||
|
||||
isModular = config.isYes "MODULES";
|
||||
withRust = config.isYes "RUST";
|
||||
|
||||
buildDTBs = kernelConf.DTB or false;
|
||||
|
||||
# Dependencies that are required to build kernel modules
|
||||
moduleBuildDependencies = [
|
||||
pahole
|
||||
perl
|
||||
libelf
|
||||
# module makefiles often run uname commands to find out the kernel version
|
||||
(buildPackages.deterministic-uname.override { inherit modDirVersion; })
|
||||
]
|
||||
++ optional (lib.versionAtLeast version "5.13") zstd
|
||||
++ optionals withRust [ rustc rust-bindgen ]
|
||||
;
|
||||
|
||||
in (optionalAttrs isModular { outputs = [ "out" "dev" ]; }) // {
|
||||
passthru = rec {
|
||||
inherit version modDirVersion config kernelPatches configfile
|
||||
moduleBuildDependencies stdenv;
|
||||
inherit isZen isHardened isLibre;
|
||||
inherit isZen isHardened isLibre withRust;
|
||||
isXen = lib.warn "The isXen attribute is deprecated. All Nixpkgs kernels that support it now have Xen enabled." true;
|
||||
baseVersion = lib.head (lib.splitString "-rc" version);
|
||||
kernelOlder = lib.versionOlder baseVersion;
|
||||
|
@ -100,6 +105,16 @@ let
|
|||
|
||||
inherit src;
|
||||
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
nativeBuildInputs = [ perl bc nettools openssl rsync gmp libmpc mpfr zstd python3Minimal kmod ubootTools ]
|
||||
++ optional (lib.versionOlder version "5.8") libelf
|
||||
++ optionals (lib.versionAtLeast version "4.16") [ bison flex ]
|
||||
++ optionals (lib.versionAtLeast version "5.2") [ cpio pahole zlib ]
|
||||
++ optional (lib.versionAtLeast version "5.8") elfutils
|
||||
++ optionals withRust [ rustc rust-bindgen ];
|
||||
|
||||
RUST_LIB_SRC = lib.optionalString withRust rustPlatform.rustLibSrc;
|
||||
|
||||
patches =
|
||||
map (p: p.patch) kernelPatches
|
||||
# Required for deterministic builds along with some postPatch magic.
|
||||
|
@ -363,14 +378,6 @@ stdenv.mkDerivation ((drvAttrs config stdenv.hostPlatform.linux-kernel kernelPat
|
|||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
nativeBuildInputs = [ perl bc nettools openssl rsync gmp libmpc mpfr zstd python3Minimal kmod ubootTools ]
|
||||
++ optional (lib.versionOlder version "5.8") libelf
|
||||
++ optionals (lib.versionAtLeast version "4.16") [ bison flex ]
|
||||
++ optionals (lib.versionAtLeast version "5.2") [ cpio pahole zlib ]
|
||||
++ optional (lib.versionAtLeast version "5.8") elfutils
|
||||
;
|
||||
|
||||
hardeningDisable = [ "bindnow" "format" "fortify" "stackprotector" "pic" "pie" ];
|
||||
|
||||
# Absolute paths for compilers avoid any PATH-clobbering issues.
|
||||
|
|
Loading…
Reference in a new issue