~ruther/guix-local

6832edf8044cac6514a9e23536b31b4d0a3919f8 — aurtzy 2 years ago f0dbb3d
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>
2 files changed, 67 insertions(+), 2 deletions(-)

M gnu/packages/crates-io.scm
M gnu/packages/gl.scm
M gnu/packages/crates-io.scm => gnu/packages/crates-io.scm +5 -0
@@ 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")

M gnu/packages/gl.scm => gnu/packages/gl.scm +62 -2
@@ 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 @@
  #: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 @@
  #: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 @@
  #: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 @@ 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


@@ 392,7 405,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.


@@ 486,6 499,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))