unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: Brian Kubisiak <brian@kubisiak.com>
To: 74758@debbugs.gnu.org
Subject: [bug#74758] [PATCH] pack: Allow cross-compiling with '--relocatable'.
Date: Mon, 9 Dec 2024 14:13:51 -0800	[thread overview]
Message-ID: <c18adf0bebe9ba994acf8c5a99ea29a5634599c6.1733714151.git.brian@kubisiak.com> (raw)

* 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(-)

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))

 \f
 ;;;

base-commit: 9001514e242ad15c190588439930b0fa4f6782e3
--
2.46.0





                 reply	other threads:[~2024-12-09 22:34 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c18adf0bebe9ba994acf8c5a99ea29a5634599c6.1733714151.git.brian@kubisiak.com \
    --to=brian@kubisiak.com \
    --cc=74758@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).