Message ID | 20180702143021.18864-21-alex.bennee@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | Travis, Code Coverage and Cross Build updates | expand |
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.bennee@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
On 07/02/2018 05:35 PM, Philippe Mathieu-Daudé wrote: > 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.bennee@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 Using the following patch speeds up indeed: -- >8 -- @@ -10,4 +10,7 @@ # FROM qemu:debian-powerpc-user -RUN apt-get update && apt-get build-dep -yy qemu +RUN echo man-db man-db/auto-update boolean false | debconf-set-selections + +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get build-dep -yy qemu ---
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
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.bennee@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 -- 2.17.1