gnu: mesa: Enable NVK driver for x86_64 architecture.

* gnu/packages/gl.scm (mesa)[native-inputs]: Add rust, rust-bindgen-cli,
rust-cbindgen-0.26 for x86_64.
[arguments]<#:meson>: Use newer version of meson to satisfy NVK build
requirements.
<#:configure-flags>: Use "auto" for 'vulkan-drivers' flag when target arch is
x86_64.
<#:phases>: Add 'patch-subproject-sources phase to patch rust subproject
sources when target arch is x86_64.
* gnu/packages/crates-io.scm (rust-paste-1, rust-proc-macro2-1, rust-quote-1,
rust-syn-2, rust-unicode-ident-1): Add a comment about being dependencies of
mesa.

Change-Id: I76e3db5072ca3c718155b188ca64b52766d55f36
Signed-off-by: John Kehayias <john.kehayias@protonmail.com>
This commit is contained in:
aurtzy 2024-09-09 12:12:11 -04:00 committed by John Kehayias
parent f0dbb3d39c
commit 6832edf804
No known key found for this signature in database
GPG key ID: 499097AE5EA815D9
2 changed files with 67 additions and 2 deletions

View file

@ -51869,6 +51869,7 @@ (define-public rust-password-hash-0.2
("rust-subtle" ,rust-subtle-2)
("rust-rand-core" ,rust-rand-core-0.6))))))
;; WARNING: This package is a dependency of mesa.
(define-public rust-paste-1
(package
(name "rust-paste")
@ -56703,6 +56704,7 @@ (define-public rust-proc-macro-nested-0.1
"Support for nested proc-macro-hack invocations.")
(license (list license:expat license:asl2.0))))
;; WARNING: This package is a dependency of mesa.
(define-public rust-proc-macro2-1
(package
(name "rust-proc-macro2")
@ -60144,6 +60146,7 @@ (define-public rust-quinn-udp-0.1
("rust-tokio" ,rust-tokio-1)
("rust-tracing" ,rust-tracing-0.1))))))
;; WARNING: This package is a dependency of mesa.
(define-public rust-quote-1
(package
(name "rust-quote")
@ -76953,6 +76956,7 @@ (define-public rust-symphonia-utils-xiph-0.4
codecs and formats.")
(license license:mpl2.0)))
;; WARNING: This package is a dependency of mesa.
(define-public rust-syn-2
(package
(name "rust-syn")
@ -86613,6 +86617,7 @@ (define-public rust-unicode-id-0.3
according to Unicode Standard Annex #31.")
(license (list license:expat license:asl2.0))))
;; WARNING: This package is a dependency of mesa.
(define-public rust-unicode-ident-1
(package
(name "rust-unicode-ident")

View file

@ -22,6 +22,7 @@
;;; Copyright © 2024 Liliana Marie Prikler <liliana.prikler@gmail.com>
;;; Copyright © 2024 Artyom V. Poptsov <poptsov.artyom@gmail.com>
;;; Copyright © 2024 Arnaud Lechevallier <arnaud.lechevallier@free.fr>
;;; Copyright © 2024 aurtzy <aurtzy@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -42,6 +43,7 @@ (define-module (gnu packages gl)
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
#:use-module (gnu packages bison)
#:use-module (gnu packages build-tools)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages documentation)
@ -57,6 +59,7 @@ (define-module (gnu packages gl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages rust)
#:use-module (gnu packages tls)
#:use-module (gnu packages video)
#:use-module (gnu packages vulkan)
@ -76,7 +79,8 @@ (define-module (gnu packages gl)
#:use-module (guix gexp)
#:use-module (guix utils)
#:use-module (ice-9 match)
#:use-module ((srfi srfi-1) #:hide (zip)))
#:use-module ((srfi srfi-1) #:hide (zip))
#:use-module (srfi srfi-26))
(define-public glu
(package
@ -357,10 +361,19 @@ (define-public mesa
pkg-config-for-build
wayland
wayland-protocols)
'())
(if (target-x86-64?)
;; NVK dependencies
(list rust
(module-ref (resolve-interface '(gnu packages rust-apps))
'rust-bindgen-cli)
(module-ref (resolve-interface '(gnu packages rust-apps))
'rust-cbindgen-0.26))
'())))
(outputs '("out" "bin"))
(arguments
(list
#:meson meson-1.5
#:configure-flags
#~(list
#$@(cond
@ -392,7 +405,7 @@ (define-public mesa
"-Dshared-glapi=enabled"
#$@(cond
((or (target-x86-32?) (target-x86-64?))
((target-x86-32?)
;; This doesn't include nouveau (which is in "auto") as it needs
;; rust.
;; TODO: Enable nouveau/NVK.
@ -486,6 +499,53 @@ (define-public mesa
(("'lp_test_arit', ") ""))))
(_
'((display "No tests to disable on this architecture.\n"))))))
#$@(if (target-x86-64?)
#~((add-after 'unpack 'patch-subproject-sources
(lambda _
;; Patch each relevant subproject source URL in wrapfiles to
;; use the store, which avoids an attempt to download them
;; mid-build.
(for-each
(match-lambda
((name source)
(let ((wrap-file (string-append
"subprojects/" name ".wrap"))
(subproject-dest (string-append
"subprojects/" name))
(overlay-dir (string-append
"subprojects/packagefiles/" name)))
(copy-recursively source subproject-dest)
;; Normally when the patch_directory wrap file property
;; is specified, meson automatically copies from
;; packagefiles, but this is not the case here (only
;; happens when downloading source?) so we manually copy
;; overlay-dir to subproject-dest.
(when (file-exists? overlay-dir)
(copy-recursively overlay-dir subproject-dest))
(call-with-output-file wrap-file
(lambda (port)
(format port "[wrap-file]
directory = ~a
"
name))))))
'#+(map (lambda (pkg)
(let ((name (package-upstream-name* pkg))
(version (package-version pkg)))
(list (package-upstream-name* pkg)
(file-append pkg
"/share/cargo/src/"
name "-" version))))
(let ((from-crates-io
(cut module-ref
(resolve-interface
'(gnu packages crates-io))
<>)))
(list (from-crates-io 'rust-syn-2)
(from-crates-io 'rust-unicode-ident-1)
(from-crates-io 'rust-quote-1)
(from-crates-io 'rust-proc-macro2-1)
(from-crates-io 'rust-paste-1))))))))
#~())
(add-before 'configure 'fix-dlopen-libnames
(lambda* (#:key inputs #:allow-other-keys)
(let ((out #$output))