summaryrefslogtreecommitdiffstats
path: root/pkgs/by-name/bc/bcachefs-tools/kernel-module.nix
blob: 6edee5d4f8bb1a7547f030fe6057b353ec03c6b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
bcachefs-tools:
{
  lib,
  stdenv,
  kernelModuleMakeFlags,
  kernel,
  rustPlatform,
}:

stdenv.mkDerivation {
  pname = "bcachefs";
  version = "${kernel.version}-${bcachefs-tools.version}";

  __structuredAttrs = true;
  strictDeps = true;

  src = bcachefs-tools.dkms;

  postPatch = ''
    substituteInPlace src/fs/bcachefs/Makefile \
      --replace-fail '$(objtree)/vmlinux' '${kernel.dev}/vmlinux'
  '';

  nativeBuildInputs = kernel.moduleBuildDependencies;

  enableParallelBuilding = true;

  makeFlags = kernelModuleMakeFlags ++ [
    "KDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
    "INSTALL_MOD_PATH=${placeholder "out"}"
    "RUST_LIB_SRC=${rustPlatform.rustLibSrc}"
  ];

  installPhase = ''
    runHook preInstall
    make -C ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build M=$(pwd) modules_install "''${makeFlags[@]}" "''${installFlags[@]}"
    runHook postInstall
  '';

  passthru = {
    inherit (bcachefs-tools.passthru) tests;
  };

  meta = {
    description = "out-of-tree bcachefs kernel module";

    inherit (bcachefs-tools.meta)
      homepage
      downloadPage
      license
      maintainers
      platforms
      ;

    broken = !(lib.versionAtLeast kernel.version "6.16" && lib.versionOlder kernel.version "7.4");
  };
}