summaryrefslogtreecommitdiff
path: root/nongnu/packages/nvidia.scm
diff options
context:
space:
mode:
authorHilton Chain <hako@ultrarare.space>2026-03-23 22:00:00 +0800
committerHilton Chain <hako@ultrarare.space>2026-04-03 16:57:37 +0800
commiteb10f9fb30175b59a9ffa957d10ee8d2345bc6c6 (patch)
treef6eccec0056d05eff45d861828ca2fb52d625b07 /nongnu/packages/nvidia.scm
parent944d6f7961f7e0150d88fc9b5b817f1041538b66 (diff)
nongnu: nvidia-driver: Base on nvidia-driver-390.
* nongnu/packages/nvidia.scm (%nvidia-install-plan-390) (%nvidia-install-plan-470, %nvidia-install-plan-580): Delete procedures. (%nvidia-icd-configurations-390, %nvidia-icd-configurations-470) (%nvidia-icd-configurations-580, %nvidia-icd-configurations-590) (%nvidia-icd-configurations-beta): Delete variables. (%nvidia-driver-arguments-390, %nvidia-driver-arguments-470) (%nvidia-driver-arguments-580, %nvidia-driver-arguments-590) (%nvidia-driver-arguments-beta): New procedures to avoid inheriting unpacking phases from binary-package-from-sources. (nvidia-driver-390): Expand definition. (nvidia-driver-470): Base on 390. (nvidia-driver-580): Base on 470. (nvidia-driver-590, nvidia-driver-beta): Base on 580.
Diffstat (limited to 'nongnu/packages/nvidia.scm')
-rw-r--r--nongnu/packages/nvidia.scm647
1 files changed, 341 insertions, 306 deletions
diff --git a/nongnu/packages/nvidia.scm b/nongnu/packages/nvidia.scm
index c0c3b19..c4d1c2a 100644
--- a/nongnu/packages/nvidia.scm
+++ b/nongnu/packages/nvidia.scm
@@ -90,67 +90,6 @@
(string-append out path)
(string-append out base "." arch "." ext)))))
-
-(define (%nvidia-install-plan-390)
- #~'((#$(cond
- ((target-x86-32?) "32")
- (else "."))
- "lib/" #:include-regexp ("^./[^/]+\\.so"))
- #$@(if (target-64bit?)
- '(("." "bin/"
- #:include ("nvidia-cuda-mps-control"
- "nvidia-cuda-mps-server"
- "nvidia-smi"))
- ("." "share/man/man1/"
- #:include ("nvidia-cuda-mps-control.1.gz"
- "nvidia-smi.1.gz"))))
- ("." "lib/nvidia/wine/" #:include-regexp ("_?nvngx.*?\\.dll$"))
- ("." "share/nvidia/" #:include-regexp ("nvidia-application-profiles|nvoptix.bin"))
- ("." "share/egl/egl_external_platform.d/" #:include-regexp ("(gbm|wayland2?|xcb|xlib)\\.json"))
- ("10_nvidia.json" "share/glvnd/egl_vendor.d/")
- ("nvidia-drm-outputclass.conf" "share/X11/xorg.conf.d/")
- ("nvidia.icd" "etc/OpenCL/vendors/")
- ("nvidia_icd.json" "share/vulkan/icd.d/")))
-
-(define (%nvidia-install-plan-470)
- #~`(("nvidia_layers.json" "share/vulkan/implicit_layer.d/")
- ,@#$(%nvidia-install-plan-390)))
-
-(define (%nvidia-install-plan-580)
- #~`(("nvidia-dbus.conf" "share/dbus-1/system.d/")
- ("sandboxutils-filelist.json" "share/nvidia/files.d/")
- #$@(if (target-x86-64?)
- '(("nvidia-pcc" "bin/"))
- '())
- #$@(if (target-x86?)
- '(("nvidia_icd_vksc.json" "etc/vulkansc/icd.d/"))
- '())
- ,@#$(%nvidia-install-plan-470)))
-
-(define %nvidia-icd-configurations-390
- #~'("/etc/OpenCL/vendors/nvidia.icd"
- "/share/egl/egl_external_platform.d/10_nvidia_wayland.json"
- "/share/glvnd/egl_vendor.d/10_nvidia.json"
- "/share/vulkan/icd.d/nvidia_icd.json"))
-
-(define %nvidia-icd-configurations-470
- #~`("/share/vulkan/implicit_layer.d/nvidia_layers.json"
- ,@#$%nvidia-icd-configurations-390))
-
-(define %nvidia-icd-configurations-580
- #~`("/share/egl/egl_external_platform.d/15_nvidia_gbm.json"
- "/share/egl/egl_external_platform.d/20_nvidia_xcb.json"
- "/share/egl/egl_external_platform.d/20_nvidia_xlib.json"
- ,@#$%nvidia-icd-configurations-470))
-
-(define %nvidia-icd-configurations-590
- #~`("/share/egl/egl_external_platform.d/99_nvidia_wayland2.json"
- ,@#$%nvidia-icd-configurations-580))
-
-(define %nvidia-icd-configurations-beta
- #~`("/share/egl/egl_external_platform.d/09_nvidia_wayland2.json"
- ,@#$%nvidia-icd-configurations-580))
-
;;;
;;; NVIDIA driver checkouts
@@ -430,278 +369,374 @@
;;; NVIDIA drivers
;;;
-(define-public nvidia-driver-580
- (binary-package-from-sources
- `(("x86_64-linux" . ,nvidia-source-580-x86_64-linux)
- ("i686-linux" . ,nvidia-source-580-x86_64-linux)
- ("aarch64-linux" . ,nvidia-source-580-aarch64-linux))
- (package
- (name "nvidia-driver")
- (version "")
- (source #f)
- (build-system gnu-build-system)
- (arguments
- (list
- #:imported-modules
- `((guix build copy-build-system)
- ,@%default-gnu-imported-modules)
- #:modules
- `((ice-9 popen)
- (ice-9 rdelim)
- (ice-9 regex)
- (srfi srfi-26)
- ((guix build copy-build-system) #:prefix copy:)
- ,@%default-gnu-modules)
- #:phases
- #~(modify-phases %standard-phases
- (delete 'configure)
- (delete 'build)
- (delete 'check)
- (delete 'strip)
- (replace 'install
- (lambda args
- (apply (assoc-ref copy:%standard-phases 'install)
- #:install-plan #$(%nvidia-install-plan-580)
- args)))
- (add-after 'unpack 'create-misc-files
- (lambda* (#:key inputs #:allow-other-keys)
- ;; EGL external platform configuraiton
- (substitute* (find-files "." "(gbm|wayland2?|xcb|xlib)\\.json")
- (("libnvidia-egl-.*\\.so\\.." all)
- (search-input-file inputs (string-append "lib/" all))))
-
- ;; EGL vendor ICD configuration
- (substitute* "10_nvidia.json"
- (("libEGL_nvidia\\.so\\.." all)
- (string-append #$output "/lib/" all)))
-
- ;; OpenCL vendor ICD configuration
- (substitute* "nvidia.icd"
- (("libnvidia-opencl\\.so\\.." all)
- (string-append #$output "/lib/" all)))
-
- ;; Vulkan ICD & layer configuraiton
- (substitute* (find-files "." "nvidia_(icd|layers)\\.json")
- ;; 390 driver
- (("__NV_VK_ICD__") "libGLX_nvidia.so.0")
- ;; Others
- (("libGLX(_nvidia\\.so\\..)" _ suffix)
- (string-append #$output "/lib/libEGL" suffix))
- (("libnvidia-present\\.so\\.[0-9.]*" all)
- (string-append #$output "/lib/" all)))
-
- ;; VulkanSC ICD configuration
- (substitute* (find-files "." "nvidia_icd_vksc\\.json")
- (("libnvidia-vksc-core\\.so\\.." all)
- (string-append #$output "/lib/" all)))))
- (add-after 'install 'add-architecture-to-filename
- (lambda _
- (for-each #$(add-architecture-to-filename)
- #$%nvidia-icd-configurations-580)))
- (add-after 'install 'patch-elf
- (lambda* (#:key inputs #:allow-other-keys)
- (let* ((ld.so (search-input-file
- inputs #$(glibc-dynamic-linker)))
- (rpath (string-join
- (cons* (dirname ld.so)
- (string-append #$output "/lib")
- (map (lambda (name)
- (dirname
- (search-input-file
- inputs
- (string-append "lib/" name))))
- '("libGL.so.1"
- "libX11.so.6"
- "libXext.so.6"
- "libcrypto.so.1.1"
- "libcrypto.so.3"
- "libdrm.so.2"
- "libgbm.so.1"
- "libgcc_s.so.1"
- "libnvidia-egl-wayland.so.1"
- "libwayland-client.so.0"
- "libxcb.so.1")))
- ":")))
- (define (patch-elf file)
- (format #t "Patching ~a ..." file)
- (unless (string-contains file ".so")
- (invoke "patchelf" "--set-interpreter" ld.so file))
- (invoke "patchelf" "--set-rpath" rpath file)
- (display " done\n"))
-
- (for-each (lambda (file)
- (when (elf-file? file)
- (patch-elf file)))
- (find-files #$output)))))
- (add-before 'patch-elf 'relocate-libraries
- (lambda _
- (let* ((version #$(package-version this-package))
- (libdir (string-append #$output "/lib"))
- (gbmdir (string-append libdir "/gbm"))
- (vdpaudir (string-append libdir "/vdpau"))
- (xorgmoddir (string-append libdir "/xorg/modules"))
- (xorgdrvdir (string-append xorgmoddir "/drivers"))
- (xorgextdir (string-append xorgmoddir "/extensions"))
- (move-to-dir (lambda (file dir)
- (install-file file dir)
- (delete-file file))))
- (for-each
- (lambda (file)
- (mkdir-p gbmdir)
- (with-directory-excursion gbmdir
- (symlink file "nvidia-drm_gbm.so")))
- (find-files libdir "libnvidia-allocator\\.so\\."))
-
- (for-each
- (cut move-to-dir <> vdpaudir)
- (find-files libdir "libvdpau_nvidia\\.so\\."))
-
- (for-each
- (cut move-to-dir <> xorgdrvdir)
- (find-files libdir "nvidia_drv\\.so$"))
-
- (for-each
- (lambda (file)
- (move-to-dir file xorgextdir)
- (with-directory-excursion xorgextdir
- (symlink (basename file)
- "libglxserver_nvidia.so")))
- (find-files libdir "libglxserver_nvidia\\.so\\.")))))
- (add-after 'patch-elf 'create-short-name-symlinks
- (lambda _
- (define (get-soname file)
- (when (elf-file? file)
- (let* ((cmd (string-append "patchelf --print-soname " file))
- (port (open-input-pipe cmd))
- (soname (read-line port)))
- (close-pipe port)
- soname)))
- (for-each
- (lambda (lib)
- (let ((lib-soname (get-soname lib)))
- (when (string? lib-soname)
- (let* ((soname (string-append
- (dirname lib) "/" lib-soname))
- (base (string-append
- (regexp-substitute
- #f (string-match "(.*)\\.so.*" soname) 1)
- ".so"))
- (source (basename lib)))
- (for-each
- (lambda (target)
- (unless (file-exists? target)
- (format #t "Symlinking ~a -> ~a..."
- target source)
- (symlink source target)
- (display " done\n")))
- (list soname base))))))
- (find-files #$output "\\.so\\.")))))))
- (supported-systems '("x86_64-linux" "i686-linux" "aarch64-linux"))
- (native-inputs (list patchelf-0.16))
- (inputs
- (list egl-gbm
- egl-wayland
- egl-wayland2
- egl-x11
- `(,gcc "lib")
- glibc
- mesa-for-nvda
- openssl
- openssl-1.1
- wayland))
- (home-page "https://www.nvidia.com")
- (synopsis "Proprietary NVIDIA driver (libraries)")
- (description
- "This package provides libraries of the proprietary NVIDIA driver. It's
-mainly used as a dependency of other packages. For user-facing purpose, use
-@code{nvda} instead.")
- (license
- (license:nonfree
- (format #f "file:///share/doc/nvidia-driver-~a/LICENSE" version))))))
+;; Avoid inheriting unpacking phases from binary-package-from-sources.
+(define (%nvidia-driver-arguments-390)
+ (list
+ #:imported-modules
+ `((guix build copy-build-system)
+ ,@%default-gnu-imported-modules)
+ #:modules
+ `((ice-9 popen)
+ (ice-9 rdelim)
+ (ice-9 regex)
+ (srfi srfi-26)
+ ((guix build copy-build-system) #:prefix copy:)
+ ,@%default-gnu-modules)
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'configure)
+ (delete 'build)
+ (delete 'check)
+ (delete 'strip)
+ (add-after 'unpack 'create-files
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; EGL external platform configuraiton
+ (substitute* "10_nvidia_wayland.json"
+ (("libnvidia-egl-.*\\.so\\.." all)
+ (search-input-file inputs (in-vicinity "lib" all))))
+ ;; EGL vendor ICD configuration
+ (substitute* "10_nvidia.json"
+ (("libEGL_nvidia\\.so\\." all)
+ (string-append #$output "/lib/" all)))
+ ;; OpenCL vendor ICD configuration
+ (substitute* "nvidia.icd"
+ (("libnvidia-opencl\\.so\\." all)
+ (string-append #$output "/lib/" all)))
+ ;; Vulkan ICD configuraiton
+ (substitute* "nvidia_icd.json"
+ (("__NV_VK_ICD__")
+ (in-vicinity #$output "lib/libGLX_nvidia.so.0")))))
+ (replace 'install
+ (lambda args
+ (apply (assoc-ref copy:%standard-phases 'install)
+ #:install-plan
+ `((#$(if (target-x86-32?) "32" ".") "lib/" #:include-regexp ("^./[^/]+\\.so"))
+ ("." "share/nvidia/" #:include-regexp ("nvidia-application-profiles-.*"))
+ ("." "bin/"
+ #:include
+ ,(if #$(target-64bit?)
+ '("nvidia-cuda-mps-control"
+ "nvidia-cuda-mps-server"
+ "nvidia-smi")
+ '()))
+ ("." "share/man/man1/"
+ #:include
+ ,(if #$(target-64bit?)
+ '("nvidia-cuda-mps-control.1.gz"
+ "nvidia-smi.1.gz")
+ '()))
+ ("10_nvidia_wayland.json" "share/egl/egl_external_platform.d/")
+ ("10_nvidia.json" "share/glvnd/egl_vendor.d/")
+ ("nvidia-drm-outputclass.conf" "share/X11/xorg.conf.d/")
+ ("nvidia.icd" "etc/OpenCL/vendors/")
+ ("nvidia_icd.json" "share/vulkan/icd.d/"))
+ args)))
+ (add-after 'install 'add-architecture
+ (lambda _
+ (for-each
+ #$(add-architecture-to-filename)
+ '("/etc/OpenCL/vendors/nvidia.icd"
+ "/share/egl/egl_external_platform.d/10_nvidia_wayland.json"
+ "/share/glvnd/egl_vendor.d/10_nvidia.json"
+ "/share/vulkan/icd.d/nvidia_icd.json"))))
+ (add-after 'install 'patch-elf
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((ld.so (search-input-file
+ inputs #$(glibc-dynamic-linker)))
+ (rpath (string-join
+ (cons* (dirname ld.so)
+ (string-append #$output "/lib")
+ (map (lambda (name)
+ (dirname
+ (search-input-file
+ inputs (in-vicinity "lib" name))))
+ '("libGL.so.1"
+ "libX11.so.6"
+ "libXext.so.6"
+ "libcrypto.so.1.1"
+ "libcrypto.so.3"
+ "libdrm.so.2"
+ "libgbm.so.1"
+ "libgcc_s.so.1"
+ "libnvidia-egl-wayland.so.1"
+ "libwayland-client.so.0"
+ "libxcb.so.1")))
+ ":"))
+ (patch-elf
+ (lambda (file)
+ (when (elf-file? file)
+ (format #t "Patching ~a ..." file)
+ (unless (string-contains file ".so")
+ (invoke "patchelf" "--set-interpreter" ld.so file))
+ (invoke "patchelf" "--set-rpath" rpath file)
+ (display " done\n")))))
+ (for-each patch-elf (find-files #$output)))))
+ (add-before 'patch-elf 'relocate-libraries
+ (lambda _
+ (let* ((libdir (in-vicinity #$output "lib"))
+ (vdpaudir (in-vicinity libdir "vdpau"))
+ (xorgmoddir (in-vicinity libdir "xorg/modules"))
+ (xorgdrvdir (in-vicinity xorgmoddir "drivers"))
+ (xorgextdir (in-vicinity xorgmoddir "extensions"))
+ (move-to-dir
+ (lambda (file dir)
+ (install-file file dir)
+ (delete-file file))))
+ ;; Driver for X
+ (for-each
+ (cut move-to-dir <> xorgdrvdir)
+ (find-files libdir "nvidia_drv\\.so$"))
+ ;; GLX extension module for X
+ (for-each
+ (cut move-to-dir <> xorgextdir)
+ (find-files libdir "libglx\\.so\\."))
+ ;; X module for wrapped software rendering
+ (for-each
+ (cut move-to-dir <> xorgmoddir)
+ (find-files libdir "libnvidia-wfb\\.so\\."))
+ ;; VDPAU library
+ (for-each
+ (cut move-to-dir <> vdpaudir)
+ (find-files libdir "libvdpau_nvidia\\.so\\.")))))
+ (add-after 'patch-elf 'create-short-name-symlinks
+ (lambda _
+ (define (get-soname file)
+ (when (elf-file? file)
+ (let* ((cmd (string-append "patchelf --print-soname " file))
+ (port (open-input-pipe cmd))
+ (soname (read-line port)))
+ (close-pipe port)
+ soname)))
+ (for-each
+ (lambda (lib)
+ (let ((lib-soname (get-soname lib)))
+ (when (string? lib-soname)
+ (let* ((soname (in-vicinity (dirname lib) lib-soname))
+ (base (string-append
+ (regexp-substitute
+ #f (string-match "(.*)\\.so.*" soname) 1)
+ ".so"))
+ (source (basename lib)))
+ (for-each
+ (lambda (target)
+ (unless (file-exists? target)
+ (format #t "Symlinking ~a -> ~a..." target source)
+ (symlink source target)
+ (display " done\n")))
+ (list soname base))))))
+ (find-files #$output "\\.so\\.")))))))
(define-public nvidia-driver-390
(package
- (inherit nvidia-driver-580)
(name "nvidia-driver")
(version "390.157")
(source (package-source nvidia-source-390-x86_64-linux))
- (arguments
- (substitute-keyword-arguments arguments
- ((#:phases phases)
- #~(modify-phases #$phases
- (replace 'unpack
- (assoc-ref %standard-phases 'unpack))
- (replace 'install
- (lambda args
- (apply (assoc-ref copy:%standard-phases 'install)
- #:install-plan #$(%nvidia-install-plan-390)
- args)))
- (replace 'add-architecture-to-filename
- (lambda _
- (for-each #$(add-architecture-to-filename)
- #$%nvidia-icd-configurations-390)))))))
- (supported-systems '("x86_64-linux" "i686-linux"))))
+ (build-system gnu-build-system)
+ (arguments (%nvidia-driver-arguments-390))
+ (supported-systems '("x86_64-linux" "i686-linux"))
+ (native-inputs (list patchelf-0.16))
+ (inputs
+ (list egl-wayland
+ `(,gcc "lib")
+ glibc
+ mesa-for-nvda
+ openssl
+ openssl-1.1
+ wayland))
+ (home-page "https://www.nvidia.com")
+ (synopsis "Proprietary NVIDIA driver (libraries), legacy 390.xx series")
+ (description
+ "This package provides libraries of the proprietary NVIDIA driver. It's
+mainly used as a dependency of other packages. For user-facing purpose, use
+@code{nvda} instead.")
+ (license
+ (license:nonfree
+ (format #f "file:///share/doc/nvidia-driver-~a/LICENSE" version)))))
+
+(define (%nvidia-driver-arguments-470)
+ (substitute-keyword-arguments (%nvidia-driver-arguments-390)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'create-files 'create-files-470
+ (lambda _
+ ;; Vulkan ICD configuraiton
+ (substitute* "nvidia_icd.json"
+ (("libGLX(_nvidia\\.so\\.)" _ suffix)
+ (string-append #$output "/lib/libEGL" suffix)))
+ ;; Vulkan layer configuraiton
+ (substitute* "nvidia_layers.json"
+ (("libGLX_nvidia\\.so\\." all)
+ (string-append #$output "/lib/" all)))))
+ (add-after 'install 'install-470
+ (lambda args
+ (apply (assoc-ref copy:%standard-phases 'install)
+ #:install-plan
+ '(("." "lib/nvidia/wine/" #:include-regexp ("_?nvngx.*?\\.dll$"))
+ ("nvidia_layers.json" "share/vulkan/implicit_layer.d/"))
+ args)))
+ (add-after 'add-architecture 'add-architecture-470
+ (lambda _
+ (for-each
+ #$(add-architecture-to-filename)
+ '("/share/vulkan/implicit_layer.d/nvidia_layers.json"))))
+ (add-after 'relocate-libraries 'relocate-libraries-470
+ (lambda _
+ (let* ((libdir (in-vicinity #$output "lib"))
+ (xorgextdir (in-vicinity libdir "xorg/modules/extensions"))
+ (move-to-dir
+ (lambda (file dir)
+ (install-file file dir)
+ (delete-file file))))
+ ;; GLX extension module for X
+ (for-each
+ (lambda (file)
+ (move-to-dir file xorgextdir)
+ (with-directory-excursion xorgextdir
+ (symlink (basename file) "libglxserver_nvidia.so")))
+ (find-files libdir "libglxserver_nvidia\\.so\\.")))))))))
(define-public nvidia-driver-470
(binary-package-from-sources
`(("x86_64-linux" . ,nvidia-source-470-x86_64-linux)
- ("i686-linux" . ,nvidia-source-470-x86_64-linux)
("aarch64-linux" . ,nvidia-source-470-aarch64-linux))
(package
- (inherit nvidia-driver-580)
- (name "nvidia-driver")
- (arguments
- (substitute-keyword-arguments arguments
- ((#:phases phases)
- #~(modify-phases #$phases
- (replace 'unpack
- (assoc-ref %standard-phases 'unpack))
- (replace 'install
- (lambda args
- (apply (assoc-ref copy:%standard-phases 'install)
- #:install-plan #$(%nvidia-install-plan-470)
- args)))
- (replace 'add-architecture-to-filename
- (lambda _
- (for-each #$(add-architecture-to-filename)
- #$%nvidia-icd-configurations-470))))))))))
+ (inherit nvidia-driver-390)
+ (arguments (%nvidia-driver-arguments-470))
+ (supported-systems '("x86_64-linux" "i686-linux" "aarch64-linux"))
+ (synopsis "Proprietary NVIDIA driver (libraries), legacy 470.xx series"))))
+
+(define (%nvidia-driver-arguments-580)
+ (substitute-keyword-arguments (%nvidia-driver-arguments-470)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'create-files 'create-files-580
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; EGL external platform configuraiton
+ (substitute* '("15_nvidia_gbm.json"
+ "20_nvidia_xcb.json"
+ "20_nvidia_xlib.json")
+ (("libnvidia-egl-.*\\.so\\.." all)
+ (search-input-file inputs (in-vicinity "lib" all))))
+ ;; Vulkan layer configuraiton
+ (substitute* "nvidia_layers.json"
+ (("libnvidia-present\\.so\\." all)
+ (string-append #$output "/lib/" all)))
+ ;; VulkanSC ICD configuration
+ (substitute* (find-files "." "nvidia_icd_vksc\\.json$")
+ (("libnvidia-vksc-core\\.so\\." all)
+ (string-append #$output "/lib/" all)))))
+ (add-after 'install 'install-580
+ (lambda args
+ (apply (assoc-ref copy:%standard-phases 'install)
+ #:install-plan
+ `(("." "bin/" #:include ,(if #$(target-x86-64?) '("nvidia-pcc") '()))
+ ("." "etc/vulkansc/icd.d/" #:include-regexp ("nvidia_icd_vksc\\.json$"))
+ ("." "share/egl/egl_external_platform.d/"
+ #:include ("15_nvidia_gbm.json"
+ "20_nvidia_xcb.json"
+ "20_nvidia_xlib.json"))
+ ("nvoptix.bin" "share/nvidia/")
+ ("sandboxutils-filelist.json" "share/nvidia/files.d/"))
+ args)))
+ (add-after 'add-architecture 'add-architecture-580
+ (lambda _
+ (for-each
+ #$(add-architecture-to-filename)
+ '("/share/egl/egl_external_platform.d/15_nvidia_gbm.json"
+ "/share/egl/egl_external_platform.d/20_nvidia_xcb.json"
+ "/share/egl/egl_external_platform.d/20_nvidia_xlib.json"))))
+ (add-after 'relocate-libraries 'relocate-libraries-580
+ (lambda _
+ (let* ((libdir (in-vicinity #$output "lib"))
+ (gbmdir (in-vicinity libdir "gbm")))
+ (for-each
+ (lambda (file)
+ (mkdir-p gbmdir)
+ (with-directory-excursion gbmdir
+ (symlink (in-vicinity ".." (basename file))
+ "nvidia-drm_gbm.so")))
+ (find-files libdir "libnvidia-allocator\\.so\\.")))))))))
+
+(define-public nvidia-driver-580
+ (binary-package-from-sources
+ `(("x86_64-linux" . ,nvidia-source-580-x86_64-linux)
+ ("aarch64-linux" . ,nvidia-source-580-aarch64-linux))
+ (package
+ (inherit nvidia-driver-470)
+ (arguments (%nvidia-driver-arguments-580))
+ (inputs
+ (modify-inputs inputs
+ (prepend egl-gbm egl-x11)))
+ (synopsis "Proprietary NVIDIA driver (libraries), production branch"))))
+
+(define (%nvidia-driver-arguments-590)
+ (substitute-keyword-arguments (%nvidia-driver-arguments-580)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'create-files 'create-files-590
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; EGL external platform configuraiton
+ (substitute* "99_nvidia_wayland2.json"
+ (("libnvidia-egl-.*\\.so\\.." all)
+ (search-input-file inputs (in-vicinity "lib" all))))))
+ (add-after 'install 'install-590
+ (lambda args
+ (apply (assoc-ref copy:%standard-phases 'install)
+ #:install-plan
+ '(("99_nvidia_wayland2.json" "share/egl/egl_external_platform.d/"))
+ args)))
+ (add-after 'add-architecture 'add-architecture-590
+ (lambda _
+ (for-each
+ #$(add-architecture-to-filename)
+ '("/share/egl/egl_external_platform.d/99_nvidia_wayland2.json"))))))))
(define-public nvidia-driver-590
(binary-package-from-sources
`(("x86_64-linux" . ,nvidia-source-590-x86_64-linux)
- ("i686-linux" . ,nvidia-source-590-x86_64-linux)
("aarch64-linux" . ,nvidia-source-590-aarch64-linux))
(package
(inherit nvidia-driver-580)
- (arguments
- (substitute-keyword-arguments arguments
- ((#:phases phases)
- #~(modify-phases #$phases
- (replace 'unpack
- (assoc-ref %standard-phases 'unpack))
- (replace 'add-architecture-to-filename
- (lambda _
- (for-each #$(add-architecture-to-filename)
- #$%nvidia-icd-configurations-590))))))))))
+ (arguments (%nvidia-driver-arguments-590))
+ (inputs
+ (modify-inputs inputs
+ (prepend egl-wayland2)))
+ (synopsis "Proprietary NVIDIA driver (libraries), new feature branch"))))
+
+(define (%nvidia-driver-arguments-beta)
+ (substitute-keyword-arguments (%nvidia-driver-arguments-580)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'create-files 'create-files-beta
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; EGL external platform configuraiton
+ (substitute* "09_nvidia_wayland2.json"
+ (("libnvidia-egl-.*\\.so\\.." all)
+ (search-input-file inputs (in-vicinity "lib" all))))))
+ (add-after 'install 'install-beta
+ (lambda args
+ (apply (assoc-ref copy:%standard-phases 'install)
+ #:install-plan
+ '(("09_nvidia_wayland2.json" "share/egl/egl_external_platform.d/"))
+ args)))
+ (add-after 'add-architecture 'add-architecture-beta
+ (lambda _
+ (for-each
+ #$(add-architecture-to-filename)
+ '("/share/egl/egl_external_platform.d/09_nvidia_wayland2.json"))))))))
(define-public nvidia-driver-beta
(binary-package-from-sources
`(("x86_64-linux" . ,nvidia-source-beta-x86_64-linux)
- ("i686-linux" . ,nvidia-source-beta-x86_64-linux)
("aarch64-linux" . ,nvidia-source-beta-aarch64-linux))
(package
(inherit nvidia-driver-580)
(name "nvidia-driver-beta")
- (arguments
- (substitute-keyword-arguments arguments
- ((#:phases phases)
- #~(modify-phases #$phases
- (replace 'unpack
- (assoc-ref %standard-phases 'unpack))
- (replace 'add-architecture-to-filename
- (lambda _
- (for-each #$(add-architecture-to-filename)
- #$%nvidia-icd-configurations-beta))))))))))
+ (arguments (%nvidia-driver-arguments-beta))
+ (inputs
+ (modify-inputs inputs
+ (prepend egl-wayland2)))
+ (synopsis "Proprietary NVIDIA driver (libraries), beta"))))
(define-public nvidia-driver nvidia-driver-580)