Subject: Re: bug#65860: [PATCH 0/4] Resolve a circular module dependencies in embedded modules

From: Ludovic Courtès <[email-masked]>
Date: Wed, 13 Sep 2023 22:27:36 +0200

Hi,

Maxim Cournoyer <[email-masked]> skribis:

> Partially addresses <https://issues.guix.gnu.org/65716>.
>
> * gnu/packages/avr.scm: Add commentary comment.
> (avr-gcc): Turn into this...
> (make-avr-gcc): ... procedure.
> (avr-libc): Likewise, into...
> (make-avr-gcc): ... this.  Adjust native-inputs accordingly.
> (avr-toolchain): Likewise, into...
> (make-avr-toolchain): ... this.
> * gnu/packages/avr-xyz.scm (simavr) [propagated-inputs]: replace avr-toolchain
> with a call to the 'make-avr-toolchain' procedure.

[...]

> Fixes <https://issues.guix.gnu.org/65716>.
>
> Before this change, simply adding the following import:
>
>   modified   gnu/packages/firmware.scm
>   @@ -42,6 +42,7 @@ (define-module (gnu packages firmware)
>      #:use-module (gnu packages admin)
>      #:use-module (gnu packages autotools)
>      #:use-module (gnu packages assembly)
>   +  #:use-module (gnu packages avr)
>      #:use-module (gnu packages backup)
>      #:use-module (gnu packages base)
>      #:use-module (gnu packages bash)
>
> Would cause byte compilation and/or evaluation to fail due to a circular
> module dependency.
>
> * gnu/packages/embedded.scm: Add commentary.
> (gcc-arm-none-eabi-4.9, gcc-arm-none-eabi-6, newlib-arm-none-eabi)
> (newlib-nano-arm-none-eabi, gcc-arm-none-eabi-7-2018-q2-update)
> (newlib-arm-none-eabi-7-2018-q2-update)
> (newlib-nano-arm-none-eabi-7-2018-q2-update)
> (arm-none-eabi-toolchain-4.9, arm-none-eabi-nano-toolchain-4.9)
> (arm-none-eabi-toolchain-6, arm-none-eabi-nano-toolchain-6)
> (arm-none-eabi-toolchain-7-2018-q2-update, gdb-arm-none-eabi)
> (propeller-binutils, propeller-gcc-6, propeller-gcc-4)
> (propeller-gcc, propeller-toolchain, propeller-development-suite)
> (gcc-vc4): Turn into procedures, prefixing the procedure name with 'make-',
> and adjust all users.
> (make-libstdc++-arm-none-eabi) [arguments]: Avoid an unused warning.
> (arm-none-eabi-toolchain):  Rename to...
> (make-arm-none-eabi-toolchain): ... this.
> * gnu/packages/raspberry-pi.scm (raspi-arm-chainloader) [native-inputs]:
> Replace gcc-arm-none-eabi-6 with (make-arm-none-eabi-toolchain).
> * gnu/packages/axoloti.scm (axoloti-runtime)
> [inputs]: Replace arm-none-eabi-nano-toolchain-4.9
> with (make-arm-none-eabi-nano-toolchain-4.9).
> (axoloti-patcher): Likewise.
> (axoloti-patcher-next) [inputs]: Replace
> arm-none-eabi-nano-toolchain-7-2018-q2-update
> with (make-arm-none-eabi-nano-toolchain-7-2018-q2-update).

People will lose the ability to install those toolchains, for instance
with ‘guix install propeller-toolchain’, or to upgrade profiles that
contain them (though ‘guix install axoloti-runtime’ is still good, for
instance).

I’m not sure whether that’s acceptable, but we should check with known
users of this, such as Ricardo.

I’ve always felt that these toolchains should be provided as part of the
“regular” cross-compilation framework in cross-base.scm.  Packages that
always need to be cross-compiled (to AVR microcontrollers, etc.) would
have a hardcoded #:target in their ‘arguments’ field.  I forgot why this
was rejected.

Thanks,
Ludo’.