From 4cb644140e244dea85d3523bcc309e3b1bfaf053 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Thu, 3 Jul 2025 21:31:13 +0800 Subject: [PATCH] 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. --- modules/cross-shells/cross-packages.scm | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 modules/cross-shells/cross-packages.scm diff --git a/modules/cross-shells/cross-packages.scm b/modules/cross-shells/cross-packages.scm new file mode 100644 index 0000000000000000000000000000000000000000..e76c44d5e7f2db4e18a0b18daf587f10e07b3646 --- /dev/null +++ b/modules/cross-shells/cross-packages.scm @@ -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 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 ) + gexp-system gexp-target) + (match-record cross-package-job + (package system target) + (with-monad %store-monad + (package->cross-derivation package + (or target gexp-target) + (or system gexp-system)))))