aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Kubisiak <brian@kubisiak.com>2024-12-09 14:13:51 -0800
committerLudovic Courtès <ludo@gnu.org>2024-12-16 00:21:06 +0100
commita945eb151a7c85b4708955388674b50b92ed16c7 (patch)
tree91a6af9dfde0e79f4ea3395a4055cc391b4b215b
parente3bf81c7dfcf9836298456b8258a17902530c84d (diff)
downloadguix-a945eb151a7c85b4708955388674b50b92ed16c7.tar.gz
guix-a945eb151a7c85b4708955388674b50b92ed16c7.zip
pack: Allow cross-compiling with '--relocatable'.
* guix/scripts/pack.scm (c-compiler-compiler): Remove exception when cross-compiling and always build gexp->script for the host. [toolchain]: Use standard-cross-packages when cross-compiling. [search-paths]: Use package-search-paths instead of package-native-search-paths when cross-compiling. [run]: Use cc-for-target and strip-for-target. Change-Id: I5503e48b3394fdfee06999f8d1ad82f5f0d9af96 Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r--guix/scripts/pack.scm47
1 files changed, 31 insertions, 16 deletions
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index 58cd55b129..d0e66c3013 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -1105,12 +1105,30 @@ by '--bootstrap', for testing purposes."
"Lower COMPILER to a single script that does the right thing."
(define toolchain
(or (c-compiler-toolchain compiler)
- (list (first (assoc-ref (standard-packages) "gcc"))
- (first (assoc-ref (standard-packages) "ld-wrapper"))
- (first (assoc-ref (standard-packages) "binutils"))
- (first (assoc-ref (standard-packages) "libc"))
- (gexp-input (first (assoc-ref (standard-packages) "libc"))
- "static"))))
+ (if target
+ (let* ((cross-packages-host
+ (standard-cross-packages target 'host))
+ (cross-packages-target
+ (standard-cross-packages target 'target))
+ (xgcc
+ (first (assoc-ref cross-packages-host "cross-gcc"))))
+ (list xgcc
+ ;; ld-wrapper-cross isn't included with
+ ;; STANDARD-CROSS-PACKAGES, pull it from the inputs of
+ ;; cross-gcc instead
+ (first (assoc-ref (package-native-inputs xgcc)
+ "ld-wrapper-cross"))
+ (first (assoc-ref cross-packages-host "cross-binutils"))
+ (first (assoc-ref cross-packages-target "cross-libc"))
+ (gexp-input (first (assoc-ref cross-packages-target
+ "cross-libc:static"))
+ "static")))
+ (list (first (assoc-ref (standard-packages) "gcc"))
+ (first (assoc-ref (standard-packages) "ld-wrapper"))
+ (first (assoc-ref (standard-packages) "binutils"))
+ (first (assoc-ref (standard-packages) "libc"))
+ (gexp-input (first (assoc-ref (standard-packages) "libc"))
+ "static")))))
(define inputs
(match (append-map package-propagated-inputs
@@ -1120,7 +1138,9 @@ by '--bootstrap', for testing purposes."
(define search-paths
(cons $PATH
- (append-map package-native-search-paths
+ (append-map (if target
+ package-search-paths
+ package-native-search-paths)
(filter package? inputs))))
(define run
@@ -1144,17 +1164,12 @@ by '--bootstrap', for testing purposes."
'#$inputs)
(let ((output (output-file (command-line))))
- (apply invoke "gcc" (cdr (command-line)))
- (invoke "strip" output)))))
-
- (when target
- ;; TODO: Yep, we'll have to do it someday!
- (leave (G_ "cross-compilation not implemented here;
-please email '~a'~%")
- (@ (guix config) %guix-bug-report-address)))
+ (apply invoke #$(cc-for-target target) (cdr (command-line)))
+ (invoke #$(strip-for-target target) output)))))
(gexp->script "c-compiler" run
- #:guile (c-compiler-guile compiler)))
+ #:guile (c-compiler-guile compiler)
+ #:target #f))
;;;