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

Tom Rini <[email protected]>
Newsgroups org.u-boot-project.lists.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-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.