[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#47989] [PATCH] channels: Add a #:system argument to channel-instanc
From: |
Ludovic Courtès |
Subject: |
[bug#47989] [PATCH] channels: Add a #:system argument to channel-instances->manifest. |
Date: |
Tue, 04 May 2021 15:52:37 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) |
Christopher Baines <mail@cbaines.net> skribis:
> This allows computing a manifest for a specific system. Previously this was
> possible, but only through changing %current-system, which caused the
> derivation to be computed using that system as well (so computing a derivation
> for aarch64-linux on x86_64-linux would require running aarch64-linux code).
>
> This new argument adds the possibility of computing derivations for non-native
> systems, without having to run non-native code.
>
> I'm looking at this as it will enable the Guix Data Service to compute channel
> instance derivations without relying on QEMU emulation for non-native
> systems (it should be faster as well).
>
> * guix/channels.scm (build-from-source): Add #:system argument and pass to
> build.
> (build-channel-instance): Add system argument and pass to build-from-source.
> (channel-instance-derivations): Add #:system argument and pass to
> build-channel-instance, also rename system to current-system-value.
> (channel-instances->manifest): Add #:system argument and pass to
> channel-instance-derivations.
[...]
> (define* (build-from-source instance
> - #:key core verbose? (dependencies '()))
> + #:key core verbose? (dependencies '()) system)
> "Return a derivation to build Guix from INSTANCE, using the self-build
> script contained therein. When CORE is true, build package modules under
> SOURCE using CORE, an instance of Guix."
Please mention SYSTEM in the docstring.
> +(define* (channel-instance-derivations instances #:key system)
> "Return the list of derivations to build INSTANCES, in the same order as
> INSTANCES."
> (define core-instance
> @@ -757,14 +759,15 @@ INSTANCES."
> (resolve-dependencies instances))
>
> (define (instance->derivation instance)
> - (mlet %store-monad ((system (current-system)))
> + (mlet %store-monad ((current-system-value (current-system)))
> (mcached (if (eq? instance core-instance)
> - (build-channel-instance instance)
> + (build-channel-instance instance system)
> (mlet %store-monad ((core (instance->derivation
> core-instance))
> (deps (mapm %store-monad
> instance->derivation
> (edges instance))))
> - (build-channel-instance instance core deps)))
> + (build-channel-instance instance system core deps)))
> instance
> + current-system-value
> system)))
Here, there should not be any additional key to ‘mcached’ since there’s
only one system being targeted.
Instead, it should look something like this:
(define (instance->derivation core-instance)
(mlet %store-monad ((system (if system (return system) (current-system))))
(mcached … ;pass ‘system’ to callees
instance
system))) ;unchanged
HTH,
Ludo’.
- [bug#47989] [PATCH] channels: Add a #:system argument to channel-instances->manifest.,
Ludovic Courtès <=