From 6a3eee872170307c7eb7f68ec1aba7411e267189 Mon Sep 17 00:00:00 2001 From: Audrey Dutcher Date: Thu, 12 Jun 2025 10:35:05 -0700 Subject: [PATCH] freebsd.nvidia-drm-kmod{,-firmware}: init --- .../freebsd/pkgs/nvidia-driver/package.nix | 48 ++++++++++++ .../pkgs/nvidia-drm-kmod-firmware/package.nix | 36 +++++++++ .../freebsd/pkgs/nvidia-drm-kmod/package.nix | 77 +++++++++++++++++++ .../bsd/freebsd/pkgs/nvidia-libs.nix | 56 ++++++++++++++ .../bsd/freebsd/pkgs/nvidia-nvml.nix | 30 ++++++++ .../bsd/freebsd/pkgs/nvidia-x11.nix | 31 ++++++++ 6 files changed, 278 insertions(+) create mode 100644 pkgs/os-specific/bsd/freebsd/pkgs/nvidia-driver/package.nix create mode 100644 pkgs/os-specific/bsd/freebsd/pkgs/nvidia-drm-kmod-firmware/package.nix create mode 100644 pkgs/os-specific/bsd/freebsd/pkgs/nvidia-drm-kmod/package.nix create mode 100644 pkgs/os-specific/bsd/freebsd/pkgs/nvidia-libs.nix create mode 100644 pkgs/os-specific/bsd/freebsd/pkgs/nvidia-nvml.nix create mode 100644 pkgs/os-specific/bsd/freebsd/pkgs/nvidia-x11.nix diff --git a/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-driver/package.nix b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-driver/package.nix new file mode 100644 index 000000000000..1c763d679c0f --- /dev/null +++ b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-driver/package.nix @@ -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; +} diff --git a/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-drm-kmod-firmware/package.nix b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-drm-kmod-firmware/package.nix new file mode 100644 index 000000000000..70f523abd1e7 --- /dev/null +++ b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-drm-kmod-firmware/package.nix @@ -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 ]; +} diff --git a/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-drm-kmod/package.nix b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-drm-kmod/package.nix new file mode 100644 index 000000000000..8e6966e46e94 --- /dev/null +++ b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-drm-kmod/package.nix @@ -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; +} diff --git a/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-libs.nix b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-libs.nix new file mode 100644 index 000000000000..fe15b8e71c56 --- /dev/null +++ b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-libs.nix @@ -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 + ''; +} diff --git a/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-nvml.nix b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-nvml.nix new file mode 100644 index 000000000000..eaf0dbda7e04 --- /dev/null +++ b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-nvml.nix @@ -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; +} diff --git a/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-x11.nix b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-x11.nix new file mode 100644 index 000000000000..84243e4b7a11 --- /dev/null +++ b/pkgs/os-specific/bsd/freebsd/pkgs/nvidia-x11.nix @@ -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; +}