freebsd.nvidia-drm-kmod{,-firmware}: init

This commit is contained in:
Audrey Dutcher
2025-12-06 22:27:31 -07:00
parent ed5da60e41
commit 6a3eee8721
6 changed files with 278 additions and 0 deletions
@@ -0,0 +1,48 @@
{
lib,
mkDerivation,
fetchurl,
sys,
drm-kmod,
xargs-j,
}:
mkDerivation rec {
path = "...";
pname = "nvidia-driver";
version = "570.124.04";
src = fetchurl {
url = "https://us.download.nvidia.com/XFree86/FreeBSD-x86_64/${version}/NVIDIA-FreeBSD-x86_64-${version}.tar.xz";
hash = "sha256-3FNJPZWg23H/YiUdIfO4KOUZ7BrJ2/xw8LD6MMSEICY=";
};
outputs = [
"out"
"debug"
];
extraNativeBuildInputs = [
xargs-j
];
preConfigure = ''
cd src
'';
makeFlags = [
"BSDSRCTOP=${sys.src}"
"SYSDIR=${sys.src}/sys"
"DRMKMODDIR=${drm-kmod.src}"
"KMODDIR=${builtins.placeholder "out"}/kernel"
"NO_XREF=1"
"DEBUG_FLAGS=-g"
];
hardeningDisable = [
"pic" # generates relocations the linker can't handle
];
env.NIX_CFLAGS_COMPILE_AFTER = "-O0"; # XXX REMOVE
meta.platforms = [ "x86_64-freebsd" ];
meta.license = lib.licenses.unfree;
}
@@ -0,0 +1,36 @@
{
lib,
mkDerivation,
sys,
xargs-j,
kldxref,
nvidia-drm-kmod,
}:
mkDerivation {
path = "...";
pname = "nvidia-drm-kmod-firmware";
inherit (nvidia-drm-kmod) version src;
extraNativeBuildInputs = [
xargs-j
kldxref
];
makeFlags = [
"SYSDIR=${sys.src}/sys"
"KMODDIR=${builtins.placeholder "out"}/kernel"
"NO_XREF=1"
];
hardeningDisable = [
"pic" # generates relocations the linker can't handle
];
preConfigure = ''
cd firmware
'';
meta.platforms = [ "x86_64-freebsd" ];
meta.license = lib.licenses.unfreeRedistributableFirmware;
meta.sourceProvenance = [ lib.sourceTypes.binaryFirmware ];
}
@@ -0,0 +1,77 @@
{
lib,
stdenv,
mkDerivation,
fetchurl,
fetchpatch,
sys,
drm-kmod,
xargs-j,
nvidia-driver,
}:
mkDerivation rec {
path = "...";
pname = "nvidia-drm-kmod";
inherit (nvidia-driver) version src;
outputs = [
"out"
"debug"
];
patches = lib.optionals (lib.versionOlder version "565") [
(fetchpatch {
url = "https://raw.githubusercontent.com/freebsd/freebsd-ports/d07cdab9108a8cf6ab66aa1ff834339f8695f457/graphics/nvidia-drm-61-kmod/files/extra-patch-nvidia-drm-conftest.h";
extraPrefix = "a/src/nvidia-drm";
hash = "sha256-EgzEx1VxQyoNpnY0MnNVa08A0ENSyU/rdRM2hOwUE2g=";
})
] ++ lib.optionals (lib.versionOlder version "555") [
(fetchpatch {
url = "https://raw.githubusercontent.com/freebsd/freebsd-ports/d07cdab9108a8cf6ab66aa1ff834339f8695f457/graphics/nvidia-drm-61-kmod/files/extra-patch-nvidia-drm-freebsd-lkpi.c";
extraPrefix = "a/src/nvidia-drm";
hash = "sha256-aFOs811J5e9Nu8Kwd6dImiSefEOlKlnRp3kg7DTIccg=";
})
];
postPatch = lib.optionalString (lib.versionAtLeast version "570") ''
sed -E -i -e 's:\&nv_drm_fbdev_module_param\, 1\,:\&nv_drm_fbdev_module_param\, 0\,:' src/nvidia-drm/nvidia-drm-freebsd-lkpi.c
sed -E -i -e 's:bool nv_drm_fbdev_module_param = true;:bool nv_drm_fbdev_module_param = false;:' src/nvidia-drm/nvidia-drm-os-interface.c
'' + ''
sed -E -i -e '/DRMKMODDIR.*\/linuxkpi\/dummy\/include/d' src/nvidia-drm/Makefile
mkdir -p $TMP/bin
ln -s ${stdenv.cc}/bin/${stdenv.cc.targetPrefix}nm $TMP/bin/nm
export PATH=$PATH:$TMP/bin
'';
env.NIX_CFLAGS_COMPILE = "-Wno-error=implicit-function-declaration"; # conftests rely on this
env.CONFTEST_BSD_KMODPATHS = "${sys}/kernel ${drm-kmod}/kernel";
extraNativeBuildInputs = [
xargs-j
];
preConfigure = ''
cd src/nvidia-drm
'';
makeFlags = [
"BSDSRCTOP=${sys.src}"
"SYSDIR=${sys.src}/sys"
"DRMKMODDIR=${drm-kmod.src}"
"NO_XREF=1"
"DEBUG_FLAGS=-g"
];
KMODDIR = "${builtins.placeholder "out"}/kernel";
KERN_DEBUGDIR = "${builtins.placeholder "debug"}/lib/debug";
KERN_DEBUGDIR_KODIR = "${KERN_DEBUGDIR}/kernel";
KERN_DEBUGDIR_KMODDIR = "${KERN_DEBUGDIR}/kernel";
hardeningDisable = [
"pic" # generates relocations the linker can't handle
];
meta.platforms = [ "x86_64-freebsd" ];
meta.license = lib.licenses.unfree;
}
@@ -0,0 +1,56 @@
{
mkDerivation,
nvidia-driver,
autoPatchelfHook,
xorg,
freetype,
gtk2,
gtk3,
cairo,
pango,
fontconfig,
glib,
libintl,
libdrm,
libgbm,
}:
mkDerivation {
path = "...";
pname = "nvidia-libs";
inherit (nvidia-driver) src version;
extraNativeBuildInputs = [
autoPatchelfHook
];
buildInputs = [
libdrm
libgbm
gtk2
gtk3
cairo
pango
fontconfig
glib
libintl
freetype
xorg.libXext
xorg.libX11
];
env.LOCALBASE = "${builtins.placeholder "out"}";
env.VKICD_PATH = "${builtins.placeholder "out"}/share/vulkan/icd.d";
env.VKLAYERS_PATH = "${builtins.placeholder "out"}/share/vulkan/implicit_layer.d";
env.EGL_GLVND_JSON_PATH = "${builtins.placeholder "out"}/share/glvnd/egl_vendor.d";
env.EGL_EXTERNAL_PLATFORM_JSON_PATH = "${builtins.placeholder "out"}/share/egl/egl_external_platform.d";
postPatch = ''
substituteInPlace lib/libGLX_nvidia/Makefile \
--replace-fail /usr/share/nvidia $out/share/nvidia \
--replace-fail " '''" ""
'';
dontBuild = true;
installPhase = ''
make -C lib install
'';
}
@@ -0,0 +1,30 @@
{
lib,
mkDerivation,
nvidia-driver,
nvidia-libs,
autoPatchelfHook,
}:
mkDerivation {
path = "...";
pname = "nvidia-nvml";
inherit (nvidia-driver) src version;
extraNativeBuildInputs = [
autoPatchelfHook
];
runtimeDependencies = [ nvidia-libs ];
buildInputs = [ nvidia-libs ];
env.LOCALBASE = "${builtins.placeholder "out"}";
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
make -C nvml install
'';
meta.platforms = [ "x86_64-freebsd" ];
meta.license = lib.licenses.unfree;
}
@@ -0,0 +1,31 @@
{
lib,
mkDerivation,
nvidia-driver,
nvidia-libs,
autoPatchelfHook,
}:
mkDerivation {
path = "...";
pname = "nvidia-x11";
inherit (nvidia-driver) src version;
extraNativeBuildInputs = [
autoPatchelfHook
];
buildInputs = [
nvidia-libs
];
env.LOCALBASE = "${builtins.placeholder "out"}";
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
make -C x11 install
'';
meta.platforms = [ "x86_64-freebsd" ];
meta.license = lib.licenses.unfree;
}