|
28 | 28 | # figure out all the tools you need in your environment to make that work.
|
29 | 29 | export BUILD_WITH_CONTAINER ?= 0
|
30 | 30 |
|
31 |
| -ifeq ($(BUILD_WITH_CONTAINER),1) |
32 |
| -IMG = gcr.io/istio-testing/build-tools:2019-08-29T13-57-48 |
33 |
| -UID = $(shell id -u) |
34 |
| -PWD = $(shell pwd) |
35 |
| -GOBIN_SOURCE ?= $(GOPATH)/bin |
36 |
| -GOBIN ?= /work/out/bin |
37 |
| - |
38 | 31 | LOCAL_ARCH := $(shell uname -m)
|
39 | 32 | ifeq ($(LOCAL_ARCH),x86_64)
|
40 |
| -GOARCH_LOCAL := amd64 |
| 33 | + TARGET_ARCH ?= amd64 |
41 | 34 | else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 5),armv8)
|
42 |
| -GOARCH_LOCAL := arm64 |
| 35 | + TARGET_ARCH ?= arm64 |
43 | 36 | else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 4),armv)
|
44 |
| -GOARCH_LOCAL := arm |
| 37 | + TARGET_ARCH ?= arm |
45 | 38 | else
|
46 |
| -GOARCH_LOCAL := $(LOCAL_ARCH) |
| 39 | + $(error "This system's architecture $(LOCAL_ARCH) isn't recognized/supported") |
47 | 40 | endif
|
48 | 41 |
|
49 |
| -GOARCH ?= $(GOARCH_LOCAL) |
50 |
| - |
51 | 42 | LOCAL_OS := $(shell uname)
|
52 | 43 | ifeq ($(LOCAL_OS),Linux)
|
53 |
| - GOOS_LOCAL = linux |
| 44 | + TARGET_OS ?= linux |
| 45 | + READLINK_FLAGS="-f" |
54 | 46 | else ifeq ($(LOCAL_OS),Darwin)
|
55 |
| - GOOS_LOCAL = darwin |
| 47 | + TARGET_OS ?= darwin |
| 48 | + READLINK_FLAGS="" |
56 | 49 | else
|
57 | 50 | $(error "This system's OS $(LOCAL_OS) isn't recognized/supported")
|
58 | 51 | endif
|
59 | 52 |
|
60 |
| -GOOS ?= $(GOOS_LOCAL) |
| 53 | +REPO_ROOT = $(shell git rev-parse --show-toplevel) |
| 54 | +REPO_NAME = $(shell basename $(REPO_ROOT)) |
| 55 | +TARGET_OUT ?= $(HOME)/istio_out/$(REPO_NAME) |
| 56 | + |
| 57 | +ifeq ($(BUILD_WITH_CONTAINER),1) |
| 58 | +CONTAINER_CLI ?= docker |
| 59 | +DOCKER_SOCKET_MOUNT ?= -v /var/run/docker.sock:/var/run/docker.sock |
| 60 | +IMG ?= gcr.io/istio-testing/build-tools:2019-09-23T12-48-14 |
| 61 | +UID = $(shell id -u) |
| 62 | +PWD = $(shell pwd) |
| 63 | + |
| 64 | +# Determine the timezone across various platforms to pass into the |
| 65 | +# docker run operation. This operation assumes zoneinfo is within |
| 66 | +# the path of the file. |
| 67 | +TIMEZONE=`readlink $(READLINK_FLAGS) /etc/localtime | sed -e 's/^.*zoneinfo\///'` |
61 | 68 |
|
62 |
| -RUN = docker run -t -i --sig-proxy=true -u $(UID) --rm \ |
63 |
| - -e GOOS="$(GOOS)" \ |
64 |
| - -e GOARCH="$(GOARCH)" \ |
65 |
| - -e GOBIN="$(GOBIN)" \ |
| 69 | +RUN = $(CONTAINER_CLI) run -t -i --sig-proxy=true -u $(UID) --rm \ |
66 | 70 | -e BUILD_WITH_CONTAINER="$(BUILD_WITH_CONTAINER)" \
|
| 71 | + -e TZ="$(TIMEZONE)" \ |
| 72 | + -e TARGET_ARCH="$(TARGET_ARCH)" \ |
| 73 | + -e TARGET_OS="$(TARGET_OS)" \ |
67 | 74 | -v /etc/passwd:/etc/passwd:ro \
|
68 |
| - -v $(readlink /etc/localtime):/etc/localtime:ro \ |
69 |
| - -v /var/run/docker.sock:/var/run/docker.sock \ |
| 75 | + $(DOCKER_SOCKET_MOUNT) \ |
70 | 76 | $(CONTAINER_OPTIONS) \
|
71 | 77 | --mount type=bind,source="$(PWD)",destination="/work" \
|
72 |
| - --mount type=volume,source=istio-go-mod,destination="/go/pkg/mod" \ |
73 |
| - --mount type=volume,source=istio-go-cache,destination="/gocache" \ |
74 |
| - --mount type=bind,source="$(GOBIN_SOURCE)",destination="/go/out/bin" \ |
| 78 | + --mount type=bind,source="$(TARGET_OUT)",destination="/targetout" \ |
| 79 | + --mount type=volume,source=home,destination="/home" \ |
75 | 80 | -w /work $(IMG)
|
76 | 81 | else
|
77 |
| -export GOBIN ?= ./out/bin |
78 | 82 | RUN =
|
79 | 83 | endif
|
80 | 84 |
|
81 | 85 | MAKE = $(RUN) make --no-print-directory -e -f Makefile.core.mk
|
82 | 86 |
|
83 | 87 | %:
|
| 88 | + @mkdir -p $(TARGET_OUT) |
84 | 89 | @$(MAKE) $@
|
85 | 90 |
|
86 | 91 | default:
|
| 92 | + @mkdir -p $(TARGET_OUT) |
87 | 93 | @$(MAKE)
|
88 | 94 |
|
89 | 95 | .PHONY: default
|
0 commit comments