GNU bug report logs - #55343
Add support for 32bit UEFI

Previous Next

Package: guix-patches;

Reported by: Denis 'GNUtoo' Carikli <GNUtoo <at> cyberdimension.org>

Date: Mon, 9 May 2022 23:18:02 UTC

Severity: normal

Done: Mathieu Othacehe <othacehe <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #23 received at 55343 <at> debbugs.gnu.org (full text, mbox):

From: Denis 'GNUtoo' Carikli <GNUtoo <at> cyberdimension.org>
To: Maxime Devos <maximedevos <at> telenet.be>
Cc: 55343 <at> debbugs.gnu.org
Subject: Re: [bug#55343] [PATCH 2/2] image: Add new efi32-raw format for
 32bit UEFI on 64bit systems
Date: Wed, 11 May 2022 19:00:23 +0200
[Message part 1 (text/plain, inline)]
Hi,

On Tue, 10 May 2022 11:32:52 +0200
Maxime Devos <maximedevos <at> telenet.be> wrote:
>   (list #:target "i386")

I've tried that I get the following error:
> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> dynamic linker name not known for this system "i386"

This means that I have to use "i686-linux" because only "i686-linux" is
in the list of allowed values.

I've tried and this adds a cross toolchain to the list of
dependencies[1] and this doesn't work because efibootmgr which is a
dependency doesn't compile anymore as it doesn't find some of the
headers like efivar.h and efiboot.h. This could probably be fixed
somehow though.

In addition I've found the following issues with that approach:
- It hardcode the kernel (Linux or HURD) so we'd probably
  need extra logic to handle it well. With --target=i386 that is
  transparent. Note that I didn't test grub-efi32 with HURD in either
  cases.

- It doesn't support "canadian" cross compilation where the builder
  (for instance x86) builds a cross compiler to run on another
  architecture (for instance ARM) to then compile programs for another
  architecture (for instance riscv). With --target=i386 we can in
  theory do that (though I've not tested it).

And with it, I see the following advantage: since it's wrapped somehow
Guix can probably do things automatically (like checks or change
things) on all the packages that are cross compiled.

What approach do you think is best (I don't know the implementation of
(list #:target "i686-linux") so you probably know way better than me
which one is the best) ?.

If (list #:target "i686-linux") is the way to go, do you have any
pointers to make it find the headers it needs? I've attached its build
log in case it is useful.

References:
-----------
[1] Here's the output when trying to build grub-efi32 with
    (list #:target "i686-linux"):
> $ ./pre-inst-env guix package -i grub-efi32
> The following package will be upgraded:
>    grub-efi32 (dependencies or package changed)
> 
> The following derivations will be built:
>   /gnu/store/j4divh7pf1bxr11ivzddqhsihan6ij4p-util-linux-2.37.2.drv
>   /gnu/store/h86glf6qlyfmf214qj6xsqbj8vmrfss9-zlib-1.2.11.drv
>   /gnu/store/hy4x62rrx3gqdnn476dja6im74pxzkpk-glibc-cross-i686-linux-2.33.drv
>   /gnu/store/1qynvffnfnf7dlzmrkrkx7nzxq6mkz1k-gcc-cross-sans-libc-i686-linux-10.3.0.drv
>   /gnu/store/kyr74wyvikyldkx9a0zd55fmxjs6862c-binutils-cross-i686-linux-2.37.drv
>   /gnu/store/wc7zhlgnzrg9z5w5wqyvkwlg0ninavs1-ld-wrapper-i686-linux-0.drv
>   /gnu/store/i4h82qxwyaj3i97rgcvh6khfibbj4x3p-linux-libre-headers-cross-i686-linux-5.10.35.drv
>   /gnu/store/j4w5c2iqvm9ylfnc2gsadipngl00labp-gcc-cross-i686-linux-10.3.0.drv
>   /gnu/store/y15y0pici7yhgycjv13a4hm9jjshdzzm-ncurses-6.2.20210619.drv
>   /gnu/store/l5jdw7k9mdm0af4gyklhixw447fgsnxn-pkg-config-i686-linux-0.29.2.drv
>   /gnu/store/zg2fyiwc4i4vwarbk8imi9wsgzp8z90h-file-5.39.drv

Denis.
[s1q7llv6m4nn8256hjcjx997rjf0vm-efibootmgr-17.drv.xz (application/x-xz, attachment)]
[Message part 3 (application/pgp-signature, inline)]

This bug report was last modified 3 years and 26 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.