From: John Kehayias via Guix-patches via <guix-patches@gnu.org>
To: aurtzy <aurtzy@gmail.com>
Cc: 73071@debbugs.gnu.org, Efraim Flashner <efraim@flashner.co.il>
Subject: [bug#73071] [PATCH mesa-updates] gnu: mesa: Enable NVK driver for x86_64 architecture.
Date: Mon, 16 Sep 2024 02:59:29 +0000 [thread overview]
Message-ID: <877cbcpalv.fsf@protonmail.com> (raw)
In-Reply-To: <1bc738374fbd269f8b5c8e3e299aefa17117f58c.1725898038.git.aurtzy@gmail.com>
Hi aurtzy!
On Mon, Sep 09, 2024 at 12:12 PM, aurtzy wrote:
> * gnu/packages/gl.scm (mesa): Enable NVK vulkan driver for x86_64
> architecture.
> [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 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
> ---
>
> Hi John,
>
> Thanks for the CC, and sorry for not submitting a patch sooner!
>
No problem, I let things go for a bit too, thanks for this work!
> Since last, I have managed to find a better solution to the issue with
> substituting rust dependency sources. Briefly on what I have so far: this
> makes use of writing wrap files with just the "directory" property, having
> meson fall back to using a local directory that sources are copied to. Doing
> this resulted in an odd behavior with the overlay directories (i.e. important
> extra files in subprojects/packagefiles) where they don't seem to be
> automatically copied as expected when falling back to local files; however, a
> simple copy resolves it, although I thought it would still be good to note and
> add a comment about.
>
> I initially made the wrap-file-writing a build utility procedure
> 'patch-wrap-file' (which can be seen my personal config [1]) as it seemed like
> it could be useful for other meson packages, but for this patch I've inlined
> it since I'm not confident in its applicability across different projects.
> I'd be happy to hear thoughts about it if it might be useful, though.
>
> [1] <https://github.com/aurtzy/guix-config/blob/5cf4c9e277f4ab3a8f1ef87ec5ac47a686da0ad2/my-guix/build/utils.scm#L27>
>
Very nice! Yes, more utilities to help with unbundling essentially
will be helpful. I don't know if I ever wrote a wrap file or just
patched the directory bit into the meson file directly. I would have
to look this over, but a utility function (or via keyword argument in
meson-build-system?) would be great.
As for the main patch: I've built locally and see nouveau as a vulkan
driver on x86_64 but not i686. That's about all I can test though. The
change to #:meson means other archs will rebuild too, but I don't know
if they got far anyway (so we can cancel old derivations). Perhaps a
new mesa point release will be out this week? Then I could bump the
version, rebase, and rebuild with this patch. Thoughts?
Other than that, I made a minor tweak to the changelog (remove first
line, name the phase) locally, but have not done a rebase/push on
mesa-updates. Let me give it a few days for other comments and if
there are any other rebuilds to go with it.
Thanks again!
John
> Cheers,
>
> aurtzy
>
> 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 0cdb071ea0..2a40062500 100644
> --- a/gnu/packages/crates-io.scm
> +++ b/gnu/packages/crates-io.scm
> @@ -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")
> @@ -76939,6 +76942,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")
> @@ -86599,6 +86603,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")
> diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
> index c417f11571..3939f1ba1f 100644
> --- a/gnu/packages/gl.scm
> +++ b/gnu/packages/gl.scm
> @@ -21,6 +21,7 @@
> ;;; Copyright © 2023, 2024 Zheng Junjie <873216071@qq.com>
> ;;; Copyright © 2024 Liliana Marie Prikler <liliana.prikler@gmail.com>
> ;;; Copyright © 2024 Artyom V. Poptsov <poptsov.artyom@gmail.com>
> +;;; Copyright © 2024 aurtzy <aurtzy@gmail.com>
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> @@ -41,6 +42,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)
> @@ -56,6 +58,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)
> @@ -75,7 +78,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
> @@ -352,10 +356,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
> @@ -387,7 +400,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.
> @@ -481,6 +494,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))
>
> base-commit: c1ca70a98024a1e9dd6fedded1d31ad763b8b282
next prev parent reply other threads:[~2024-09-16 3:00 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-06 15:00 [bug#73071] [PATCH mesa-updates 0/8] Various updates for mesa to 24.2.2 John Kehayias via Guix-patches via
2024-09-06 15:05 ` [bug#73071] [PATCH mesa-updates 1/8] gnu: libdrm: Update to 2.4.123 John Kehayias via Guix-patches via
2024-09-06 15:06 ` [bug#73071] [PATCH mesa-updates 2/8] gnu: wayland-protocols: Update to 1.37 John Kehayias via Guix-patches via
2024-09-06 15:07 ` [bug#73071] [PATCH mesa-updates 3/8] gnu: Remove wayland-protocols-next John Kehayias via Guix-patches via
2024-09-06 15:07 ` [bug#73071] [PATCH mesa-updates 4/8] gnu: vulkan-headers: Hard-code libvulkan.so file name John Kehayias via Guix-patches via
2024-09-06 15:07 ` [bug#73071] [PATCH mesa-updates 5/8] gnu: volk: Hard-code path of vulkan-loader for dynamic loading John Kehayias via Guix-patches via
2024-09-06 15:07 ` [bug#73071] [PATCH mesa-updates 6/8] gnu: llvm-for-mesa: Update to llvm-18 John Kehayias via Guix-patches via
2024-09-06 15:07 ` [bug#73071] [PATCH mesa-updates 7/8] gnu: llvm-for-mesa: Build all targets John Kehayias via Guix-patches via
2024-09-06 15:08 ` [bug#73071] [PATCH mesa-updates 8/8] gnu: mesa: Update to 24.2.2 John Kehayias via Guix-patches via
2024-09-09 3:43 ` [bug#73071] [PATCH mesa-updates 0/8] Various updates for mesa " John Kehayias via Guix-patches via
2024-09-09 16:12 ` [bug#73071] [PATCH mesa-updates] gnu: mesa: Enable NVK driver for x86_64 architecture aurtzy
2024-09-16 2:59 ` John Kehayias via Guix-patches via [this message]
2024-09-17 1:50 ` [bug#73071] [PATCH mesa-updates 0/8] Various updates for mesa to 24.2.2 aurtzy
2024-09-20 1:46 ` John Kehayias via Guix-patches via
2024-11-05 18:51 ` bug#73071: " John Kehayias via Guix-patches via
2024-09-18 0:35 ` [bug#73071] " The Man
2024-09-20 1:51 ` John Kehayias via Guix-patches via
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877cbcpalv.fsf@protonmail.com \
--to=guix-patches@gnu.org \
--cc=73071@debbugs.gnu.org \
--cc=aurtzy@gmail.com \
--cc=efraim@flashner.co.il \
--cc=john.kehayias@protonmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).