Subject: [bug#74767] [PATCH rust-team 02/23] build/cargo: Honor #:parallel-build? and #:parallel-tests? arguments.

From: Efraim Flashner <[email-masked]>
Date: Tue, 10 Dec 2024 17:37:20 +0200

Should probably have cargo test not honor both parallel-build and
parallel-tests at the same time.

Also, currently the builds and tests try to use all the cores available,
so if parallel-{build,tests} is false it should go down to 1.

On Tue, Dec 10, 2024 at 11:21:05PM +0900, Maxim Cournoyer wrote:
> * 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
> ---
>  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 f24ff6195e..ea841a34eb 100644
> --- a/guix/build-system/cargo.scm
> +++ b/guix/build-system/cargo.scm
> @@ -6,6 +6,7 @@
>  ;;; Copyright © 2019 Ivan Petkov <[email-masked]>
>  ;;; Copyright © 2020 Jakub Kądziołka <[email-masked]>
>  ;;; Copyright © 2021, 2024 Efraim Flashner <[email-masked]>
> +;;; Copyright © 2024 Maxim Cournoyer <[email-masked]>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -95,6 +96,8 @@ (define* (cargo-build name inputs
>                        (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"))
> @@ -122,6 +125,8 @@ (define* (cargo-build name inputs
>                         #: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)
> @@ -152,6 +157,8 @@ (define* (cargo-cross-build name
>                              (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"))
> @@ -181,6 +188,8 @@ (define* (cargo-cross-build name
>                         #: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..d125ff20ca 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-masked]>
>  ;;; Copyright © 2020 Jakub Kądziołka <[email-masked]>
>  ;;; Copyright © 2020 Marius Bakke <[email-masked]>
> +;;; Copyright © 2024 Maxim Cournoyer <[email-masked]>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -239,19 +240,35 @@ (define* (build #:key
>    (or skip-build?
>        (apply invoke
>               `("cargo" "build"
> +               ,@(if parallel-build?
> +                     (list "-j" (number->string (parallel-job-count)))
> +                     '())
>                 ,@(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)))
> +                   '())
> +             ,@cargo-test-flags
> +             ,@(if parallel-tests?
> +                   (append (if (member "--" cargo-test-flags)
> +                               '()
> +                               '("--"))
> +                           (list "--test-threads"
> +                                 (number->string (parallel-job-count))))
> +                   '())))))
>  
>  (define* (package #:key
>                    source
> -- 
> 2.46.0
> 
> 
> 

-- 
Efraim Flashner   <[email-masked]>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted