hako pushed a commit to branch wip-zig-bootstrap
in repository guix.

commit 8acdb1cde15fd4bd31eb3d7d8c0cb738270b2361
Author: Hilton Chain <[email protected]>
AuthorDate: Wed Nov 20 08:00:54 2024 +0800

    gnu: zig: Default to zig-0.13.
    
    * gnu/packages/zig.scm (zig): Use zig-0.13.
    * guix/build-system/zig.scm (#:parallel-build?,#:parallel-tests?): New
    arguments.
    * guix/build/zig-build-system.scm (zig-arguments): New procedure.
    (bulid): Use it and honor #:parallel-build?.
    (check): Use it and honor #:parallel-tests?.
    * gnu/packages/zig-xyz.scm (river)[arguments]<#:zig>: Use zig-0.10.
    (zig-zls)[arguments]<#:zig>: Use zig-0.10.
    <#:zig-release-type>: Set to "safe".
    * gnu/packages/ncdu.scm (ncdu)[arguments]: Use default zig.
    <#:zig-release-type>: Set to "safe".
    <#:zig-build-flags>: Add "-Dpie".
    
    Change-Id: I1f0087ff39ea9fecb2ad911019d0525f1e6285f6
    
    Change-Id: I207de11f05f7570426cdc112f82ae1d321b12102
---
 gnu/packages/ncdu.scm           |  6 ++--
 gnu/packages/zig-xyz.scm        |  5 +++-
 gnu/packages/zig.scm            |  2 +-
 guix/build-system/zig.scm       |  8 +++++
 guix/build/zig-build-system.scm | 65 +++++++++++++++++++++++++++++++++--------
 5 files changed, 70 insertions(+), 16 deletions(-)

diff --git a/gnu/packages/ncdu.scm b/gnu/packages/ncdu.scm
index c49fefc077..bbbb2fea26 100644
--- a/gnu/packages/ncdu.scm
+++ b/gnu/packages/ncdu.scm
@@ -72,8 +72,10 @@ ncurses installed.")
                 "01g5mpvsm78lkd0yin82gyancrl23npy69qcp3d60vmm72yiwirz"))))
     (build-system zig-build-system)
     (arguments
-     (list #:zig zig-0.12
-           #:install-source? #f))
+     (list #:install-source? #f
+           #:zig-release-type "safe"
+           #:zig-build-flags
+           #~(list "-Dpie")))
     (inputs (list ncurses `(,zstd "lib")))
     (native-inputs (list pkg-config))
     (properties `((tunable? . #t)))))
diff --git a/gnu/packages/zig-xyz.scm b/gnu/packages/zig-xyz.scm
index 9c86dde556..e504e50e23 100644
--- a/gnu/packages/zig-xyz.scm
+++ b/gnu/packages/zig-xyz.scm
@@ -53,6 +53,7 @@
     (build-system zig-build-system)
     (arguments
      (list
+      #:zig zig-0.10
       #:install-source? #f
       #:phases
       #~(modify-phases %standard-phases
@@ -124,7 +125,9 @@ mission-critical safety and performance for financial 
services.")
     (build-system zig-build-system)
     (inputs (list zig-0.10 python))
     (arguments
-     (list #:install-source? #f
+     (list #:zig zig-0.10
+           #:install-source? #f
+           #:zig-release-type "safe"
            ;; The tests fail with memory leaks.
            #:tests? #f))
     (synopsis "Zig language server")
diff --git a/gnu/packages/zig.scm b/gnu/packages/zig.scm
index aeb0fa3655..1b25a9cc73 100644
--- a/gnu/packages/zig.scm
+++ b/gnu/packages/zig.scm
@@ -1616,4 +1616,4 @@ toolchain.  Among other features it provides
     (properties `((max-silent-time . 9600)
                   ,@(clang-compiler-cpu-architectures "18")))))
 
-(define-public zig zig-0.10)
+(define-public zig zig-0.13)
diff --git a/guix/build-system/zig.scm b/guix/build-system/zig.scm
index 0b96490387..19a8dd3e59 100644
--- a/guix/build-system/zig.scm
+++ b/guix/build-system/zig.scm
@@ -48,6 +48,8 @@
                     source
                     (tests? #t)
                     (test-target #f)
+                    (parallel-build? #t)
+                    (parallel-tests? #t)
                     (install-source? #t)
                     (skip-build? #f)
                     (zig-build-flags ''())
@@ -70,6 +72,8 @@
                      #:source #+source
                      #:system #$system
                      #:test-target #$test-target
+                     #:parallel-build? #$parallel-build?
+                     #:parallel-tests? #$parallel-tests?
                      #:install-source? #$install-source?
                      #:skip-build? #$skip-build?
                      #:zig-build-flags #$zig-build-flags
@@ -102,6 +106,8 @@
                           (native-search-paths '())
                           (tests? #t)
                           (test-target #f)
+                          (parallel-build? #t)
+                          (parallel-tests? #t)
                           (install-source? #t)
                           (skip-build? #f)
                           (zig-build-flags ''())
@@ -140,6 +146,8 @@
                      #:outputs %outputs
                      #:target #$target
                      #:test-target #$test-target
+                     #:parallel-build? #$parallel-build?
+                     #:parallel-tests? #$parallel-tests?
                      #:inputs %build-target-inputs
                      #:native-inputs %build-host-inputs
                      #:search-paths '#$(map search-path-specification->sexp
diff --git a/guix/build/zig-build-system.scm b/guix/build/zig-build-system.scm
index 5ead11b28a..441d8918a3 100644
--- a/guix/build/zig-build-system.scm
+++ b/guix/build/zig-build-system.scm
@@ -40,6 +40,32 @@
   (zig-source-install-path
    (dirname (dirname (dirname (canonicalize-path input))))))
 
+(define (zig-arguments)
+  (define version-major+minor
+    (let* ((port (open-input-pipe "zig version"))
+           (str  (read-line port)))
+      (close-pipe port)
+      (take (string-split str #\.) 2)))
+  (define (version>=? a b-major b-minor)
+    (let ((a-major (string->number (first a)))
+          (a-minor (string->number (second a))))
+      (or (> a-major b-major)
+          (and (= a-major b-major)
+               (>= a-minor b-minor)))))
+  `(("parallel-jobs" .
+     ,(lambda (jobs)
+        (cond
+         ((version>=? version-major+minor 0 11)
+          (list (string-append "-j" (number->string jobs))))
+         (else '()))))
+    ("release-type" .
+     ,(lambda (type)
+        (cond
+         ((version>=? version-major+minor 0 11)
+          (list (string-append "-Doptimize=Release" (string-capitalize type))))
+         (else
+          (list (string-append "-Drelease-" type))))))))
+
 ;; Use ‘zig fetch --name=NAME’ to overwrite dependency NAME and update hash in
 ;; build.zig.zon.
 (define (unpack-dependencies . args)
@@ -82,34 +108,49 @@ asserts dependency names start with \"zig-\"."
                 zig-build-target
                 ;; "safe", "fast" or "small", empty for a "debug" build.
                 zig-release-type
+                parallel-build?
                 skip-build?
                 #:allow-other-keys)
   "Build a given Zig package."
   (when (not skip-build?)
     (setenv "DESTDIR" "out")
-    (let ((call `("zig" "build"
-                  "--prefix"             ""            ;; Don't add /usr
-                  "--prefix-lib-dir"     "lib"
-                  "--prefix-exe-dir"     "bin"
-                  "--prefix-include-dir" "include"
-                  ,(string-append "-Dtarget=" (zig-target zig-build-target))
-                  ,@(if zig-release-type
-                        (list (string-append "-Drelease-" zig-release-type))
-                        '())
-                  ,@zig-build-flags)))
+    (let* ((arguments (zig-arguments))
+           (call `("zig" "build"
+                   "--prefix"             ""            ;; Don't add /usr
+                   "--prefix-lib-dir"     "lib"
+                   "--prefix-exe-dir"     "bin"
+                   "--prefix-include-dir" "include"
+                   ,(string-append "-Dtarget=" (zig-target zig-build-target))
+                   ,@(if parallel-build?
+                         ((assoc-ref arguments "parallel-jobs")
+                          (parallel-job-count))
+                         ((assoc-ref arguments "parallel-jobs")
+                          1))
+                   ,@(if zig-release-type
+                         ((assoc-ref arguments "release-type")
+                          zig-release-type)
+                         '())
+                   ,@zig-build-flags)))
       (format #t "running: ~s~%" call)
       (apply invoke call))))
 
 (define* (check #:key tests?
                 zig-test-flags
                 target
+                parallel-tests?
                 #:allow-other-keys)
   "Run all the tests"
   (when (and tests? (not target))
     (let ((old-destdir (getenv "DESTDIR")))
       (setenv "DESTDIR" "test-out") ;; Avoid colisions with the build output
-      (let ((call `("zig" "build" "test"
-                    ,@zig-test-flags)))
+      (let* ((arguments (zig-arguments))
+             (call `("zig" "build" "test"
+                     ,@(if parallel-tests?
+                           ((assoc-ref arguments "parallel-jobs")
+                            (parallel-job-count))
+                           ((assoc-ref arguments "parallel-jobs")
+                            1))
+                     ,@zig-test-flags)))
         (format #t "running: ~s~%" call)
         (apply invoke call))
       (if old-destdir

Reply via email to