diff mbox series

[bug#60224,v3,07/11] gnu: make-u-boot-sunxi64-package: Use gexps and adjust file name.

Message ID 20230102004637.3920-7-maxim.cournoyer@gmail.com
State New
Headers show
Series [bug#60224,v3,01/11] gnu: make-u-boot-package: Add a u-boot argument and use gexps. | expand

Commit Message

Maxim Cournoyer Jan. 2, 2023, 12:46 a.m. UTC
* gnu/packages/bootloaders.scm (make-u-boot-sunxi64-package)
[phases] {set-environment}: Replace bl31.bin with bl31.elf; bl31.elf doesn't
exist anymore for some reason.
---

(no changes since v1)

 gnu/packages/bootloaders.scm | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

Comments

Vagrant Cascadian Jan. 6, 2023, 5:17 p.m. UTC | #1
On 2023-01-01, Maxim Cournoyer wrote:
> * gnu/packages/bootloaders.scm (make-u-boot-sunxi64-package)
> [phases] {set-environment}: Replace bl31.bin with bl31.elf; bl31.elf doesn't
> exist anymore for some reason.

Seems like the description is the inverse of what it is actually
doing. But what it is doing is ... not right either. :/

This appears to repurpose a function targeted at sunxi64 platforms for
rockchip platforms.

Seems like you might want to make a make-u-boot-rockchip-package
function instead?

More details below...

>  gnu/packages/bootloaders.scm | 17 +++++++----------
>  1 file changed, 7 insertions(+), 10 deletions(-)
>
> diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
> index 8a56ee9cec..a19d1ebf17 100644
> --- a/gnu/packages/bootloaders.scm
> +++ b/gnu/packages/bootloaders.scm
> @@ -1005,17 +1005,14 @@ (define*-public (make-u-boot-sunxi64-package board triplet
>        (arguments
>         (substitute-keyword-arguments (package-arguments base)
>           ((#:phases phases)
> -          `(modify-phases ,phases
> -             (add-after 'unpack 'set-environment
> -               (lambda* (#:key native-inputs inputs #:allow-other-keys)
> -                 (let ((bl31
> -                        (string-append
> -                         (assoc-ref (or native-inputs inputs) "firmware")
> -                         "/bl31.bin")))
> -                   (setenv "BL31" bl31))))))))
> +          #~(modify-phases #$phases
> +              (add-after 'unpack 'set-environment
> +                (lambda* (#:key native-inputs inputs #:allow-other-keys)
> +                  (setenv "BL31" (search-input-file (or native-inputs inputs)
> +                                                    "bl31.elf"))))))))

bl31.elf is built on rockchip platforms, but not sunxi/allwinner
platforms. The sunxi/allwinner platforms need bl31.bin.


>        (native-inputs
> -       `(("firmware" ,arm-trusted-firmware-sun50i-a64)
> -         ,@(package-native-inputs base))))))
> +       (modify-inputs (package-native-inputs base)
> +         (append arm-trusted-firmware-rk3399))))))

This is absolutely incorrect, as this forces it to be rk3399, which is
not even a sunxi platform, and will break all the sun50i-a64 platforms
(e.g. pine64, pinebook).  That said, there are technically sunxi64
platforms that would use a different arm-trusted-firmware build, so this
could use improving.


live well,
  vagrant
Maxim Cournoyer Jan. 11, 2023, 7:55 p.m. UTC | #2
Hi Vagrant!

Vagrant Cascadian <vagrant@debian.org> writes:

> On 2023-01-01, Maxim Cournoyer wrote:
>> * gnu/packages/bootloaders.scm (make-u-boot-sunxi64-package)
>> [phases] {set-environment}: Replace bl31.bin with bl31.elf; bl31.elf doesn't
>> exist anymore for some reason.
>
> Seems like the description is the inverse of what it is actually
> doing. But what it is doing is ... not right either. :/

[...]

>> +          #~(modify-phases #$phases
>> +              (add-after 'unpack 'set-environment
>> +                (lambda* (#:key native-inputs inputs #:allow-other-keys)
>> +                  (setenv "BL31" (search-input-file (or native-inputs inputs)
>> +                                                    "bl31.elf"))))))))
>
> bl31.elf is built on rockchip platforms, but not sunxi/allwinner
> platforms. The sunxi/allwinner platforms need bl31.bin.

This ^ ...
>
>>        (native-inputs
>> -       `(("firmware" ,arm-trusted-firmware-sun50i-a64)
>> -         ,@(package-native-inputs base))))))
>> +       (modify-inputs (package-native-inputs base)
>> +         (append arm-trusted-firmware-rk3399))))))
>

... was the product of the above typo; thanks for catching it!

> This is absolutely incorrect, as this forces it to be rk3399, which is
> not even a sunxi platform, and will break all the sun50i-a64 platforms
> (e.g. pine64, pinebook).  That said, there are technically sunxi64
> platforms that would use a different arm-trusted-firmware build, so this
> could use improving.

I've now removed that commit; and undid the previous change to, which
was based on that mistake.

I'll sent a v4 shortly.

I've noted something annoying though; is that cross-compiling doesn't
work yet because U-Boot uses python packages, which barfs like:

--8<---------------cut here---------------start------------->8---
$ ./pre-inst-env guix build u-boot-puma-rk3399 guix build: error: gnu/packages/check.scm:1997:2:
python-coverage@5.2.1: build system `python' does not support cross
builds
--8<---------------cut here---------------end--------------->8---

So currently the only way to build it is via --system, e.g. 'guix build
-s aarch64-linux u-boot-puma-rk3399'.  The complications I simplified
were probably papering over that issue.  That said, I see no reason we
couldn't convince our Python build system to "cross-compile" Python
packages, so I intend to look at this.  Not sure if this should be a
blocker or not.
diff mbox series

Patch

diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 8a56ee9cec..a19d1ebf17 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -1005,17 +1005,14 @@  (define*-public (make-u-boot-sunxi64-package board triplet
       (arguments
        (substitute-keyword-arguments (package-arguments base)
          ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'unpack 'set-environment
-               (lambda* (#:key native-inputs inputs #:allow-other-keys)
-                 (let ((bl31
-                        (string-append
-                         (assoc-ref (or native-inputs inputs) "firmware")
-                         "/bl31.bin")))
-                   (setenv "BL31" bl31))))))))
+          #~(modify-phases #$phases
+              (add-after 'unpack 'set-environment
+                (lambda* (#:key native-inputs inputs #:allow-other-keys)
+                  (setenv "BL31" (search-input-file (or native-inputs inputs)
+                                                    "bl31.elf"))))))))
       (native-inputs
-       `(("firmware" ,arm-trusted-firmware-sun50i-a64)
-         ,@(package-native-inputs base))))))
+       (modify-inputs (package-native-inputs base)
+         (append arm-trusted-firmware-rk3399))))))
 
 (define-public u-boot-pine64-plus
   (make-u-boot-sunxi64-package "pine64_plus" "aarch64-linux-gnu"))