Makefile 11.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
# Copyright (C) 2019-2020 Zilliz. All rights reserved.
#
# 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.

12 13
GO		  ?= go
PWD 	  := $(shell pwd)
E
Enwei Jiao 已提交
14 15
GOPATH	:= $(shell $(GO) env GOPATH)
SHELL 	:= /bin/bash
16
OBJPREFIX := "github.com/milvus-io/milvus/cmd/milvus"
17 18 19

INSTALL_PATH := $(PWD)/bin
LIBRARY_PATH := $(PWD)/lib
J
jaime 已提交
20 21 22
OS := $(shell uname -s)
ARCH := $(shell arch)
mode = Release
23
disk_index = OFF
24

25

S
SimFG 已提交
26
export GIT_BRANCH=master
27

S
SimFG 已提交
28
milvus: build-cpp print-build-info
29 30 31 32 33
	@echo "Building Milvus ..."
	@source $(PWD)/scripts/setenv.sh && \
		mkdir -p $(INSTALL_PATH) && go env -w CGO_ENABLED="1" && \
		GO111MODULE=on $(GO) build -ldflags="-r $${RPATH} -X '$(OBJPREFIX).BuildTags=$(BUILD_TAGS)' -X '$(OBJPREFIX).BuildTime=$(BUILD_TIME)' -X '$(OBJPREFIX).GitCommit=$(GIT_COMMIT)' -X '$(OBJPREFIX).GoVersion=$(GO_VERSION)'" \
		${APPLE_SILICON_FLAG} -o $(INSTALL_PATH)/milvus $(PWD)/cmd/main.go 1>/dev/null
34 35 36 37

get-build-deps:
	@(env bash $(PWD)/scripts/install_deps.sh)

38
# attention: upgrade golangci-lint should also change Dockerfiles in build/docker/builder/cpu/<os>
39 40
getdeps:
	@mkdir -p ${GOPATH}/bin
E
Enwei Jiao 已提交
41
	@which golangci-lint 1>/dev/null || (echo "Installing golangci-lint" && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOPATH)/bin v1.46.2)
42

43 44 45 46
tools/bin/revive: tools/check/go.mod
	cd tools/check; \
	$(GO) build -o ../bin/revive github.com/mgechev/revive

47 48
cppcheck:
	@(env bash ${PWD}/scripts/core_build.sh -l)
49

50
# put generate proto as a separated target because build cpp have different cases like with unittest.
E
Enwei Jiao 已提交
51
generated-proto-go-without-cpp: export protoc:=${PWD}/cmake_build/bin/protoc
52
generated-proto-go-without-cpp: 
53
	@mkdir -p ${GOPATH}/bin
54
	@which protoc-gen-go 1>/dev/null || (echo "Installing protoc-gen-go" && cd /tmp && go install github.com/golang/protobuf/protoc-gen-go@v1.3.2)
55 56
	@(env bash $(PWD)/scripts/proto_gen_go.sh)

57 58 59 60 61 62
generated-proto-go: build-cpp generated-proto-go-without-cpp

check-proto-product-only:
	 @(env bash $(PWD)/scripts/check_proto_product.sh)
check-proto-product: generated-proto-go check-proto-product-only
	
63

64
fmt:
65 66 67 68
ifdef GO_DIFF_FILES
	@echo "Running $@ check"
	@GO111MODULE=on env bash $(PWD)/scripts/gofmt.sh $(GO_DIFF_FILES)
else
69
	@echo "Running $@ check"
70 71
	@GO111MODULE=on env bash $(PWD)/scripts/gofmt.sh cmd/
	@GO111MODULE=on env bash $(PWD)/scripts/gofmt.sh internal/
G
godchen 已提交
72
	@GO111MODULE=on env bash $(PWD)/scripts/gofmt.sh tests/go/
73
endif
74

75
lint: tools/bin/revive
76 77 78
	@echo "Running $@ check"
	@tools/bin/revive -formatter friendly -config tools/check/revive.toml ./...

79
#TODO: Check code specifications by golangci-lint
S
SimFG 已提交
80
static-check:
81 82
	@echo "Running $@ check"
	@GO111MODULE=on ${GOPATH}/bin/golangci-lint cache clean
