efraim pushed a commit to branch rust-team
in repository guix.

commit 02c78b0226d300652dcb49e5338f371f9a308207
Author: Maxim Cournoyer <[email protected]>
AuthorDate: Wed Dec 11 10:48:50 2024 +0900

    build/cargo: Honor #:parallel-build? and #:parallel-tests? arguments.
    
    * guix/build-system/cargo.scm (cargo-build): Add #:parallel-build? and
     #:parallel-tests? arguments.
    (cargo-cross-build): Likewise.
    * guix/build/cargo-build-system.scm (build): Honor them.
    (check): Likewise.
    
    Change-Id: Idbee7aa3a6a7cd0fc222082837390b83cc8e8c07
    Signed-off-by: Efraim Flashner <[email protected]>
---
 guix/build-system/cargo.scm       |  9 +++++++++
 guix/build/cargo-build-system.scm | 23 ++++++++++++++++++++---
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm
index 961a26cd35..9850969156 100644
--- a/guix/build-system/cargo.scm
+++ b/guix/build-system/cargo.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
 ;;; Copyright © 2021, 2024 Efraim Flashner <[email protected]>
 ;;; Copyright © 2024 Herman Rimm <[email protected]>
+;;; Copyright © 2024 Maxim Cournoyer <[email protected]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -96,6 +97,8 @@ to NAME and VERSION."
                       (cargo-package-flags ''("--no-metadata" "--no-verify"))
                       (features ''())
                       (skip-build? #f)
+                      (parallel-build? #t)
+                      (parallel-tests? #t)
                       (install-source? #t)
                       (phases '%standard-phases)
                       (outputs '("out"))
@@ -123,6 +126,8 @@ to NAME and VERSION."
                        #:cargo-target #$(cargo-triplet system)
                        #:features #$(sexp->gexp features)
                        #:skip-build? #$skip-build?
+                       #:parallel-build? #$parallel-build?
+                       #:parallel-tests? #$parallel-tests?
                        #:install-source? #$install-source?
                        #:tests? #$(and tests? (not skip-build?))
                        #:phases #$(if (pair? phases)
@@ -153,6 +158,8 @@ to NAME and VERSION."
                             (cargo-target (cargo-triplet (or target system)))
                             (features ''())
                             (skip-build? #f)
+                            (parallel-build? #t)
+                            (parallel-tests? #t)
                             (install-source? (not (target-mingw? target)))
                             (phases '%standard-phases)
                             (outputs '("out"))
@@ -182,6 +189,8 @@ to NAME and VERSION."
                        #:cargo-target #$(cargo-triplet (or target system))
                        #:features #$(sexp->gexp features)
                        #:skip-build? #$skip-build?
+                       #:parallel-build? #$parallel-build?
+                       #:parallel-tests? #$parallel-tests?
                        #:install-source? #$install-source?
                        #:tests? #$(and tests? (not skip-build?))
                        #:phases #$(if (pair? phases)
diff --git a/guix/build/cargo-build-system.scm 
b/guix/build/cargo-build-system.scm
index 84897393d9..37a64b07e8 100644
--- a/guix/build/cargo-build-system.scm
+++ b/guix/build/cargo-build-system.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2019-2024 Efraim Flashner <[email protected]>
 ;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
 ;;; Copyright © 2020 Marius Bakke <[email protected]>
+;;; Copyright © 2024 Maxim Cournoyer <[email protected]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -239,19 +240,35 @@ directory = '" vendor-dir "'") port)
   (or skip-build?
       (apply invoke
              `("cargo" "build"
+               ,@(if parallel-build?
+                     (list "-j" (number->string (parallel-job-count)))
+                     (list "-j" "1"))
                ,@(if (null? features)
                      '()
                      `("--features" ,(string-join features)))
                ,@cargo-build-flags))))
 
 (define* (check #:key
+                parallel-build?
+                parallel-tests?
                 tests?
                 (cargo-test-flags '("--release"))
                 #:allow-other-keys)
   "Run tests for a given Cargo package."
-  (if tests?
-      (apply invoke "cargo" "test" cargo-test-flags)
-      #t))
+  (when tests?
+    (apply invoke
+           `("cargo" "test"
+             ,@(if parallel-build?
+                   (list "-j" (number->string (parallel-job-count)))
+                   (list "-j" "1"))
+             ,@cargo-test-flags
+             ,@(if (member "--" cargo-test-flags)
+                   '()
+                   '("--"))
+             ,@(if parallel-tests?
+                   (list "--test-threads"
+                         (number->string (parallel-job-count)))
+                   (list "--test-threads" "1"))))))
 
 (define* (package #:key
                   source

Reply via email to