guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/10: gexp: 'compiled-modules' can cross-compile.


From: guix-commits
Subject: 02/10: gexp: 'compiled-modules' can cross-compile.
Date: Fri, 26 Jul 2019 19:06:05 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit 2cc5ec7f0d64e9e94f6ae637e1f9573d4b948f0a
Author: Ludovic Courtès <address@hidden>
Date:   Fri Jul 26 23:22:28 2019 +0200

    gexp: 'compiled-modules' can cross-compile.
    
    * guix/gexp.scm (compiled-modules): Add #:target and honor it.
---
 guix/gexp.scm | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/guix/gexp.scm b/guix/gexp.scm
index eef308b..a83d716 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -1345,6 +1345,7 @@ last one is created from the given <scheme-file> object."
 (define* (compiled-modules modules
                            #:key (name "module-import-compiled")
                            (system (%current-system))
+                           target
                            (guile (%guile-for-build))
                            (module-path %load-path)
                            (extensions '())
@@ -1355,7 +1356,8 @@ last one is created from the given <scheme-file> object."
                            (pre-load-modules? #t))
   "Return a derivation that builds a tree containing the `.go' files
 corresponding to MODULES.  All the MODULES are built in a context where
-they can refer to each other."
+they can refer to each other.  When TARGET is true, cross-compile MODULES for
+TARGET, a GNU triplet."
   (define total (length modules))
 
   (mlet %store-monad ((modules (imported-modules modules
@@ -1374,6 +1376,12 @@ they can refer to each other."
                       (srfi srfi-26)
                       (system base compile))
 
+         ;; TODO: Inline this on the next rebuild cycle.
+         (ungexp-splicing
+          (if target
+              (gexp ((use-modules (system base target))))
+              (gexp ())))
+
          (define (regular? file)
            (not (member file '("." ".."))))
 
@@ -1391,9 +1399,19 @@ they can refer to each other."
                                                    (gexp ()))))
                          (ungexp (* total (if pre-load-modules? 2 1)))
                          entry)
-                 (compile-file entry
-                               #:output-file output
-                               #:opts %auto-compilation-options)
+
+                 (ungexp-splicing
+                  (if target
+                      (gexp ((with-target (ungexp target)
+                               (lambda ()
+                                 (compile-file entry
+                                               #:output-file output
+                                               #:opts
+                                               %auto-compilation-options)))))
+                      (gexp ((compile-file entry
+                                           #:output-file output
+                                           #:opts 
%auto-compilation-options)))))
+
                  (+ 1 processed))))
 
          (define (process-directory directory output processed)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]