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