summaryrefslogtreecommitdiff
path: root/nongnu/packages
diff options
context:
space:
mode:
authorHilton Chain <hako@ultrarare.space>2026-03-23 08:28:20 +0800
committerHilton Chain <hako@ultrarare.space>2026-04-03 16:57:33 +0800
commit55c4acec3575944d137b2640e525768c0219edc3 (patch)
tree5f79043ad06c0cb8772c35993bb431a1be7e1e47 /nongnu/packages
parent00443073974ea1857e16c6f09d89397fcd8c6aab (diff)
nongnu: nvidia: Add add-architecture-to-filename.
* nongnu/packages/nvidia.scm (add-architecture-to-filename): New procedure. (%nvidia-icd-configurations-580, %nvidia-icd-configurations-590) (%nvidia-icd-configurations-beta): New variables. (nvidia-driver-580, nvidia-driver-470, nvidia-driver-590, mesa-for-nvda) [#:phases]: Use them.
Diffstat (limited to 'nongnu/packages')
-rw-r--r--nongnu/packages/nvidia.scm95
1 files changed, 55 insertions, 40 deletions
diff --git a/nongnu/packages/nvidia.scm b/nongnu/packages/nvidia.scm
index 5fe327e..d05e2c4 100644
--- a/nongnu/packages/nvidia.scm
+++ b/nongnu/packages/nvidia.scm
@@ -74,6 +74,22 @@
;; GSYNC control for Vulkan direct-to-display applications.
"^VKDirectGSYNC(Compatible)?Allowed$"))
+(define (add-architecture-to-filename)
+ #~(lambda (path)
+ (let* ((out #$output)
+ (system #$(or (%current-target-system)
+ (%current-system)))
+ (dash (string-index system #\-))
+ (arch (string-take system dash))
+
+ (dot (string-index-right path #\.))
+ (base (string-take path dot))
+ (ext (string-drop path (+ 1 dot))))
+ ;; <...>/50_mesa.json -> <...>/50_mesa.x86_64.json
+ (rename-file
+ (string-append out path)
+ (string-append out base "." arch "." ext)))))
+
(define %nvidia-unbundle-libraries-580
'(;; egl-gbm
"libnvidia-egl-gbm\\.so\\."
@@ -127,6 +143,24 @@
("nvidia_layers.json" "share/vulkan/implicit_layer.d/")
("sandboxutils-filelist.json" "share/nvidia/files.d/")))
+(define %nvidia-icd-configurations-580
+ #~'("/etc/OpenCL/vendors/nvidia.icd"
+ "/share/egl/egl_external_platform.d/10_nvidia_wayland.json"
+ "/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"
+ "/share/glvnd/egl_vendor.d/10_nvidia.json"
+ "/share/vulkan/icd.d/nvidia_icd.json"
+ "/share/vulkan/implicit_layer.d/nvidia_layers.json"))
+
+(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
@@ -230,30 +264,8 @@
(string-append #$output "/lib/" all)))))
(add-after 'install 'add-architecture-to-filename
(lambda _
- (for-each
- (lambda (path)
- (let* ((out #$output)
- (system #$(or (%current-target-system)
- (%current-system)))
- (dash (string-index system #\-))
- (arch (string-take system dash))
-
- (dot (string-index-right path #\.))
- (base (string-take path dot))
- (ext (string-drop path (+ 1 dot))))
- ;; <...>/nvidia.icd -> <...>/nvidia.x86_64.icd
- ;; <...>/nvidia_icd.json -> <...>/nvidia_icd.x86_64.json
- (rename-file
- (string-append out path)
- (string-append out base "." arch "." ext))))
- '("/etc/OpenCL/vendors/nvidia.icd"
- "/share/egl/egl_external_platform.d/10_nvidia_wayland.json"
- "/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"
- "/share/glvnd/egl_vendor.d/10_nvidia.json"
- "/share/vulkan/icd.d/nvidia_icd.json"
- "/share/vulkan/implicit_layer.d/nvidia_layers.json"))))
+ (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
@@ -387,7 +399,15 @@ mainly used as a dependency of other packages. For user-facing purpose, use
(file-name (string-append "NVIDIA-Linux-x86_64-" version))
(sha256 (base32 "12fnddljvgxksil6n3d5a35wwg8kkq82kkglhz63253qjc3giqmr"))
(modules '((guix build utils)))
- (snippet (make-nvidia-driver-snippet %nvidia-unbundle-libraries-580))))))
+ (snippet (make-nvidia-driver-snippet %nvidia-unbundle-libraries-580))))
+ (arguments
+ (substitute-keyword-arguments arguments
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (replace 'add-architecture-to-filename
+ (lambda _
+ (for-each #$(add-architecture-to-filename)
+ #$%nvidia-icd-configurations-590)))))))))
(define-public nvidia-driver-beta
(package
@@ -403,7 +423,15 @@ mainly used as a dependency of other packages. For user-facing purpose, use
(file-name (string-append "NVIDIA-Linux-x86_64-" version))
(sha256 (base32 "0plg9vsim8252c7k3slxblvrspy4xqa6q719flxjmfkc4i4najfd"))
(modules '((guix build utils)))
- (snippet (make-nvidia-driver-snippet %nvidia-unbundle-libraries-580))))))
+ (snippet (make-nvidia-driver-snippet %nvidia-unbundle-libraries-580))))
+ (arguments
+ (substitute-keyword-arguments arguments
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (replace 'add-architecture-to-filename
+ (lambda _
+ (for-each #$(add-architecture-to-filename)
+ #$%nvidia-icd-configurations-beta)))))))))
(define-public nvidia-driver nvidia-driver-580)
@@ -824,20 +852,7 @@ configuration, application profiles, GPU monitoring and more.")
(add-after 'set-layer-path-in-manifests 'add-architecture-to-filename
(lambda _
(for-each
- (lambda (path)
- (let* ((out #$output)
- (system #$(or (%current-target-system)
- (%current-system)))
- (dash (string-index system #\-))
- (arch (string-take system dash))
-
- (dot (string-index-right path #\.))
- (base (string-take path dot))
- (ext (string-drop path (+ 1 dot))))
- ;; <...>/50_mesa.json -> <...>/50_mesa.x86_64.json
- (rename-file
- (string-append out path)
- (string-append out base "." arch "." ext))))
+ #$(add-architecture-to-filename)
'("/share/glvnd/egl_vendor.d/50_mesa.json"
"/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json"
"/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json")))))))))))