From a945eb151a7c85b4708955388674b50b92ed16c7 Mon Sep 17 00:00:00 2001 From: Brian Kubisiak Date: Mon, 9 Dec 2024 14:13:51 -0800 Subject: pack: Allow cross-compiling with '--relocatable'. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 --- guix/scripts/pack.scm | 47 +++++++++++++++++++++++++++++++---------------- 1 file 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)) ;;; -- cgit v1.2.3