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 ;;; Copyright © 2021, 2024 Efraim Flashner ;;; Copyright © 2024 Herman Rimm +;;; Copyright © 2024 Maxim Cournoyer ;;; ;;; This file is part of GNU Guix. ;;; @@ -96,6 +97,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")) @@ -123,6 +126,8 @@ (define builder #: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 @@ (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")) @@ -182,6 +189,8 @@ (define builder #: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 ;;; Copyright © 2020 Jakub Kądziołka ;;; Copyright © 2020 Marius Bakke +;;; Copyright © 2024 Maxim Cournoyer ;;; ;;; 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))) + (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