Hi Rutger, Rutger Helling writes: > Hey Guix, > > this patch series adds Vulkan support for mesa on x86_64-linux and adds > a few new packages. > Since a rebuild of mesa is necessary I'm sending it in for core-updates. That is excellent, thank you! > Here's a short explanation of all the patches: > #1: Add Vulkan support to mesa on x86_64-linux. On i686-linux mesa > didn't build unfortunately. > I haven't tried other architectures. > #2: Add vulkan.scm to gnu/local.mk. > #3: Create vulkan.scm and add spirv-headers. > #4: Add spirv-tools to vulkan.scm. > #5: Add glslang to vulkan.scm. > #6: Add vulkan-icd-loader to vulkan.scm. > This provides the 'vulkaninfo' tool that you can use to query if your > system is Vulkan-capable. > > I tested it out after a full rebuild on a Vulkan-capable system. > 'vulkaninfo' showed Vulkan was available on that system. Great! Unfortunately the mesa patch did not apply for me, can you rebase this series on current 'core-updates'? We've had some trouble getting Hydra started on it, so we can probably squeeze this in. Some comments.. > From cb4266a1a21f4e16d4d32bbca683b5aae938986d Mon Sep 17 00:00:00 2001 > From: Rutger Helling > Date: Sat, 9 Dec 2017 00:28:36 +0100 > Subject: [PATCH] gnu: mesa: Enable Vulkan drivers for Intel and Radeon on > x86-64. > > * gnu/packages/gl.scm (mesa)[arguments]: Add > "--with-vulkan-drivers=intel,radeon" to configure-flags for > x86_64-linux. [synopsis]: Mention Vulkan. [description]: Mention Vulkan. Please add line breaks between the various commit message "fields". > --- > gnu/packages/gl.scm | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) > > diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm > index 005b49b86..b18861eb7 100644 > --- a/gnu/packages/gl.scm > +++ b/gnu/packages/gl.scm > @@ -296,6 +296,13 @@ also known as DXTn or DXTC) for Mesa.") > ;; are stuck at OpenGL 2.1 instead of OpenGL 3.0+. > "--enable-texture-float" > > + ;; Enable Vulkan on x86-64. > + ,@(match (%current-system) > + ((or "x86_64-linux") > + '("--with-vulkan-drivers=intel,radeon")) > + (_ > + '(""))) > + > ;; Also enable the tests. > "--enable-gallium-tests" > > @@ -343,11 +350,11 @@ also known as DXTn or DXTC) for Mesa.") > (string-append "\"" out "/lib/dri/gbm_dri.so"))) > #t)))))) > (home-page "https://mesa3d.org/") > - (synopsis "OpenGL implementation") > - (description "Mesa is a free implementation of the OpenGL specification - > -a system for rendering interactive 3D graphics. A variety of device drivers > -allows Mesa to be used in many different environments ranging from software > -emulation to complete hardware acceleration for modern GPUs.") > + (synopsis "OpenGL and Vulkan implementations") > + (description "Mesa is a free implementation of the OpenGL and Vulkan > +specifications - systems for rendering interactive 3D graphics. A variety of > +device drivers allows Mesa to be used in many different environments ranging > +from software emulation to complete hardware acceleration for modern GPUs.") > (license license:x11))) > > (define-public mesa-headers > -- > 2.15.1 > > From 35b07f1e24c8597bdd504ae9f986abed486cb8df Mon Sep 17 00:00:00 2001 > From: Rutger Helling > Date: Fri, 8 Dec 2017 13:39:16 +0100 > Subject: [PATCH] gnu: local.mk: Add vulkan.scm. > > * gnu/local.mk: Add vulkan.scm. > --- > gnu/local.mk | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/gnu/local.mk b/gnu/local.mk > index a0e3f6ebe..51876487d 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -418,6 +418,7 @@ GNU_SYSTEM_MODULES = \ > %D%/packages/vim.scm \ > %D%/packages/virtualization.scm \ > %D%/packages/vpn.scm \ > + %D%/packages/vulkan.scm \ > %D%/packages/w3m.scm \ > %D%/packages/wdiff.scm \ > %D%/packages/web.scm \ > -- > 2.15.1 > > From 043a4adbcf2023cb5b610bb9cb6529aca76c2922 Mon Sep 17 00:00:00 2001 > From: Rutger Helling > Date: Fri, 8 Dec 2017 14:10:36 +0100 > Subject: [PATCH] gnu: vulkan: Add spirv-headers. > > * gnu/packages/vulkan.scm: Create file. (spirv-headers): New variable. > --- > gnu/packages/vulkan.scm | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 59 insertions(+) > create mode 100644 gnu/packages/vulkan.scm > > diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm > new file mode 100644 > index 000000000..2079b8e0a > --- /dev/null > +++ b/gnu/packages/vulkan.scm > @@ -0,0 +1,59 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2017 Rutger Helling > +;;; > +;;; This file is part of GNU Guix. > +;;; > +;;; GNU Guix is free software; you can redistribute it and/or modify it > +;;; under the terms of the GNU General Public License as published by > +;;; the Free Software Foundation; either version 3 of the License, or (at > +;;; your option) any later version. > +;;; > +;;; GNU Guix is distributed in the hope that it will be useful, but > +;;; WITHOUT ANY WARRANTY; without even the implied warranty of > +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +;;; GNU General Public License for more details. > +;;; > +;;; You should have received a copy of the GNU General Public License > +;;; along with GNU Guix. If not, see . > + > +(define-module (gnu packages vulkan) > + #:use-module ((guix licenses) #:prefix license:) > + #:use-module (guix packages) > + #:use-module (guix git-download) > + #:use-module (guix build-system cmake) > + #:use-module (gnu packages)) > + > +(define-public spirv-headers > + (let ((commit "98b01515724c428d0f0a5d01deffcce0f5f5e61c") > + (revision "1")) > + (package > + (name "spirv-headers") > + (version (string-append "0.0-" revision "." (string-take commit 9))) > + (source > + (origin > + (method git-fetch) > + (uri (git-reference > + (url "https://github.com/KhronosGroup/SPIRV-Headers") > + (commit commit))) > + (sha256 > + (base32 > + "15bknwkv3xwmjs3lmkp282a1wrp0da1b4lp45i4yiav04zmqygj2")) > + (file-name (string-append name "-" version "-checkout")))) > + (build-system cmake-build-system) > + (arguments > + `(#:tests? #f ;; No tests > + #:phases (modify-phases %standard-phases > + (replace 'install > + (lambda* > + (#:key outputs #:allow-other-keys) > + (system* "cmake" "-E" "copy_directory" > + "../source/include/spirv" (string-append > + (assoc-ref outputs "out") > + "/include/spirv"))))))) Please use (zero? (system* ...)) here so the return value is checked. > + (home-page "https://github.com/KhronosGroup/SPIRV-Headers") > + (synopsis "Machine-readable files from the SPIR-V Registry") > + (description "SPIRV-Headers is a repository containing machine-readable > +files from the SPIR-V Registry.") > + (license license:x11-style)))) ;; Custom license. See > + ;; https://github.com/KhronosGroup/SPIRV-Headers/blob/master/LICENSE for > + ;; details. You can use the 'non-copyleft' procedure here. > -- > 2.15.1 > > From 80e82f1f92823e04893e8400dc82b69e890c7276 Mon Sep 17 00:00:00 2001 > From: Rutger Helling > Date: Fri, 8 Dec 2017 14:56:36 +0100 > Subject: [PATCH] gnu: vulkan: Add spirv-tools. > > * gnu/packages/vulkan.scm (spirv-tools): New variable. > --- > gnu/packages/vulkan.scm | 35 ++++++++++++++++++++++++++++++++++- > 1 file changed, 34 insertions(+), 1 deletion(-) > > diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm > index 2079b8e0a..248dc206c 100644 > --- a/gnu/packages/vulkan.scm > +++ b/gnu/packages/vulkan.scm > @@ -19,9 +19,12 @@ > (define-module (gnu packages vulkan) > #:use-module ((guix licenses) #:prefix license:) > #:use-module (guix packages) > + #:use-module (guix download) > #:use-module (guix git-download) > #:use-module (guix build-system cmake) > - #:use-module (gnu packages)) > + #:use-module (gnu packages) > + #:use-module (gnu packages pkg-config) > + #:use-module (gnu packages python)) > > (define-public spirv-headers > (let ((commit "98b01515724c428d0f0a5d01deffcce0f5f5e61c") > @@ -57,3 +60,33 @@ files from the SPIR-V Registry.") > (license license:x11-style)))) ;; Custom license. See > ;; https://github.com/KhronosGroup/SPIRV-Headers/blob/master/LICENSE for > ;; details. > + > +(define-public spirv-tools > + (package > + (name "spirv-tools") > + (version "2017.1") > + (source > + (origin > + (method url-fetch) > + (uri (string-append "https://github.com/KhronosGroup/SPIRV-Tools/archive/v" > + version ".tar.gz")) > + (sha256 > + (base32 > + "009vflaa71a7xhvmm23f4sdbcgdkl1k4facqkwsg6djha2sdpsqq")) > + (file-name (string-append name "-" version ".tar.gz")))) > + (build-system cmake-build-system) > + (arguments > + `(#:configure-flags (list (string-append "-DCMAKE_INSTALL_LIBDIR=" > + (assoc-ref %outputs "out") > + "/lib") > + (string-append "-DSPIRV-Headers_SOURCE_DIR=" > + (assoc-ref %build-inputs > + "spirv-headers"))))) > + (inputs `(("python" ,python) > + ("spirv-headers" ,spirv-headers))) > + (native-inputs `(("pkg-config", pkg-config))) > + (home-page "https://github.com/KhronosGroup/SPIRV-Tools") > + (synopsis "API and commands for processing SPIR-V modules") > + (description "The SPIR-V Tools project provides an API and commands for > +processing SPIR-V modules.") > + (license license:asl2.0))) > -- > 2.15.1 > > From dd17b03c487b64212fae77a406075fc83514a369 Mon Sep 17 00:00:00 2001 > From: Rutger Helling > Date: Fri, 8 Dec 2017 15:56:34 +0100 > Subject: [PATCH] gnu: vulkan: Add glslang. > > * gnu/packages/vulkan.scm (glslang): New variable. > --- > gnu/packages/vulkan.scm | 39 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 39 insertions(+) > > diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm > index 248dc206c..03562e45d 100644 > --- a/gnu/packages/vulkan.scm > +++ b/gnu/packages/vulkan.scm > @@ -23,6 +23,7 @@ > #:use-module (guix git-download) > #:use-module (guix build-system cmake) > #:use-module (gnu packages) > + #:use-module (gnu packages bison) > #:use-module (gnu packages pkg-config) > #:use-module (gnu packages python)) > > @@ -90,3 +91,41 @@ files from the SPIR-V Registry.") > (description "The SPIR-V Tools project provides an API and commands for > processing SPIR-V modules.") > (license license:asl2.0))) > + > +(define-public glslang > + ;; Version 3.0 is too old for vulkan-icd-loader. Use a recent git commit > + ;; until the next stable version. > + (let ((commit "471bfed0621162a7513fc24a51e8a1ccc2e640ff") > + (revision "1")) > + (package > + (name "glslang") > + (version (string-append "0.0-" revision "." (string-take commit 9))) > + (source > + (origin > + (method git-fetch) > + (uri (git-reference > + (url "https://github.com/KhronosGroup/glslang") > + (commit commit))) > + (sha256 > + (base32 > + "0m2vljmrqppp80ghbbwfnayqw2canxlcjhgy6jw9xjdssln0d3pd")) > + (file-name (string-append name "-" version "-checkout")))) > + (build-system cmake-build-system) > + (arguments > + `(#:tests? #f ;; No tests > + ;; glslang tries to set CMAKE_INSTALL_PREFIX manually. Remove the > + ;; offending line. > + #:phases (modify-phases %standard-phases > + (add-after 'patch-source-shebangs 'fix-cmakelists > + (lambda _ > + (substitute* "CMakeLists.txt" > + (("set.*CMAKE_INSTALL_PREFIX.*") ""))))))) Return #t here since (substitute* ...) has an undefined return value. The rest LGTM at a cursory glance. Can you send updated patches? TIA!