From d3e6c8fc751a9be31e0f68400c835ac1534aaabb Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 6 Oct 2024 16:48:44 +0200 Subject: [PATCH] linux: implement `rustAvailable` condition * It doesn't matter if `rustc` is available, but if rustc can compile to the hostPlatform. So use a custom condition instead of `availableOn`. * Explicitly exclude the combination of GCC and riscv which is known to be broken[1]. [1] https://lore.kernel.org/lkml/31885EDD-EF6D-4EF1-94CA-276BA7A340B7@kernel.org/T/ Co-authored-by: Alyssa Ross --- pkgs/os-specific/linux/kernel/common-config.nix | 3 ++- pkgs/os-specific/linux/kernel/generic.nix | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/kernel/common-config.nix b/pkgs/os-specific/linux/kernel/common-config.nix index e60513b57095..523bcb63d1e6 100644 --- a/pkgs/os-specific/linux/kernel/common-config.nix +++ b/pkgs/os-specific/linux/kernel/common-config.nix @@ -11,6 +11,7 @@ # Configuration { lib, stdenv, version +, rustAvailable , features ? {} }: @@ -34,7 +35,7 @@ let # Currently only enabling Rust by default on kernel 6.12+, # which actually has features that use Rust that we want. - defaultRust = lib.versionAtLeast version "6.12" && (stdenv.hostPlatform.isx86_64 || stdenv.hostPlatform.isAarch64); + defaultRust = lib.versionAtLeast version "6.12" && rustAvailable; withRust = (forceRust || defaultRust) && kernelSupportsRust; options = { diff --git a/pkgs/os-specific/linux/kernel/generic.nix b/pkgs/os-specific/linux/kernel/generic.nix index fdfc78235226..49c9594f8f7f 100644 --- a/pkgs/os-specific/linux/kernel/generic.nix +++ b/pkgs/os-specific/linux/kernel/generic.nix @@ -108,6 +108,11 @@ let commonStructuredConfig = import ./common-config.nix { inherit lib stdenv version; + rustAvailable = + lib.any (lib.meta.platformMatch stdenv.hostPlatform) rustc.targetPlatforms + && lib.all (p: !lib.meta.platformMatch stdenv.hostPlatform p) rustc.badTargetPlatforms + # Known to be broken: https://lore.kernel.org/lkml/31885EDD-EF6D-4EF1-94CA-276BA7A340B7@kernel.org/T/ + && !(stdenv.hostPlatform.isRiscV && stdenv.cc.isGNU); features = kernelFeatures; # Ensure we know of all extra patches, etc. };