From df6741aeeb4145f2330e137f905a498368b323bf Mon Sep 17 00:00:00 2001 From: Attilio Borello Date: Wed, 3 May 2017 06:00:05 +0200 Subject: [PATCH] Makefile target to enable parallel jobs - fixed dependencies order and renamed Makefile target - extracted docker run params into DOCKER_RUN_OPTS - crossbinary-default contains 64bit Linux, Win and Darwin - crossbinary-others contains 32bit Linux, Win, Darwin and 32/64bit *bsd - added dependencies to crossbinary-default and crossbinary-others targets --- Makefile | 16 +++++++++++- script/crossbinary-default | 40 ++++++++++++++++++++++++++++++ script/crossbinary-others | 51 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 1 deletion(-) create mode 100755 script/crossbinary-default create mode 100755 script/crossbinary-others diff --git a/Makefile b/Makefile index 27939f8b5..803510bc8 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,10 @@ TRAEFIK_IMAGE := $(if $(REPONAME),$(REPONAME),"containous/traefik") INTEGRATION_OPTS := $(if $(MAKE_DOCKER_HOST),-e "DOCKER_HOST=$(MAKE_DOCKER_HOST)", -v "/var/run/docker.sock:/var/run/docker.sock") DOCKER_BUILD_ARGS := $(if $(DOCKER_VERSION), "--build-arg=DOCKER_VERSION=$(DOCKER_VERSION)",) -DOCKER_RUN_TRAEFIK := docker run $(INTEGRATION_OPTS) -it $(TRAEFIK_ENVS) $(TRAEFIK_MOUNT) "$(TRAEFIK_DEV_IMAGE)" +DOCKER_RUN_OPTS := $(TRAEFIK_ENVS) $(TRAEFIK_MOUNT) "$(TRAEFIK_DEV_IMAGE)" +DOCKER_RUN_TRAEFIK := docker run $(INTEGRATION_OPTS) -it $(DOCKER_RUN_OPTS) +DOCKER_RUN_TRAEFIK_NOTTY := docker run $(INTEGRATION_OPTS) -i $(DOCKER_RUN_OPTS) + print-%: ; @echo $*=$($*) @@ -36,6 +39,17 @@ binary: generate-webui build ## build the linux binary crossbinary: generate-webui build ## cross build the non-linux binaries $(DOCKER_RUN_TRAEFIK) ./script/make.sh generate crossbinary +crossbinary-parallel: + $(MAKE) generate-webui + $(MAKE) build + $(MAKE) crossbinary-default crossbinary-others + +crossbinary-default: generate-webui build + $(DOCKER_RUN_TRAEFIK_NOTTY) ./script/make.sh generate crossbinary-default + +crossbinary-others: generate-webui build + $(DOCKER_RUN_TRAEFIK_NOTTY) ./script/make.sh generate crossbinary-others + test: build ## run the unit and integration tests $(DOCKER_RUN_TRAEFIK) ./script/make.sh generate test-unit binary test-integration diff --git a/script/crossbinary-default b/script/crossbinary-default new file mode 100755 index 000000000..c4831d829 --- /dev/null +++ b/script/crossbinary-default @@ -0,0 +1,40 @@ +#!/bin/bash +set -e + +if ! test -e autogen/gen.go; then + echo >&2 'error: generate must be run before crossbinary' + false +fi + +if [ -z "$VERSION" ]; then + VERSION=$(git rev-parse HEAD) +fi + +if [ -z "$CODENAME" ]; then + CODENAME=cheddar +fi + +if [ -z "$DATE" ]; then + DATE=$(date -u '+%Y-%m-%d_%I:%M:%S%p') +fi + +# Build 386 amd64 binaries +OS_PLATFORM_ARG=(linux windows darwin) +OS_ARCH_ARG=(amd64) +for OS in ${OS_PLATFORM_ARG[@]}; do + for ARCH in ${OS_ARCH_ARG[@]}; do + echo "Building binary for $OS/$ARCH..." + GOARCH=$ARCH GOOS=$OS CGO_ENABLED=0 go build -ldflags "-s -w -X github.com/containous/traefik/version.Version=$VERSION -X github.com/containous/traefik/version.Codename=$CODENAME -X github.com/containous/traefik/version.BuildDate=$DATE" -o "dist/traefik_$OS-$ARCH" ./cmd/traefik/ + done +done + + +# Build arm64 binaries +OS_PLATFORM_ARG=(linux) +OS_ARCH_ARG=(arm64) +for OS in ${OS_PLATFORM_ARG[@]}; do + for ARCH in ${OS_ARCH_ARG[@]}; do + echo "Building binary for $OS/$ARCH..." + GOARCH=$ARCH GOOS=$OS CGO_ENABLED=0 go build -ldflags "-s -w -X github.com/containous/traefik/version.Version=$VERSION -X github.com/containous/traefik/version.Codename=$CODENAME -X github.com/containous/traefik/version.BuildDate=$DATE" -o "dist/traefik_$OS-$ARCH" ./cmd/traefik/ + done +done diff --git a/script/crossbinary-others b/script/crossbinary-others new file mode 100755 index 000000000..fb968cd8f --- /dev/null +++ b/script/crossbinary-others @@ -0,0 +1,51 @@ +#!/bin/bash +set -e + +if ! test -e autogen/gen.go; then + echo >&2 'error: generate must be run before crossbinary' + false +fi + +if [ -z "$VERSION" ]; then + VERSION=$(git rev-parse HEAD) +fi + +if [ -z "$CODENAME" ]; then + CODENAME=cheddar +fi + +if [ -z "$DATE" ]; then + DATE=$(date -u '+%Y-%m-%d_%I:%M:%S%p') +fi + +# Build arm binaries +OS_PLATFORM_ARG=(linux windows darwin) +OS_ARCH_ARG=(386) +for OS in ${OS_PLATFORM_ARG[@]}; do + for ARCH in ${OS_ARCH_ARG[@]}; do + echo "Building binary for $OS/$ARCH..." + GOARCH=$ARCH GOOS=$OS CGO_ENABLED=0 go build -ldflags "-s -w -X github.com/containous/traefik/version.Version=$VERSION -X github.com/containous/traefik/version.Codename=$CODENAME -X github.com/containous/traefik/version.BuildDate=$DATE" -o "dist/traefik_$OS-$ARCH" ./cmd/traefik/ + done +done + +# Build Bsd binaries +OS_PLATFORM_ARG=(freebsd openbsd) +OS_ARCH_ARG=(386 amd64) +for OS in ${OS_PLATFORM_ARG[@]}; do + for ARCH in ${OS_ARCH_ARG[@]}; do + # Get rid of existing binaries + rm -f dist/traefik_$OS-$ARCH + echo "Building binary for $OS/$ARCH..." + GOARCH=$ARCH GOOS=$OS CGO_ENABLED=0 go build -ldflags "-s -w -X github.com/containous/traefik/version.Version=$VERSION -X github.com/containous/traefik/version.Codename=$CODENAME -X github.com/containous/traefik/version.BuildDate=$DATE" -o "dist/traefik_$OS-$ARCH" ./cmd/traefik/ + done +done + +# Build arm binaries +OS_PLATFORM_ARG=(linux) +OS_ARCH_ARG=(arm) +for OS in ${OS_PLATFORM_ARG[@]}; do + for ARCH in ${OS_ARCH_ARG[@]}; do + echo "Building binary for $OS/$ARCH..." + GOARCH=$ARCH GOOS=$OS CGO_ENABLED=0 go build -ldflags "-s -w -X github.com/containous/traefik/version.Version=$VERSION -X github.com/containous/traefik/version.Codename=$CODENAME -X github.com/containous/traefik/version.BuildDate=$DATE" -o "dist/traefik_$OS-$ARCH" ./cmd/traefik/ + done +done