diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-07-26 23:22:28 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-07-26 23:47:43 +0200 |
commit | 2cc5ec7f0d64e9e94f6ae637e1f9573d4b948f0a (patch) | |
tree | 1a47f290ff18618615993b1bc86b8163db306648 | |
parent | 548e0af4da4e2e9311bc696831a80eedbc5b5798 (diff) | |
download | guix-2cc5ec7f0d64e9e94f6ae637e1f9573d4b948f0a.tar.gz guix-2cc5ec7f0d64e9e94f6ae637e1f9573d4b948f0a.zip |
gexp: 'compiled-modules' can cross-compile.
* guix/gexp.scm (compiled-modules): Add #:target and honor it.
-rw-r--r-- | guix/gexp.scm | 26 |
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) |