E
Enwei Jiao 已提交
83 84
	@source $(PWD)/scripts/setenv.sh && GO111MODULE=on ${GOPATH}/bin/golangci-lint run --timeout=30m --config ./.golangci.yml ./internal/...
	@source $(PWD)/scripts/setenv.sh && GO111MODULE=on ${GOPATH}/bin/golangci-lint run --timeout=30m --config ./.golangci.yml ./cmd/...
85
#	@GO111MODULE=on ${GOPATH}/bin/golangci-lint run --timeout=30m --config ./.golangci.yml ./tests/go_client/...
86

87
verifiers: build-cpp getdeps cppcheck fmt static-check
88

89
# Build various components locally.
C
Cai Yudong 已提交
90 91
binlog:
	@echo "Building binlog ..."
E
Enwei Jiao 已提交
92
	@source $(PWD)/scripts/setenv.sh && \
E
Enwei Jiao 已提交
93 94
		mkdir -p $(INSTALL_PATH) && go env -w CGO_ENABLED="1" && \
		GO111MODULE=on $(GO) build -ldflags="-r $${RPATH}" -o $(INSTALL_PATH)/binlog $(PWD)/cmd/tools/binlog/main.go 1>/dev/null
Z
zhenshan.cao 已提交
95

J
Jiquan Long 已提交
96
MIGRATION_PATH = $(PWD)/cmd/tools/migration
J
Jiquan Long 已提交
97
meta-migration:
J
Jiquan Long 已提交
98
	@echo "Building migration tool ..."
99 100 101 102
	@source $(PWD)/scripts/setenv.sh && \
    		mkdir -p $(INSTALL_PATH) && go env -w CGO_ENABLED="1" && \
    		GO111MODULE=on $(GO) build -ldflags="-r $${RPATH} -X '$(OBJPREFIX).BuildTags=$(BUILD_TAGS)' -X '$(OBJPREFIX).BuildTime=$(BUILD_TIME)' -X '$(OBJPREFIX).GitCommit=$(GIT_COMMIT)' -X '$(OBJPREFIX).GoVersion=$(GO_VERSION)'" \
    		${APPLE_SILICON_FLAG} -o $(INSTALL_PATH)/meta-migration $(MIGRATION_PATH)/main.go 1>/dev/null
J
Jiquan Long 已提交
103

104
BUILD_TAGS = $(shell git describe --tags --always --dirty="-dev")
J
jaime 已提交
105
BUILD_TIME = $(shell date -u)
106 107
GIT_COMMIT = $(shell git rev-parse --short HEAD)
GO_VERSION = $(shell go version)
108 109 110 111 112
ifeq ($(OS),Darwin)
ifeq ($(ARCH),arm64)
	APPLE_SILICON_FLAG = -tags dynamic
endif
endif
113

D
dragondriver 已提交
114
print-build-info:
J
Jenny Li 已提交
115
	$(shell git config --global --add safe.directory '*')
D
dragondriver 已提交
116 117 118 119 120
	@echo "Build Tag: $(BUILD_TAGS)"
	@echo "Build Time: $(BUILD_TIME)"
	@echo "Git Commit: $(GIT_COMMIT)"
	@echo "Go Version: $(GO_VERSION)"

121

122

123 124
embd-milvus: build-cpp-embd print-build-info
	@echo "Building **Embedded** Milvus ..."
E
Enwei Jiao 已提交
125 126 127
	@source $(PWD)/scripts/setenv.sh && \
		mkdir -p $(INSTALL_PATH) && go env -w CGO_ENABLED="1" && \
		GO111MODULE=on $(GO) build -ldflags="-r /tmp/milvus/lib/ -X '$(OBJPREFIX).BuildTags=$(BUILD_TAGS)' -X '$(OBJPREFIX).BuildTime=$(BUILD_TIME)' -X '$(OBJPREFIX).GitCommit=$(GIT_COMMIT)' -X '$(OBJPREFIX).GoVersion=$(GO_VERSION)'" \
128
		${APPLE_SILICON_FLAG} -buildmode=c-shared -o $(INSTALL_PATH)/embd-milvus.so $(PWD)/pkg/embedded/embedded.go 1>/dev/null
