summaryrefslogtreecommitdiff
path: root/guix/gexp.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-07-26 23:22:28 +0200
committerLudovic Courtès <ludo@gnu.org>2019-07-26 23:47:43 +0200
commit2cc5ec7f0d64e9e94f6ae637e1f9573d4b948f0a (patch)
tree1a47f290ff18618615993b1bc86b8163db306648 /guix/gexp.scm
parent548e0af4da4e2e9311bc696831a80eedbc5b5798 (diff)
downloadguix-patches-2cc5ec7f0d64e9e94f6ae637e1f9573d4b948f0a.tar
guix-patches-2cc5ec7f0d64e9e94f6ae637e1f9573d4b948f0a.tar.gz
gexp: 'compiled-modules' can cross-compile.
* guix/gexp.scm (compiled-modules): Add #:target and honor it.
Diffstat (limited to 'guix/gexp.scm')
-rw-r--r--guix/gexp.scm26
1 files changed, 22 insertions, 4 deletions
diff --git a/guix/gexp.scm b/guix/gexp.scm
index eef308b000..a83d7168d2 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)