diff --git a/pkgs/os-specific/linux/msi-ec/default.nix b/pkgs/os-specific/linux/msi-ec/default.nix new file mode 100644 index 000000000000000..a7b4cf725bac515 --- /dev/null +++ b/pkgs/os-specific/linux/msi-ec/default.nix @@ -0,0 +1,52 @@ +{ + stdenv, + lib, + fetchFromGitHub, + linuxPackages, + kernel ? linuxPackages.kernel, +}: +stdenv.mkDerivation { + pname = "msi-ec-kmods"; + version = "0-unstable-2024-09-19"; + + src = fetchFromGitHub { + owner = "BeardOverflow"; + repo = "msi-ec"; + rev = "94c2a45c04a07096e10d7cb1240e1a201a025dc0"; + hash = "sha256-amJUoIf5Sl62BLyHLeam2fzN1s+APoWh2dH5QVfJhCs="; + }; + + dontMakeSourcesWritable = false; + + postPatch = + let + targets = builtins.filter (v: v != "") [ + (lib.strings.optionalString (kernel.kernelOlder "6.2") "older-kernel-patch") + (lib.strings.optionalString (kernel.kernelAtLeast "6.11") "6.11-kernel-patch") + ]; + commands = builtins.map (target: "make ${target}") targets; + in + lib.concatStringsSep "\n" ([ "cp ${./patches/Makefile} ./Makefile" ] ++ commands); + + hardeningDisable = [ "pic" ]; + + makeFlags = kernel.makeFlags ++ [ + "KERNELDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + "INSTALL_MOD_PATH=$(out)" + "ccflags-y+=-Wno-error=incompatible-pointer-types" + ]; + + nativeBuildInputs = kernel.moduleBuildDependencies; + + installTargets = [ "modules_install" ]; + + enableParallelBuilding = true; + + meta = { + description = "Kernel modules for MSI Embedded controller"; + homepage = "https://github.com/m1dugh/msi-ec"; + license = lib.licenses.gpl2; + maintainers = [ lib.maintainers.m1dugh ]; + platforms = lib.platforms.linux; + }; +} diff --git a/pkgs/os-specific/linux/msi-ec/patches/Makefile b/pkgs/os-specific/linux/msi-ec/patches/Makefile new file mode 100644 index 000000000000000..f88fa4022082408 --- /dev/null +++ b/pkgs/os-specific/linux/msi-ec/patches/Makefile @@ -0,0 +1,27 @@ +# Out of the box, the build with this Makefile only works in FHS environments, +# such as on Ubuntu or Debian. On NixOS, you either need to open an FHS +# environment using a Nix shell or build this from a specially crafted Nix +# derivation. +# +# This file follows the conventions written down here: +# https://docs.kernel.org/kbuild/modules.html +# Make it possible to override the kernel src tree location from Nix derivation. +KERNEL ?= $(shell uname -r) +KERNELDIR ?= /lib/modules/$(KERNEL)/build/ +ccflags-y := -std=gnu11 -Wno-declaration-after-statement +.PHONY: default +default: modules +# -m: Build as module. +obj-m = msi-ec.o +.PHONY: modules +modules: + @#"M=": Module source. Special variable of the kernel's main Makefile. + $(MAKE) -C $(KERNELDIR) M=$(PWD) modules +.PHONY: modules_install +modules_install: + $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install +6.11-kernel-patch: + git apply 6.11-kernel.patch + +older-kernel-patch: + git apply older-kernel.patch diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix index 3c00a5693a58b1f..4255d0c036e83cd 100644 --- a/pkgs/top-level/linux-kernels.nix +++ b/pkgs/top-level/linux-kernels.nix @@ -602,6 +602,8 @@ in { nullfs = callPackage ../os-specific/linux/nullfs { }; + msi-ec = callPackage ../os-specific/linux/msi-ec { }; + } // lib.optionalAttrs config.allowAliases { ati_drivers_x11 = throw "ati drivers are no longer supported by any kernel >=4.1"; # added 2021-05-18; hid-nintendo = throw "hid-nintendo was added in mainline kernel version 5.16"; # Added 2023-07-30