Subject: [bug#63088] [PATCH v2] gnu: Add Lc0.

From: [email-masked]
Date: Thu, 7 Sep 2023 18:23:11 +0800

From: zamfofex <[email-masked]>

* gnu/packages/games.scm (lc0): New variable.

Signed-off-by: 宋文武 <[email-masked]>
---
 gnu/packages/games.scm | 59 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 59 insertions(+)

diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 760234b031..f82f1dcc52 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -118,6 +118,7 @@ (define-module (gnu packages games)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages c)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
@@ -171,6 +172,7 @@ (define-module (gnu packages games)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
+  #:use-module (gnu packages machine-learning)
   #:use-module (gnu packages man)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages messaging)
@@ -10409,6 +10411,63 @@ (define-public stockfish
       (home-page "https://stockfishchess.org/")
       (license license:gpl3+))))
 
+(define lc0-neural-network
+  (let ((hash
+         "f404e156ceb2882470fd8c032b8754af0fa0b71168328912eaef14671a256e34"))
+    (origin
+      (method url-fetch)
+      (uri (string-append "https://storage.lczero.org/files/networks/"
+                          hash))
+      (sha256
+       (base32
+        "03b9xl9vkiihdilz5dzcpg6g4inb6n4k5gs911i3gbd8h9sh9ixi"))
+      (file-name "lc0-neural-network"))))
+
+(define-public lc0
+  (package
+    (name "lc0")
+    (version "0.30.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/LeelaChessZero/lc0")
+             (commit (string-append "v" version))
+             (recursive? #t)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1m7k8m8iz4pxv3h9g2j1dkgryi4k9c1bcg3fx5j7ii4ysif63kj3"))))
+    (build-system meson-build-system)
+    (native-search-paths
+     (list (search-path-specification
+            (variable "XDG_DATA_DIRS")
+            (files '("share")))))
+    (inputs
+     `(("neural-network" ,lc0-neural-network)
+       ("eigen" ,eigen)
+       ("oneapi-dnnl" ,oneapi-dnnl)
+       ("zlib" ,zlib)))
+    (native-inputs
+     (list googletest ispc pkg-config python))
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'install 'copy-net
+                    (lambda* (#:key outputs inputs #:allow-other-keys)
+                      (mkdir-p (string-append (assoc-ref outputs "out")
+                                              "/share/lc0"))
+                      (copy-file (assoc-ref inputs "neural-network")
+                                 (string-append (assoc-ref outputs "out")
+                                                "/share/lc0/neural-network")))))
+       #:configure-flags (list "-Ddnnl=true"
+                               (string-append
+                                "-Ddnnl_dir="
+                                (assoc-ref %build-inputs "oneapi-dnnl")))))
+    (synopsis "Chess engine using neural networks")
+    (description "Lc0 is a UCI-compliant chess engine designed to play chess
+via neural network, specifically those of the LeelaChessZero project.")
+    (home-page "https://lczero.org")
+    (license license:gpl3+)))
+
 (define-public barrage
   (package
     (name "barrage")

base-commit: 5ef28595e9dff8b88ec3fcb4d887fbc380c9a8b8
prerequisite-patch-id: 8cee4be3d25dba0dde5c2d0e317f31741c010f50
-- 
2.41.0