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>
This commit is contained in:
Brian Kubisiak 2024-12-09 14:13:51 -08:00 committed by Ludovic Courtès
parent e3bf81c7df
commit a945eb151a
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -1105,12 +1105,30 @@ by '--bootstrap', for testing purposes."
"Lower COMPILER to a single script that does the right thing." "Lower COMPILER to a single script that does the right thing."
(define toolchain (define toolchain
(or (c-compiler-toolchain compiler) (or (c-compiler-toolchain compiler)
(list (first (assoc-ref (standard-packages) "gcc")) (if target
(first (assoc-ref (standard-packages) "ld-wrapper")) (let* ((cross-packages-host
(first (assoc-ref (standard-packages) "binutils")) (standard-cross-packages target 'host))
(first (assoc-ref (standard-packages) "libc")) (cross-packages-target
(gexp-input (first (assoc-ref (standard-packages) "libc")) (standard-cross-packages target 'target))
"static")))) (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 (define inputs
(match (append-map package-propagated-inputs (match (append-map package-propagated-inputs
@ -1120,7 +1138,9 @@ by '--bootstrap', for testing purposes."
(define search-paths (define search-paths
(cons $PATH (cons $PATH
(append-map package-native-search-paths (append-map (if target
package-search-paths
package-native-search-paths)
(filter package? inputs)))) (filter package? inputs))))
(define run (define run
@ -1144,17 +1164,12 @@ by '--bootstrap', for testing purposes."
'#$inputs) '#$inputs)
(let ((output (output-file (command-line)))) (let ((output (output-file (command-line))))
(apply invoke "gcc" (cdr (command-line))) (apply invoke #$(cc-for-target target) (cdr (command-line)))
(invoke "strip" output))))) (invoke #$(strip-for-target target) 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)))
(gexp->script "c-compiler" run (gexp->script "c-compiler" run
#:guile (c-compiler-guile compiler))) #:guile (c-compiler-guile compiler)
#:target #f))
;;; ;;;