On 07/02/2018 11:30 AM, Alex Bennée wrote: > We can't use cross compilers in the current Debian stable and Debian > sid is sketchy as hell. So for powerpc fall back to dog-fooding our > own linux-user to do the build. > > As we can only build the base image with a suitably configured > source tree we fall back to checking for it's existence when we can't > build it from scratch. However this does mean you don't have to keep > a static powerpc-linux-user in your active configuration just to > update the cross build image. > > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > > --- > v3 > - fix for rename of docker-binfmt-image-debian-powerpc-user > --- > tests/docker/Makefile.include | 29 +++++++++++++++++++ > .../debian-powerpc-user-cross.docker | 13 +++++++++ > 2 files changed, 42 insertions(+) > create mode 100644 tests/docker/dockerfiles/debian-powerpc-user-cross.docker > > diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include > index fdc87b8a57..85801702dd 100644 > --- a/tests/docker/Makefile.include > +++ b/tests/docker/Makefile.include > @@ -119,6 +119,31 @@ docker-image-travis: NOUSER=1 > # Specialist build images, sometimes very limited tools > docker-image-tricore-cross: docker-image-debian9 > > +# Rules for building linux-user powered images > +# > +# These are slower than using native cross compiler setups but can > +# work around issues with poorly working multi-arch systems and broken > +# packages. > + > +ifeq ($(filter > ppc-linux-user,$(TARGET_LIST))$(CONFIG_STATIC),ppc-linux-usery) > +# Jessie is the last supported release for powerpc, but multi-arch is > +# broken so we need a qemu-linux-user for this target > +docker-binfmt-image-debian-powerpc-user: DEB_ARCH = powerpc > +docker-binfmt-image-debian-powerpc-user: DEB_TYPE = jessie > +docker-binfmt-image-debian-powerpc-user: EXECUTABLE = > ${BUILD_DIR}/ppc-linux-user/qemu-ppc > +DOCKER_USER_IMAGES += debian-powerpc-user > +else > +docker-binfmt-image-debian-powerpc-user: > + $(call quiet-command, \ > + $(DOCKER_SCRIPT) check --quiet qemu:debian-powerpc-user \ > + $(DOCKER_FILES_DIR)/debian-bootstrap.docker, \ > + "CHECK", "debian-powerpc-user exists") > +endif > + > +# We build the QEMU compiler environment on top of the base image > +docker-image-debian-powerpc-user-cross: > docker-binfmt-image-debian-powerpc-user > + > + > # Expand all the pre-requistes for each docker image and test combination > $(foreach i,$(filter-out $(DOCKER_INTERMEDIATE_IMAGES),$(DOCKER_IMAGES) > $(DOCKER_DEPRECATED_IMAGES)), \ > $(foreach t,$(DOCKER_TESTS) $(DOCKER_TOOLS), \ > @@ -154,6 +179,10 @@ docker: > @echo > @echo 'Available container images:' > @echo ' $(DOCKER_IMAGES)' > +ifneq ($(DOCKER_USER_IMAGES),) > + @echo 'Available linux-user images:' > + @echo ' $(DOCKER_USER_IMAGES)' > +endif > @echo > @echo 'Available tests:' > @echo ' $(DOCKER_TESTS)' > diff --git a/tests/docker/dockerfiles/debian-powerpc-user-cross.docker > b/tests/docker/dockerfiles/debian-powerpc-user-cross.docker > new file mode 100644 > index 0000000000..eadb142792 > --- /dev/null > +++ b/tests/docker/dockerfiles/debian-powerpc-user-cross.docker > @@ -0,0 +1,13 @@ > +# > +# Docker powerpc cross-compiler target for QEMU > +# > +# We can't use current Debian stable cross-compilers to build powerpc > +# as it has been dropped as a release architecture. Using Debian Sid > +# is just far too sketchy a build environment. This leaves us the > +# final option of using linux-user. This image is based of the > +# debootstrapped qemu:debian-powerpc-user but doesn't need any extra > +# magic once it is setup. > +# > +FROM qemu:debian-powerpc-user > + > +RUN apt-get update && apt-get build-dep -yy qemu
RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get build-dep -yy qemu to avoid the various: ... debconf: (TERM is not set, so the dialog frontend is not usable.) ... Also I think we should use the "Don't rebuild man-db" trick: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=561539#15