To be able to cross build QEMU itself we need to include a few more libraries. These are only available in Debian's unstable ports repo for now so we need:
- a debian-sid base image with a few tools - tweak the riscv64 image to use it - add the minimal libs needed to build QEMU (glib/pixman) The result works but is not as clean as using build-dep to bring in more dependencies. However sid is by definition a shifting pile of sand and by keeping the list of libs minimal we reduce the chance of having an image we can't build. It's good enough for a basic cross build test. Signed-off-by: Alex Bennée <alex.ben...@linaro.org> Cc: Richard Henderson <richard.hender...@linaro.org> Cc: "Daniel P. Berrangé" <berra...@redhat.com> --- tests/docker/Makefile.include | 5 ++- .../dockerfiles/debian-riscv64-cross.docker | 15 ++++++--- tests/docker/dockerfiles/debian-sid.docker | 33 +++++++++++++++++++ 3 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 tests/docker/dockerfiles/debian-sid.docker diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index ff5d732889..df56796405 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -11,7 +11,7 @@ HOST_ARCH = $(if $(ARCH),$(ARCH),$(shell uname -m)) DOCKER_SUFFIX := .docker DOCKER_FILES_DIR := $(SRC_PATH)/tests/docker/dockerfiles # we don't run tests on intermediate images (used as base by another image) -DOCKER_PARTIAL_IMAGES := debian10 debian11 debian-bootstrap empty +DOCKER_PARTIAL_IMAGES := debian10 debian11 debian-sid debian-bootstrap empty DOCKER_IMAGES := $(sort $(notdir $(basename $(wildcard $(DOCKER_FILES_DIR)/*.docker)))) DOCKER_TARGETS := $(patsubst %,docker-image-%,$(DOCKER_IMAGES)) # Use a global constant ccache directory to speed up repetitive builds @@ -141,7 +141,7 @@ docker-image-debian-mips64-cross: docker-image-debian10 docker-image-debian-mips64el-cross: docker-image-debian10 docker-image-debian-mipsel-cross: docker-image-debian10 docker-image-debian-ppc64el-cross: docker-image-debian10 -docker-image-debian-riscv64-cross: docker-image-debian10 +docker-image-debian-riscv64-cross: docker-image-debian-sid docker-image-debian-s390x-cross: docker-image-debian10 docker-image-debian-sh4-cross: docker-image-debian10 docker-image-debian-sparc64-cross: docker-image-debian10 @@ -180,7 +180,6 @@ DOCKER_PARTIAL_IMAGES += debian-arm64-test-cross DOCKER_PARTIAL_IMAGES += debian-powerpc-test-cross DOCKER_PARTIAL_IMAGES += debian-hppa-cross DOCKER_PARTIAL_IMAGES += debian-m68k-cross debian-mips64-cross -DOCKER_PARTIAL_IMAGES += debian-riscv64-cross DOCKER_PARTIAL_IMAGES += debian-sh4-cross debian-sparc64-cross DOCKER_PARTIAL_IMAGES += debian-tricore-cross DOCKER_PARTIAL_IMAGES += debian-xtensa-cross diff --git a/tests/docker/dockerfiles/debian-riscv64-cross.docker b/tests/docker/dockerfiles/debian-riscv64-cross.docker index 2bbff19772..0f7e5e010e 100644 --- a/tests/docker/dockerfiles/debian-riscv64-cross.docker +++ b/tests/docker/dockerfiles/debian-riscv64-cross.docker @@ -1,12 +1,19 @@ # # Docker cross-compiler target # -# This docker target builds on the debian Buster base image. +# This docker target builds on the Debian Sid (with ports) base image. # -FROM qemu/debian10 +FROM qemu/debian-sid +RUN dpkg --add-architecture riscv64 RUN apt update && \ DEBIAN_FRONTEND=noninteractive eatmydata \ apt install -y --no-install-recommends \ - gcc-riscv64-linux-gnu \ - libc6-dev-riscv64-cross + gcc-riscv64-linux-gnu \ + libc6-dev-riscv64-cross \ + libglib2.0-dev:riscv64 \ + libpixman-1-dev:riscv64 + +# Specify the cross prefix for this image (see tests/docker/common.rc) +ENV QEMU_CONFIGURE_OPTS --cross-prefix=riscv64-linux-gnu- +ENV DEF_TARGET_LIST riscv64-softmmu,riscv64-linux-user diff --git a/tests/docker/dockerfiles/debian-sid.docker b/tests/docker/dockerfiles/debian-sid.docker new file mode 100644 index 0000000000..cb2fdf0d4f --- /dev/null +++ b/tests/docker/dockerfiles/debian-sid.docker @@ -0,0 +1,33 @@ +# +# Docker sid/ports base packages +# +# This docker target uses the current unstable version of Debian as +# a base for building QEMU for architectures yet to have an official +# port. +# +# On its own you can't build much but the docker-foo-cross targets +# build on top of the base debian image. +# +FROM docker.io/library/debian:sid-slim + +# Add ports +RUN apt update && \ + DEBIAN_FRONTEND=noninteractive apt install -yy eatmydata +RUN DEBIAN_FRONTEND=noninteractive eatmydata \ + apt install -yy debian-ports-archive-keyring + +RUN echo "deb http://ftp.ports.debian.org/debian-ports/ sid main" >> /etc/apt/sources.list + +# Duplicate deb line as deb-src +RUN cat /etc/apt/sources.list | sed "s/^deb\ /deb-src /" >> /etc/apt/sources.list + +# Install common build utilities +RUN DEBIAN_FRONTEND=noninteractive eatmydata \ + apt upgrade -yy +RUN DEBIAN_FRONTEND=noninteractive eatmydata apt install -yy \ + binutils \ + dpkg-dev \ + make \ + ninja-build \ + python3 \ + pkg-config -- 2.30.2