~ruther/guix-cross-shells

4cb644140e244dea85d3523bcc309e3b1bfaf053 — Rutherther 8 days ago ebe0670
feat: Add cross-package-job and gexp compiler for it

This will allow compiling packages to cross targets, using gexps,
ungexping cross-package-job will produce a derivation for the given target.
1 files changed, 30 insertions(+), 0 deletions(-)

A modules/cross-shells/cross-packages.scm
A modules/cross-shells/cross-packages.scm => modules/cross-shells/cross-packages.scm +30 -0
@@ 0,0 1,30 @@
(define-module (cross-shells cross-packages)
 #:use-module (guix records)
 #:use-module (guix monads)
 #:use-module (ice-9 match)
 #:use-module (guix packages)
 #:use-module (guix store)
 #:use-module (guix gexp)
 #:export (cross-package-job
           cross-package-job-package
           cross-package-job-system
           cross-package-job-target))

(define-record-type* <cross-package-job>
  cross-package-job make-cross-package-job
  cross-package-job?
  ; The package to build
  (package cross-package-job-package)
  ; If #f, use the system selected by ungexping
  (system cross-package-job-system (default #f))
  ; If #f, use the target selected by ungexping
  (target cross-package-job-target (default #f)))

(define-gexp-compiler (compile-cross-package-job (cross-package-job <cross-package-job>)
                                                 gexp-system gexp-target)
  (match-record cross-package-job <cross-package-job>
                (package system target)
    (with-monad %store-monad
      (package->cross-derivation package
                                 (or target gexp-target)
                                 (or system gexp-system)))))