Subject: [bug#69461] [PATCH mesa-updates v2 1/1] gnu: Add directx-shader-compiler.

From: dan <[email-masked]>
Date: Sun, 17 Mar 2024 00:09:03 +0800

* gnu/packages/vulkan.scm (directx-headers-for-dxc): New variable.
* gnu/packages/vulkan.scm (directx-shader-compiler): New variable.

Change-Id: I6e81f59ebd7122c007cce2df820359c055df5fd9
---
 gnu/packages/vulkan.scm | 67 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index 599b0a47d3..517f26c173 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -44,7 +44,9 @@ (define-module (gnu packages vulkan)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages wine)
+  #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
 
 (define %vulkan-sdk-version "vulkan-sdk-1.3.275.0")
@@ -582,3 +584,68 @@ (define-public vulkan-utility-libraries
     (synopsis "Utility libraries for Vulkan developers")
     (description "Utility libraries for Vulkan developers.")
     (license license:asl2.0)))
+
+;; directx-shader-compiler depends on an old version of directx-headers.
+(define directx-headers-for-dxc
+  (let ((commit "980971e835876dc0cde415e8f9bc646e64667bf7")
+        (revision "115"))
+    (origin
+      (method git-fetch)
+      (uri (git-reference (url
+                           "https://github.com/microsoft/DirectX-Headers.git")
+                          (commit commit)))
+      (file-name (git-file-name "directx-headers-for-dxc"
+                                (git-version "0" revision commit)))
+      (sha256 (base32 "0c7l2xdsbr132ga2nyqjhz9xa42dxvhh9idjxnl673mz5kab1j6h")))))
+
+(define-public directx-shader-compiler
+  (package
+    (name "directx-shader-compiler")
+    (version "1.8.2403")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/microsoft/DirectXShaderCompiler.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ckngd42ivz5cv5nqngkjwwlcxbcj9mcxps56zy7qnq4dmmqkiid"))
+       (modules '((guix build utils)))
+       (snippet '(substitute* "CMakeLists.txt"
+                   (("add_subdirectory\\(external\\)")
+                    "find_package(SPIRV-Tools REQUIRED)
+find_package(SPIRV-Tools-opt CONFIG REQUIRED)")))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:configure-flags #~(list "-G"
+                                "Unix Makefiles"
+                                "-C"
+                                "../source/cmake/caches/PredefinedParams.cmake"
+                                (string-append "-DSPIRV_HEADER_INCLUDE_DIR="
+                                               #$(this-package-input
+                                                  "spirv-headers") "/include")
+                                (string-append "-DSPIRV_TOOLS_INCLUDE_DIR="
+                                               #$(this-package-input
+                                                  "spirv-tools") "/include")
+                                (string-append "-DDIRECTX_HEADER_INCLUDE_DIR="
+                                               #$directx-headers-for-dxc
+                                               "/include"))
+      #:phases #~(modify-phases %standard-phases
+                   (replace 'install
+                     (lambda* (#:key make-flags outputs #:allow-other-keys)
+                       (apply invoke "make" "install-distribution"
+                              make-flags))))))
+    (inputs (list libxml2 spirv-headers spirv-tools))
+    (native-inputs (list git python))
+    (home-page "https://github.com/microsoft/DirectXShaderCompiler")
+    (synopsis
+     "Compiler and related tools used to compile High-Level Shader Language (HLSL)")
+    (description
+     "The DirectX Shader Compiler project includes a compiler and related
+tools used to compile High-Level Shader Language (HLSL) programs into DirectX
+Intermediate Language (DXIL) representation. Applications that make use of
+DirectX for graphics, games, and computation can use it to generate shader
+programs.")
+    (license license:ncsa)))
-- 
2.41.0