[PATCH] pack: Allow cross-compiling with '--relocatable'.

  • Done
  • quality assurance status badge
Details
2 participants
  • Brian Kubisiak
  • Ludovic Courtès
Owner
unassigned
Submitted by
Brian Kubisiak
Severity
normal
B
B
Brian Kubisiak wrote on 9 Dec 23:13 +0100
(address . guix-patches@gnu.org)
c18adf0bebe9ba994acf8c5a99ea29a5634599c6.1733714151.git.brian@kubisiak.com
* 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
---
guix/scripts/pack.scm | 47 ++++++++++++++++++++++++++++---------------
1 file changed, 31 insertions(+), 16 deletions(-)

Toggle diff (76 lines)
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 @@ (define-gexp-compiler (c-compiler-compiler (compiler <c-compiler>) system target
"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 @@ (define-gexp-compiler (c-compiler-compiler (compiler <c-compiler>) system target

(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 @@ (define-gexp-compiler (c-compiler-compiler (compiler <c-compiler>) system target
'#$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))

;;;

base-commit: 9001514e242ad15c190588439930b0fa4f6782e3
--
2.46.0
L
L
Ludovic Courtès wrote on 16 Dec 00:16 +0100
(name . Brian Kubisiak)(address . brian@kubisiak.com)(address . 74758-done@debbugs.gnu.org)
87wmg0fsgd.fsf@gnu.org
Hi,

Brian Kubisiak <brian@kubisiak.com> skribis:

Toggle quote (9 lines)
> * 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

Excellent. Applied, thanks!

Toggle quote (3 lines)
> guix/scripts/pack.scm | 47 ++++++++++++++++++++++++++++---------------
> 1 file changed, 31 insertions(+), 16 deletions(-)

I’m glad the implementation turned out to be quite small!

Ludo’.
Closed
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 74758@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 74758
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch