Re: [PATCH v2 2/2] CI: Dockerfile: Add LoongArch64 support

Tom Rini <[email protected]> Fri, 31 Jul 2026 08:53:42 -0600
Newsgroups gmane.comp.boot-loaders.u-boot
Message-ID <20260731145342.GM1773261@bill-the-cat>
On Fri, Jul 31, 2026 at 02:36:51PM +0000, Yao Zi wrote:
> 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).

This sounds like a good cleanup to do, but yes, we should work it
afterwards to keep this small and reviewable.

-- 
Tom
signature.asc (application/pgp-signature, 228 B)
-----BEGIN PGP SIGNATURE-----

iHUEABYKAB0WIQTzzqh0PWDgGS+bTHor4qD1Cr/kCgUCamy28gAKCRAr4qD1Cr/k
ChkKAP90697gZoxscV+0T25ckCsCcs7xaTkxRZAOjoOM6AT+zQEA1wXJV99ecMk7
vPh2wpEP/OJB0Whxadg16lTpDVB6ngI=
=QecZ
-----END PGP SIGNATURE-----