podiki pushed a commit to branch mesa-updates in repository guix. commit 1e0536f2c1f9b241b0e2ebd0a28d7997dd24938d Author: aurtzy <aur...@gmail.com> AuthorDate: Mon Sep 9 12:12:11 2024 -0400
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.kehay...@protonmail.com> --- gnu/packages/crates-io.scm | 5 ++++ gnu/packages/gl.scm | 64 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm index c08ccd29fd..4e4416574b 100644 --- a/gnu/packages/crates-io.scm +++ b/gnu/packages/crates-io.scm @@ -51869,6 +51869,7 @@ Format (MCF).") ("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 @@ in your code.") "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 @@ transport protocol in Rust.") ("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 @@ library that supports a wide range of audio formats. This package contains Xiph 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 @@ membership for characters in Rust.") 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") diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm index 3bd21673ca..73f266202d 100644 --- a/gnu/packages/gl.scm +++ b/gnu/packages/gl.scm @@ -21,6 +21,7 @@ ;;; Copyright © 2023, 2024 Zheng Junjie <873216...@qq.com> ;;; Copyright © 2024 Liliana Marie Prikler <liliana.prik...@gmail.com> ;;; Copyright © 2024 Artyom V. Poptsov <poptsov.art...@gmail.com> +;;; Copyright © 2024 aurtzy <aur...@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -41,6 +42,7 @@ #: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) @@ -56,6 +58,7 @@ #: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) @@ -75,7 +78,8 @@ #: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 @@ -356,10 +360,19 @@ also known as DXTn or DXTC) for 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 @@ -391,7 +404,7 @@ panfrost,r300,r600,svga,softpipe,llvmpipe,tegra,v3d,vc4,virgl,zink")) "-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. @@ -485,6 +498,53 @@ panfrost,r300,r600,svga,softpipe,llvmpipe,tegra,v3d,vc4,virgl,zink")) (("'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))