Adding the list to Cc so at least this discussion could be archived...

On Fri, Jul 31, 2026 at 04:16:38PM +0200, Heinrich Schuchardt wrote:
> On 7/31/26 13:47, Yao Zi wrote:
> > From: Jiaxun Yang <[email protected]>
> > 
> > Install LoongArch64 toolchains, build LoongArch64 QEMU,
> > build LoongArch64 GRUB.
> > 
> > Signed-off-by: Jiaxun Yang <[email protected]>
> > Signed-off-by: Yao Zi <[email protected]>
> > ---
> >   tools/docker/Dockerfile | 21 ++++++++++++++++++---
> >   1 file changed, 18 insertions(+), 3 deletions(-)
> > 
> > diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile
> > index fb8e2c523aad..187320c26d59 100644
> > --- a/tools/docker/Dockerfile
> > +++ b/tools/docker/Dockerfile
> > @@ -17,7 +17,7 @@ ARG BUILDPLATFORM
> >   ENV DEBIAN_FRONTEND=noninteractive
> >   # Set architectures to build for (leaving out ARM which is an exception)
> > -ENV ARCHS="aarch64 arc i386 m68k mips microblaze nios2 powerpc riscv64 
> > riscv32 sh2 x86_64"
> > +ENV ARCHS="aarch64 arc i386 loongarch64 m68k mips microblaze nios2 powerpc 
> > riscv64 riscv32 sh2 x86_64"
> >   # Mirror containing the toolchains
> >   ENV MIRROR=https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin
> > @@ -153,7 +153,8 @@ RUN 
> > --mount=type=cache,target=/var/cache/apt,sharing=locked \
> >     xxd \
> >     zip
> > -# Build GRUB UEFI targets for ARM & RISC-V, 32-bit and 64-bit
> > +# Build GRUB UEFI targets for ARM & RISC-V, 32-bit and 64-bit, and 
> > LoongArch
> > +# 64-bit
> >   RUN git clone https://https.git.savannah.gnu.org/git/grub.git /tmp/grub 
> > && \
> >     cd /tmp/grub && \
> >     git checkout grub-2.14 && \
> > @@ -189,6 +190,20 @@ RUN git clone 
> > https://https.git.savannah.gnu.org/git/grub.git /tmp/grub && \
> >     search search_fs_file search_fs_uuid search_label serial sleep test \
> >     true && \
> >     make clean && \
> > +   ./configure --target=loongarch64 --with-platform=efi \
> > +   CC=gcc \
> > +   
> > TARGET_CC=/opt/gcc-${TCVER}-nolibc/loongarch64-linux/bin/loongarch64-linux-gcc
> >  \
> > +   
> > TARGET_OBJCOPY=/opt/gcc-${TCVER}-nolibc/loongarch64-linux/bin/loongarch64-linux-objcopy
> >  \
> > +   
> > TARGET_STRIP=/opt/gcc-${TCVER}-nolibc/loongarch64-linux/bin/loongarch64-linux-strip
> >  \
> > +   
> > TARGET_NM=/opt/gcc-${TCVER}-nolibc/loongarch64-linux/bin/loongarch64-linux-nm
> >  \
> > +   
> > TARGET_RANLIB=/opt/gcc-${TCVER}-nolibc/loongarch64-linux/bin/loongarch64-linux-ranlib
> >  && \
> > +   make -j$(nproc) && \
> > +   ./grub-mkimage -O loongarch64-efi -o /opt/grub/grubloongarch64.efi 
> > --prefix= -d \
> > +   grub-core cat chain configfile echo efinet ext2 fat halt help linux \
> > +   lsefisystab loadenv lvm minicmd normal part_msdos part_gpt reboot \
> > +   search search_fs_file search_fs_uuid search_label serial sleep test \
> > +   true && \
> > +   make clean && \
> 
> We repeat ourselves a lot in the Dockerfile for building grub.
> 
> How about:
> 
> for arch in aarch64, i386, loongarch64, riscv64, x86_64; do
>       ./configure --target=$arch --with-platform=efi \
>       CC=gcc \
>       
> TARGET_CC=/opt/gcc-${TCVER}-nolibc/$arch-linux/bin/loongarch64-linux-gcc \
>       
> TARGET_OBJCOPY=/opt/gcc-${TCVER}-nolibc/$arch-linux/bin/loongarch64-linux-objcopy
>  \
>       
> TARGET_STRIP=/opt/gcc-${TCVER}-nolibc/$arch-linux/bin/loongarch64-linux-strip 
> \
>       TARGET_NM=/opt/gcc-${TCVER}-nolibc/$arch-linux/bin/loongarch64-linux-nm 
> \
>       
> TARGET_RANLIB=/opt/gcc-${TCVER}-nolibc/$arch-linux/bin/loongarch64-linux-ranlib
>  && \
>       make -j$(nproc) && \
>       ./grub-mkimage -O $arch -o /opt/grub/grubloongarch64.efi --prefix= -d \
>       grub-core cat chain configfile echo efinet ext2 fat halt help linux \
>       lsefi lsefimmap lsefisystab loadenv lvm minicmd normal part_msdos 
> part_gpt
> reboot \
>       search search_fs_file search_fs_uuid search_label serial sleep test 
> tftp \
>       true && \
> done
> 
> Adding a few more modules to each architecture does not harm.

This is a good idea, but some of grub file names don't match the arch name
in the triple,

- i386: grub_x86.efi
- x86_64: grub_x64.efi
- arm: grubarm.efi
- aarch64: grubaa64.efi
- riscv64: grubriscv64.efi
- loongarch64: grubloongarch64.efi

so we need a mapping between them, maybe a bash array. Or, these names
seem to be refered only in u-boot-test-hooks as
env__efi_loader_grub_file, so I think alternatively we could update the
repository to use file names consistent with the tripple.

I'd prefer the latter since it looks cleaner, though the change might be
a little complex to fit in this series (involving updating workflow and
u-boot-test-hooks in a correct order so no CI run gets broken).

Best regards,
Yao Zi

> Best regards
> 
> Heinrich
> 
> >     grub_cv_cc_mcmodel=no ./configure --target=riscv64 --with-platform=efi \
> >     CC=gcc \
> >     TARGET_CC=/opt/gcc-${TCVER}-nolibc/riscv64-linux/bin/riscv64-linux-gcc \
> > @@ -232,7 +247,7 @@ RUN git clone https://gitlab.com/qemu-project/qemu.git 
> > /tmp/qemu && \
> >     # config user.name and user.email to make 'git am' happy
> >     git config user.name u-boot && \
> >     git config user.email [email protected] && \
> > -   ./configure --prefix=/opt/qemu 
> > --target-list="aarch64-softmmu,arm-softmmu,i386-softmmu,m68k-softmmu,mips-softmmu,mips64-softmmu,mips64el-softmmu,mipsel-softmmu,ppc-softmmu,riscv32-softmmu,riscv64-softmmu,sh4-softmmu,x86_64-softmmu,xtensa-softmmu"
> >  && \
> > +   ./configure --prefix=/opt/qemu 
> > --target-list="aarch64-softmmu,arm-softmmu,i386-softmmu,loongarch64-softmmu,m68k-softmmu,mips-softmmu,mips64-softmmu,mips64el-softmmu,mipsel-softmmu,ppc-softmmu,riscv32-softmmu,riscv64-softmmu,sh4-softmmu,x86_64-softmmu,xtensa-softmmu"
> >  && \
> >     make -j$(nproc) all install && \
> >     rm -rf /tmp/qemu
> 

Reply via email to