forked from istio/istio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
137 lines (115 loc) · 4.5 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY
#
# The original version of this file is located in the https://github.com/istio/common-files repo.
# If you're looking at this file in a different repo and want to make a change, please go to the
# common-files repo, make the change there and check it in. Then come back to this repo and run
# "make update-common".
# Copyright Istio Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# allow optional per-repo overrides
-include Makefile.overrides.mk
# Set the environment variable BUILD_WITH_CONTAINER to use a container
# to build the repo. The only dependencies in this mode are to have make and
# docker. If you'd rather build with a local tool chain instead, you'll need to
# figure out all the tools you need in your environment to make that work.
export BUILD_WITH_CONTAINER ?= 0
LOCAL_ARCH := $(shell uname -m)
ifeq ($(LOCAL_ARCH),x86_64)
TARGET_ARCH ?= amd64
else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 5),armv8)
TARGET_ARCH ?= arm64
else ifeq ($(LOCAL_ARCH),aarch64)
TARGET_ARCH ?= arm64
else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 4),armv)
TARGET_ARCH ?= arm
else
$(error This system's architecture $(LOCAL_ARCH) isn't supported)
endif
LOCAL_OS := $(shell uname)
ifeq ($(LOCAL_OS),Linux)
TARGET_OS ?= linux
READLINK_FLAGS="-f"
else ifeq ($(LOCAL_OS),Darwin)
TARGET_OS ?= darwin
READLINK_FLAGS=""
else
$(error This system's OS $(LOCAL_OS) isn't supported)
endif
export TARGET_OUT ?= $(shell pwd)/out/$(TARGET_OS)_$(TARGET_ARCH)
export TARGET_OUT_LINUX ?= $(shell pwd)/out/linux_amd64
ifeq ($(BUILD_WITH_CONTAINER),1)
export TARGET_OUT = /work/out/$(TARGET_OS)_$(TARGET_ARCH)
export TARGET_OUT_LINUX = /work/out/linux_amd64
CONTAINER_CLI ?= docker
DOCKER_SOCKET_MOUNT ?= -v /var/run/docker.sock:/var/run/docker.sock
IMG ?= gcr.io/istio-testing/build-tools:master-2019-12-15T16-17-48
UID = $(shell id -u)
GID = `grep docker /etc/group | cut -f3 -d:`
PWD = $(shell pwd)
$(info Building with the build container: $(IMG).)
# Determine the timezone across various platforms to pass into the
# docker run operation. This operation assumes zoneinfo is within
# the path of the file.
TIMEZONE=`readlink $(READLINK_FLAGS) /etc/localtime | sed -e 's/^.*zoneinfo\///'`
# Determine the docker.push credential bind mounts.
# Docker and GCR are supported credentials. At this time docker.push may
# not work well on Docker-For-Mac. This will be handled in a follow-up PR.
CONDITIONAL_HOST_MOUNTS:=
ifneq (,$(wildcard $(HOME)/.docker))
$(info Using docker credential directory $(HOME)/.docker.)
CONDITIONAL_HOST_MOUNTS+=--mount type=bind,source="$(HOME)/.docker",destination="/config/.docker",readonly
endif
ifneq (,$(wildcard $(HOME)/.config/gcloud))
$(info Using gcr credential directory $(HOME)/.config/gcloud.)
CONDITIONAL_HOST_MOUNTS+=--mount type=bind,source="$(HOME)/.config/gcloud",destination="/config/.config/gcloud",readonly
endif
ifneq (,$(wildcard $(HOME)/.kube))
$(info Using local Kubernetes configuration $(HOME)/.kube)
CONDITIONAL_HOST_MOUNTS+=--mount type=bind,source="$(HOME)/.kube",destination="/home/.kube",readonly
endif
ENV_VARS:=
ifdef HUB
ENV_VARS+=-e HUB="$(HUB)"
endif
ifdef TAG
ENV_VARS+=-e TAG="$(TAG)"
endif
RUN = $(CONTAINER_CLI) run -t -i --sig-proxy=true -u $(UID):$(GID) --rm \
-e IN_BUILD_CONTAINER="$(BUILD_WITH_CONTAINER)" \
-e TZ="$(TIMEZONE)" \
-e TARGET_ARCH="$(TARGET_ARCH)" \
-e TARGET_OS="$(TARGET_OS)" \
-e TARGET_OUT="$(TARGET_OUT)" \
-e TARGET_OUT_LINUX="$(TARGET_OUT_LINUX)" \
-e USER="${USER}" \
$(ENV_VARS) \
-v /etc/passwd:/etc/passwd:ro \
$(DOCKER_SOCKET_MOUNT) \
$(CONTAINER_OPTIONS) \
--mount type=bind,source="$(PWD)",destination="/work" \
--mount type=volume,source=go,destination="/go" \
--mount type=volume,source=gocache,destination="/gocache" \
$(CONDITIONAL_HOST_MOUNTS) \
-w /work $(IMG)
MAKE = $(RUN) make --no-print-directory -e -f Makefile.core.mk
%:
@$(MAKE) $@
default:
@$(MAKE)
.PHONY: default
else
$(info Building with your local toolchain.)
export GOBIN ?= $(GOPATH)/bin
include Makefile.core.mk
endif