diff --git a/Makefile b/Makefile index 2c2762b9..ece9c260 100644 --- a/Makefile +++ b/Makefile @@ -17,15 +17,15 @@ QEMU_VERSION=v2.7.0 # A list of all supported architectures here. Should be named as Go is naming platforms # All supported architectures must have an "ifeq" block below that customizes the parameters -ALL_ARCHITECTURES=amd64 arm arm64 -ML_PLATFORMS=linux/amd64,linux/arm,linux/arm64 +ALL_ARCHITECTURES=amd64 arm arm64 ppc64le +ML_PLATFORMS=linux/amd64,linux/arm,linux/arm64,linux/ppc64le ifeq ($(ARCH),amd64) # The architecture to use when downloading the docker binary WEAVEEXEC_DOCKER_ARCH?=x86_64 # The name of the alpine baseimage to use as the base for weave images - ALPINE_BASEIMAGE?=alpine:3.4 + ALPINE_BASEIMAGE?=alpine:3.6 # The extension for the made images # Specifying none means for example weaveworks/weave:latest @@ -42,7 +42,7 @@ ifeq ($(ARCH),arm) WEAVEEXEC_DOCKER_ARCH?=armel # Using the (semi-)official alpine image - ALPINE_BASEIMAGE?=armhf/alpine:3.4 + ALPINE_BASEIMAGE?=arm32v6/alpine:3.6 # arm images have the -arm suffix, for instance weaveworks/weave-arm:latest ARCH_EXT?=-arm @@ -62,7 +62,7 @@ ifeq ($(ARCH),arm64) WEAVEEXEC_DOCKER_ARCH?=armel # Using the (semi-)official alpine image - ALPINE_BASEIMAGE?=aarch64/alpine:3.5 + ALPINE_BASEIMAGE?=arm64v8/alpine:3.6 # arm64 images have the -arm64 suffix, for instance weaveworks/weave-arm64:latest ARCH_EXT?=-arm64 @@ -77,6 +77,26 @@ ifeq ($(ARCH),arm64) # Tell the gcc linker to search for libpcap here CGO_LDFLAGS="-L/usr/local/lib/$(CC)" endif +ifeq ($(ARCH),ppc64le) +# The architecture to use when downloading the docker binary + WEAVEEXEC_DOCKER_ARCH?=ppc64le + +# Using the (semi-)official alpine image + ALPINE_BASEIMAGE?=ppc64le/alpine:3.6 + +# ppc64le images have the -ppc64le suffix, for instance weaveworks/weave-ppc64le:latest + ARCH_EXT?=-ppc64le + +# The name of the gcc binary + CC=powerpc64le-linux-gnu-gcc + +# The architecture name to use when downloading a prebuilt QEMU binary + QEMUARCH=ppc64le + +# In the weaveworks/build image; libpcap libraries for ppc64le are placed here +# Tell the gcc linker to search for libpcap here + CGO_LDFLAGS="-L/usr/local/lib/$(CC)" +endif # The name of the user that this Makefile should produce image artifacts for. Can/should be overridden DOCKERHUB_USER?=weaveworks @@ -244,7 +264,7 @@ ifeq ($(ARCH),amd64) sed -i.bak "/CROSS_BUILD_/d" $@ else # When cross-building, only the placeholder "CROSS_BUILD_" should be removed -# Register /usr/bin/qemu-ARCH-static as the handler for ARM binaries in the kernel +# Register /usr/bin/qemu-ARCH-static as the handler for ARM and ppc64le binaries in the kernel curl -sSL https://github.com/multiarch/qemu-user-static/releases/download/$(QEMU_VERSION)/x86_64_qemu-$(QEMUARCH)-static.tar.gz | tar -xz -C $(shell dirname $@) cd $(shell dirname $@) && sha256sum -c $(shell pwd)/build/shasums/qemu-$(QEMUARCH)-static.sha256sum sed -i.bak "s/CROSS_BUILD_//g" $@ @@ -334,7 +354,7 @@ publish-one-arch: $(PUBLISH) $(PUBLISH): publish_%: $(IMAGES_UPTODATE) # Tag :latest with the real version $(SUDO) DOCKER_HOST=$(DOCKER_HOST) docker tag $(DOCKERHUB_USER)/$*$(ARCH_EXT) $(DOCKERHUB_USER)/$*$(ARCH_EXT):$(WEAVE_VERSION) -# Push the image with the arch suffix for arm and arm64, and without suffix for amd64 +# Push the image with the arch suffix for arm, arm64 and ppc64le, and without suffix for amd64 $(MAKE) DOCKER_HOST=$(DOCKER_HOST) DOCKERHUB_USER=$(DOCKERHUB_USER) WEAVE_VERSION=$(WEAVE_VERSION) UPDATE_LATEST=$(UPDATE_LATEST) push_$*$(ARCH_EXT) ifeq ($(ARCH),amd64) diff --git a/build/Dockerfile b/build/Dockerfile index 291d22e3..b65242cd 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -6,17 +6,20 @@ ENV GOARM 7 # The names of the architectures that we're fetching cross-compilers for from the Debian packages ENV DEB_CROSSPLATFORMS \ armhf \ - arm64 + arm64 \ + ppc64el # The go platforms we are supporting to cross-compile ENV GO_CROSSPLATFORMS \ linux/arm \ - linux/arm64 + linux/arm64 \ + linux/ppc64le # The names of the gcc cross-compilers we have installed ENV GCC_CROSSCOMPILERS \ arm-linux-gnueabihf \ - aarch64-linux-gnu + aarch64-linux-gnu \ + powerpc64le-linux-gnu # Temporarily add the Debian repositories, because we're going to install gcc cross-compilers from there # Install the build-essential and crossbuild-essential-ARCH packages diff --git a/build/shasums/qemu-ppc64le-static.sha256sum b/build/shasums/qemu-ppc64le-static.sha256sum new file mode 100644 index 00000000..8060ee0f --- /dev/null +++ b/build/shasums/qemu-ppc64le-static.sha256sum @@ -0,0 +1 @@ +926f7f265332076ea4abf6e9586288376dbed2322c155b8d0cafbee614aaa7f2 qemu-ppc64le-static