[bug#77093,v4,rust-team,20/22] build/cargo: Accept rust-sysroot from native-inputs.
Commit Message
This is a workaround to support Rust cross-compilation in build systems other
than cargo-build-system. Since there's no interface for target-inputs, using
native-inputs makes most sense.
* guix/build-system/cargo.scm (lower)[bag]<target-inputs>: Label rust-sysroot
with its package name.
* guix/build/cargo-build-system.scm (configure): Use it.
When cross-compiling, accept rust-sysroot from native-inputs if there's none
in inputs.
Change-Id: I5cb63c8c815d3a2c9f0ece01857254f6d0090dd1
---
guix/build-system/cargo.scm | 3 ++-
guix/build/cargo-build-system.scm | 15 +++++++++++----
2 files changed, 13 insertions(+), 5 deletions(-)
@@ -430,7 +430,8 @@ (define* (lower name
;; This provides a separate sysroot for the regular rustc
,@(if target
- `(("rust-sysroot" ,(rust-sysroot target)))
+ `((,(string-append "rust-sysroot-for-" target)
+ ,(rust-sysroot target)))
'())))
(outputs outputs)
(build (if target cargo-cross-build cargo-build))
@@ -156,7 +156,7 @@ (define* (check-for-pregenerated-files #:key parallel-build? #:allow-other-keys)
(format #t "error: Possible pre-generated file found: ~a~%" file)))
(find-files "." (negate empty-file?)))))
-(define* (configure #:key source inputs
+(define* (configure #:key source inputs native-inputs
target system
(cargo-target #f)
(vendor-dir "guix-vendor")
@@ -193,9 +193,16 @@ (define* (configure #:key source inputs
;; For cross-building
(when target
(setenv "CARGO_BUILD_TARGET" cargo-target)
- (setenv "RUSTFLAGS" (string-append
- (or (getenv "RUSTFLAGS") "")
- " --sysroot " (assoc-ref inputs "rust-sysroot")))
+ (setenv "RUSTFLAGS"
+ (string-append
+ (or (getenv "RUSTFLAGS") "")
+ " --sysroot "
+ (assoc-ref
+ (append inputs
+ ;; Workaround for other build systems, as no interface
+ ;; is available for target-inputs.
+ (or native-inputs '()))
+ (string-append "rust-sysroot-for-" target))))
(setenv "PKG_CONFIG" (string-append target "-pkg-config"))