|
12 | 12 | # See the License for the specific language governing permissions and |
13 | 13 | # limitations under the License. |
14 | 14 |
|
15 | | -all: serve_hostname |
| 15 | +# Cross-build the serve_hostname image |
| 16 | +# |
| 17 | +# Usage: |
| 18 | +# [TAG=v1.5] [PREFIX=gcr.io/google_containers] [TEST_REGISTRY=b.gcr.io/k8s_authenticated_test] [ARCH=amd64] [BASEIMAGE=busybox] make all |
| 19 | + |
| 20 | +.PHONY: all push container clean |
| 21 | + |
| 22 | +TAG ?= v1.5 |
| 23 | + |
| 24 | +REGISTRY ?= gcr.io/google_containers |
| 25 | +TEST_REGISTRY ?= b.gcr.io/k8s_authenticated_test |
| 26 | + |
| 27 | +# Architectures supported: amd64, arm, arm64 and ppc64le |
| 28 | +ARCH ?= amd64 |
| 29 | + |
| 30 | +ALL_ARCH = amd64 arm arm64 ppc64le |
| 31 | + |
| 32 | +GOARM=6 |
| 33 | +TEMP_DIR := $(shell mktemp -d) |
| 34 | +GOLANG_VERSION = 1.6.3 |
| 35 | + |
| 36 | +BIN = serve_hostname |
| 37 | +SRCS = serve_hostname.go |
| 38 | + |
| 39 | +IMAGE = $(REGISTRY)/$(BIN)-$(ARCH) |
| 40 | +TEST_IMAGE = $(TEST_REGISTRY)/$(BIN)-$(ARCH) |
16 | 41 |
|
17 | | -TAG = v1.4 |
18 | | -PREFIX = gcr.io/google_containers |
19 | | -TEST_PREFIX = b.gcr.io/k8s_authenticated_test |
| 42 | +# Set default base image dynamically for each arch |
| 43 | +ifeq ($(ARCH),amd64) |
| 44 | + BASEIMAGE?=busybox |
| 45 | +endif |
| 46 | +ifeq ($(ARCH),arm) |
| 47 | + BASEIMAGE?=armel/busybox |
| 48 | +endif |
| 49 | +ifeq ($(ARCH),arm64) |
| 50 | + BASEIMAGE?=aarch64/busybox |
| 51 | +endif |
| 52 | +ifeq ($(ARCH),ppc64le) |
| 53 | + BASEIMAGE?=ppc64le/busybox |
| 54 | +endif |
20 | 55 |
|
21 | | -serve_hostname: serve_hostname.go |
22 | | - CGO_ENABLED=0 go build -a -installsuffix cgo --ldflags '-w' ./serve_hostname.go |
| 56 | +# If you want to build AND push all containers, see the 'all-push' rule. |
| 57 | +all: all-container |
23 | 58 |
|
24 | | -container: serve_hostname |
25 | | - docker build -t $(PREFIX)/serve_hostname:$(TAG) . |
26 | | - if [ -n "$(TEST_PREFIX)" ]; then \ |
27 | | - docker tag -f $(PREFIX)/serve_hostname:$(TAG) $(TEST_PREFIX)/serve_hostname:$(TAG); \ |
| 59 | +sub-container-%: |
| 60 | + $(MAKE) ARCH=$* container |
| 61 | + |
| 62 | +sub-push-%: |
| 63 | + $(MAKE) ARCH=$* push |
| 64 | + |
| 65 | +all-container: $(addprefix sub-container-,$(ALL_ARCH)) |
| 66 | + |
| 67 | +all-push: $(addprefix sub-push-,$(ALL_ARCH)) |
| 68 | + |
| 69 | +build: bin/$(BIN)-$(ARCH) |
| 70 | + |
| 71 | +bin/$(BIN)-$(ARCH): $(SRCS) |
| 72 | + # Copy the content in this dir to the temp dir |
| 73 | + cp ./* $(TEMP_DIR) |
| 74 | + |
| 75 | + docker run -it -v $(TEMP_DIR):/build \ |
| 76 | + golang:$(GOLANG_VERSION) \ |
| 77 | + /bin/bash -c "\ |
| 78 | + cd /build && \ |
| 79 | + CGO_ENABLED=0 GOARM=$(GOARM) GOARCH=$(ARCH) go build -a -installsuffix cgo --ldflags '-w' -o $(BIN) ./$(SRCS)" |
| 80 | + |
| 81 | +container: .container-$(ARCH) |
| 82 | +.container-$(ARCH): bin/$(BIN)-$(ARCH) |
| 83 | + # Set the base image |
| 84 | + cd $(TEMP_DIR) && sed -i.bak 's|BASEIMAGE|$(BASEIMAGE)|g' Dockerfile |
| 85 | + |
| 86 | + docker build -t $(IMAGE):$(TAG) $(TEMP_DIR) |
| 87 | + if [ -n "$(TEST_REGISTRY)" ]; then \ |
| 88 | + docker tag $(IMAGE):$(TAG) $(TEST_IMAGE):$(TAG) ;\ |
28 | 89 | fi |
29 | 90 |
|
30 | | -push: |
31 | | - gcloud docker push $(PREFIX)/serve_hostname:$(TAG) |
32 | | - if [ -n "$(TEST_PREFIX)" ]; then \ |
33 | | - gcloud docker push $(TEST_PREFIX)/serve_hostname:$(TAG); \ |
| 91 | +push: .push-$(ARCH) |
| 92 | +.push-$(ARCH): .container-$(ARCH) |
| 93 | + gcloud docker push $(IMAGE):$(TAG) |
| 94 | + if [ -n "$(TEST_REGISTRY)" ]; then \ |
| 95 | + gcloud docker push $(TEST_IMAGE):$(TAG) ;\ |
34 | 96 | fi |
35 | 97 |
|
36 | 98 | clean: |
37 | | - rm -f serve_hostname |
| 99 | + rm -rf $(BIN) |
| 100 | + |
0 commit comments