Subject: [bug#77033] [PATCH] deploy: Support --target and --system.

From: Sergey Trofimov <[email-masked]>
Date: Sat, 22 Mar 2025 10:09:29 +0100

Hi Maxim,

Maxim Cournoyer <[email-masked]> writes:

> [...]
>
>>>> Additionally `guix-daemon` should know all the systems the host
>>>> supports. Currently it knows only the native one (`--system`
>>>> parameter).
>>>
>>> I've never used such feature, so I wouldn't know of how useful that
>>> would be :-).  Perhaps useful if the machine is to be used
>>> exclusively
>>> for cross-compiling by default?  You could also set that via 'export
>>> GUIX_BUILD_OPTIONS=--target=$gnu-triplet', no?
>>
>> You've mentioned it in the previous mail:
>>
>>> In my experience, assuming a powerful x86_64 workstation,
>>> cross-compilation > native-compilation (on lower spec ARM machine) >
>>> emulated native compilation (QEMU).
>
> I was answering the specific implementation details you seemed to allude
> to, regarding that guix-daemon should know also about the non-native
> (cross-compiled) target systems supported.
>
> I didn't understand that part.  Why would we need to teach the daemon
> something new?  It already can cross-compile things as it is, even it
> lacks such explicit knowledge, it seems.

`build-machine` declares the systems it supports and local host is in
fact also a build machine. Having explicit supported system declaration
would:
1. allow better error messages ("can't build for `targetX`" instead of
failing to build actual derivations)
2. provide more data to the offloading algorithm. It could then select
the current host when necessary
3. potentially allow to get rid of the `--system` build parameter (or
replace it with `--build-type=native|emulated|cross`).