129

130 131 132
update-milvus-api: download-milvus-proto
	@echo "Update milvus/api version ..."
	@(env bash $(PWD)/scripts/update-api-version.sh)
S
SimFG 已提交
133

S
SimFG 已提交
134 135 136
download-milvus-proto:
	@echo "Download milvus-proto repo ..."
	@(env bash $(PWD)/scripts/download_milvus_proto.sh)
137

S
SimFG 已提交
138
build-cpp: download-milvus-proto
139
	@echo "Building Milvus cpp library ..."
140
	@(env bash $(PWD)/scripts/core_build.sh -t ${mode} -f "$(CUSTOM_THIRDPARTY_PATH)" -n ${disk_index})
141

S
SimFG 已提交
142
build-cpp-embd: download-milvus-proto
143
	@echo "Building **Embedded** Milvus cpp library ..."
144
	@(env bash $(PWD)/scripts/core_build.sh -b -t ${mode} -f "$(CUSTOM_THIRDPARTY_PATH)" -n ${disk_index})
145

S
SimFG 已提交
146
build-cpp-with-unittest: download-milvus-proto
147
	@echo "Building Milvus cpp library with unittest ..."
148
	@(env bash $(PWD)/scripts/core_build.sh -t ${mode} -u -f "$(CUSTOM_THIRDPARTY_PATH)" -n ${disk_index})
149

S
SimFG 已提交
150
build-cpp-with-coverage: download-milvus-proto
151
	@echo "Building Milvus cpp library with coverage and unittest ..."
J
Jiquan Long 已提交
152
	@(env bash $(PWD)/scripts/core_build.sh -t ${mode} -u -a -c -f "$(CUSTOM_THIRDPARTY_PATH)" -n ${disk_index})
153 154


155
# Run the tests.
156
unittest: test-cpp test-go
157

158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
test-util:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t util)

test-storage:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t storage)

test-allocator:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t allocator)

test-config:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t config)

test-tso:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t tso)

test-kv:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t kv)

test-mq:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t mq)

test-rootcoord:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t rootcoord)

190 191
test-indexnode:
	@echo "Running go unittests..."
192
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t indexnode)
193

Z
zhenshan.cao 已提交
194 195 196 197
test-indexcoord:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t indexcoord)

Z
zhenshan.cao 已提交
198 199
test-proxy:
	@echo "Running go unittests..."
200
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t proxy)
Z
zhenshan.cao 已提交
201

202 203
test-datacoord:
	@echo "Running go unittests..."
204
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t datacoord)
205

206 207
test-datanode:
	@echo "Running go unittests..."
208
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t datanode)
Z
zhenshan.cao 已提交
209

210 211
test-querynode:
	@echo "Running go unittests..."
212
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t querynode)
213

B
bigsheeper 已提交
214 215
test-querycoord:
	@echo "Running go unittests..."
216
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t querycoord)
B
bigsheeper 已提交
217

218 219 220
test-metastore:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t metastore)
B
bigsheeper 已提交
221

222
test-go: build-cpp-with-unittest
223
	@echo "Running go unittests..."
224
	@(env bash $(PWD)/scripts/run_go_unittest.sh)
225 226

test-cpp: build-cpp-with-unittest
C
cai.zhang 已提交
227
	@echo "Running cpp unittests..."
228
	@(env bash $(PWD)/scripts/run_cpp_unittest.sh)
229

230
# Run code coverage.
G
groot 已提交
231
codecov: codecov-go codecov-cpp
G
groot 已提交
232

G
groot 已提交
233
# Run codecov-go
234
codecov-go: build-cpp-with-coverage
G
groot 已提交
235
	@echo "Running go coverage..."
236 237
	@(env bash $(PWD)/scripts/run_go_codecov.sh)

G
groot 已提交
238
# Run codecov-cpp
239
codecov-cpp: build-cpp-with-coverage
G
groot 已提交
240
	@echo "Running cpp coverage..."
241 242
	@(env bash $(PWD)/scripts/run_cpp_codecov.sh)

243 244 245 246
# Package docker image locally.
# TODO: fix error occur at starting up
docker: install
	./build/build_image.sh
247

248
# Build each component and install binary to $GOPATH/bin.
249
install: milvus
250
	@echo "Installing binary to './bin'"
251
	@mkdir -p $(GOPATH)/bin && cp -f $(PWD)/bin/milvus $(GOPATH)/bin/milvus
J
Jenny Li 已提交
252
	@mkdir -p $(LIBRARY_PATH)
253 254 255
	-cp -r -P $(PWD)/internal/core/output/lib/*.dylib* $(LIBRARY_PATH) 2>/dev/null
	-cp -r -P $(PWD)/internal/core/output/lib/*.so* $(LIBRARY_PATH) 2>/dev/null
	-cp -r -P $(PWD)/internal/core/output/lib64/*.so* $(LIBRARY_PATH) 2>/dev/null
256 257 258 259 260 261
	@echo "Installation successful."

clean:
	@echo "Cleaning up all the generated files"
	@find . -name '*.test' | xargs rm -fv
	@find . -name '*~' | xargs rm -fv
262 263
	@rm -rf bin/
	@rm -rf lib/
X
Xiaofan 已提交
264
	@rm -rf $(GOPATH)/bin/milvus
265 266
	@rm -rf cmake_build
	@rm -rf cwrapper_build
J
jaime 已提交
267
	@rm -rf internal/core/output
268

D
dragondriver 已提交
269
milvus-tools: print-build-info
270 271 272 273
	@echo "Building tools ..."
	@mkdir -p $(INSTALL_PATH)/tools && go env -w CGO_ENABLED="1" && GO111MODULE=on $(GO) build \
		-ldflags="-X 'main.BuildTags=$(BUILD_TAGS)' -X 'main.BuildTime=$(BUILD_TIME)' -X 'main.GitCommit=$(GIT_COMMIT)' -X 'main.GoVersion=$(GO_VERSION)'" \
		-o $(INSTALL_PATH)/tools $(PWD)/cmd/tools/* 1>/dev/null
S
shaoyue 已提交
274

275
rpm-setup:
S
shaoyue 已提交
276
	@echo "Setuping rpm env ...;"
277
	@build/rpm/setup-env.sh
S
shaoyue 已提交
278 279 280 281 282 283 284 285 286 287 288 289 290 291

rpm: install
	@echo "Note: run 'make rpm-setup' to setup build env for rpm builder"
	@echo "Building rpm ...;"
	@yum -y install rpm-build rpmdevtools wget
	@rm -rf ~/rpmbuild/BUILD/*
	@rpmdev-setuptree
	@wget https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz && tar -xf etcd-v3.5.0-linux-amd64.tar.gz
	@cp etcd-v3.5.0-linux-amd64/etcd bin/etcd
	@wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2021-02-14T04-01-33Z -O bin/minio
	@cp -r bin ~/rpmbuild/BUILD/
	@cp -r lib ~/rpmbuild/BUILD/
	@cp -r configs ~/rpmbuild/BUILD/
	@cp -r build/rpm/services ~/rpmbuild/BUILD/
292
	@QA_RPATHS="$$[ 0x001|0x0002|0x0020 ]" rpmbuild -ba ./build/rpm/milvus.spec
293 294 295 296

mock-datanode:
	mockery --name=DataNode --dir=$(PWD)/internal/types --output=$(PWD)/internal/mocks --filename=mock_datanode.go --with-expecter

297 298 299
mock-rootcoord:
	mockery --name=RootCoord --dir=$(PWD)/internal/types --output=$(PWD)/internal/mocks --filename=mock_rootcoord.go --with-expecter

300 301 302
mock-datacoord:
	mockery --name=DataCoord --dir=$(PWD)/internal/types --output=$(PWD)/internal/mocks --filename=mock_datacoord.go --with-expecter

303 304
mock-tnx-kv:
	mockery --name=TxnKV --dir=$(PWD)/internal/kv --output=$(PWD)/internal/kv/mocks --filename=TxnKV.go --with-expecter
305 306 307


ci-ut: build-cpp-with-coverage generated-proto-go-without-cpp codecov-cpp codecov-go