Makefile 10.0 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

C
cai.zhang 已提交
25
all: build-cpp build-go
26 27 28 29

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

30
# attention: upgrade golangci-lint should also change Dockerfiles in build/docker/builder/cpu/<os>
31 32
getdeps:
	@mkdir -p ${GOPATH}/bin
E
Enwei Jiao 已提交
33
	@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)
34

35 36 37 38
tools/bin/revive: tools/check/go.mod
	cd tools/check; \
	$(GO) build -o ../bin/revive github.com/mgechev/revive

39 40
cppcheck:
	@(env bash ${PWD}/scripts/core_build.sh -l)
41

42
generated-proto-go: export protoc:=${PWD}/cmake_build/thirdparty/protobuf/protobuf-build/protoc
43
generated-proto-go: build-cpp
44
	@mkdir -p ${GOPATH}/bin
45
	@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)
46 47 48 49 50
	@(env bash $(PWD)/scripts/proto_gen_go.sh)

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

51
fmt:
52 53 54 55
ifdef GO_DIFF_FILES
	@echo "Running $@ check"
	@GO111MODULE=on env bash $(PWD)/scripts/gofmt.sh $(GO_DIFF_FILES)
else
56
	@echo "Running $@ check"
57 58
	@GO111MODULE=on env bash $(PWD)/scripts/gofmt.sh cmd/
	@GO111MODULE=on env bash $(PWD)/scripts/gofmt.sh internal/
G
godchen 已提交
59
	@GO111MODULE=on env bash $(PWD)/scripts/gofmt.sh tests/go/
60
endif
61

62
lint: tools/bin/revive
63 64 65
	@echo "Running $@ check"
	@tools/bin/revive -formatter friendly -config tools/check/revive.toml ./...

66
#TODO: Check code specifications by golangci-lint
X
XuanYang-cn 已提交
67
static-check:
68 69
	@echo "Running $@ check"
	@GO111MODULE=on ${GOPATH}/bin/golangci-lint cache clean
E
Enwei Jiao 已提交
70 71
	@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/...
72
#	@GO111MODULE=on ${GOPATH}/bin/golangci-lint run --timeout=30m --config ./.golangci.yml ./tests/go_client/...
73

74
verifiers: build-cpp getdeps cppcheck fmt static-check
75

76
# Build various components locally.
C
Cai Yudong 已提交
77 78
binlog:
	@echo "Building binlog ..."
E
Enwei Jiao 已提交
79 80
	@source $(PWD)/scripts/setenv.sh && \
		mkdir -p $(INSTALL_PATH) && go env -w CGO_ENABLED="1" && GO111MODULE=on $(GO) build -o $(INSTALL_PATH)/binlog $(PWD)/cmd/tools/binlog/main.go 1>/dev/null
Z
zhenshan.cao 已提交
81

J
Jiquan Long 已提交
82 83 84 85 86 87
MIGRATION_PATH = $(PWD)/cmd/tools/migration
migration:
	@echo "Building migration tool ..."
	@source $(PWD)/scripts/setenv.sh && \
		mkdir -p $(INSTALL_PATH) && go env -w CGO_ENABLED="1" && GO111MODULE=on $(GO) build -o $(INSTALL_PATH)/migration $(MIGRATION_PATH)/main.go 1>/dev/null

88
BUILD_TAGS = $(shell git describe --tags --always --dirty="-dev")
J
jaime 已提交
89
BUILD_TIME = $(shell date -u)
90 91
GIT_COMMIT = $(shell git rev-parse --short HEAD)
GO_VERSION = $(shell go version)
92 93 94 95 96
ifeq ($(OS),Darwin)
ifeq ($(ARCH),arm64)
	APPLE_SILICON_FLAG = -tags dynamic
endif
endif
97

D
dragondriver 已提交
98
print-build-info:
J
Jenny Li 已提交
99
	$(shell git config --global --add safe.directory '*')
D
dragondriver 已提交
100 101 102 103 104 105
	@echo "Build Tag: $(BUILD_TAGS)"
	@echo "Build Time: $(BUILD_TIME)"
	@echo "Git Commit: $(GIT_COMMIT)"
	@echo "Go Version: $(GO_VERSION)"

milvus: build-cpp print-build-info
106 107 108 109
ifeq ($(RELEASE), TRUE)
	@echo "Update milvus/api version ..."
	@(env bash $(PWD)/scripts/update_api_version.sh)
endif
110
	@echo "Building Milvus ..."
E
Enwei Jiao 已提交
111 112 113
	@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)'" \
114
		${APPLE_SILICON_FLAG} -o $(INSTALL_PATH)/milvus $(PWD)/cmd/main.go 1>/dev/null
115

116 117
embd-milvus: build-cpp-embd print-build-info
	@echo "Building **Embedded** Milvus ..."
E
Enwei Jiao 已提交
118 119 120
	@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)'" \
121
		${APPLE_SILICON_FLAG} -buildmode=c-shared -o $(INSTALL_PATH)/embd-milvus.so $(PWD)/pkg/embedded/embedded.go 1>/dev/null
122

123
build-go: milvus
N
neza2017 已提交
124

125
build-cpp: 
126
	@echo "Building Milvus cpp library ..."
127
	@(env bash $(PWD)/scripts/core_build.sh -t ${mode} -f "$(CUSTOM_THIRDPARTY_PATH)" -n ${disk_index})
128

129
build-cpp-embd: 
130
	@echo "Building **Embedded** Milvus cpp library ..."
131
	@(env bash $(PWD)/scripts/core_build.sh -b -t ${mode} -f "$(CUSTOM_THIRDPARTY_PATH)" -n ${disk_index})
132

133
build-cpp-with-unittest: 
134
	@echo "Building Milvus cpp library with unittest ..."
135
	@(env bash $(PWD)/scripts/core_build.sh -t ${mode} -u -f "$(CUSTOM_THIRDPARTY_PATH)" -n ${disk_index})
136

137
build-cpp-with-coverage: 
138
	@echo "Building Milvus cpp library with coverage and unittest ..."
139
	@(env bash $(PWD)/scripts/core_build.sh -t ${mode} -u -c -f "$(CUSTOM_THIRDPARTY_PATH)" -n ${disk_index})
140 141


142
# Run the tests.
143
unittest: test-cpp test-go
144

145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
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)

177 178
test-indexnode:
	@echo "Running go unittests..."
179
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t indexnode)
180

Z
zhenshan.cao 已提交
181 182 183 184
test-indexcoord:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t indexcoord)

Z
zhenshan.cao 已提交
185 186
test-proxy:
	@echo "Running go unittests..."
187
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t proxy)
Z
zhenshan.cao 已提交
188

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

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

197 198
test-querynode:
	@echo "Running go unittests..."
199
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t querynode)
200

B
bigsheeper 已提交
201 202
test-querycoord:
	@echo "Running go unittests..."
203
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t querycoord)
B
bigsheeper 已提交
204

205 206 207
test-metastore:
	@echo "Running go unittests..."
	@(env bash $(PWD)/scripts/run_go_unittest.sh -t metastore)
B
bigsheeper 已提交
208

209
test-go: build-cpp-with-unittest
210
	@echo "Running go unittests..."
211
	@(env bash $(PWD)/scripts/run_go_unittest.sh)
212 213

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

217
# Run code coverage.
G
groot 已提交
218
codecov: codecov-go codecov-cpp
G
groot 已提交
219

G
groot 已提交
220
# Run codecov-go
221
codecov-go: build-cpp-with-coverage
G
groot 已提交
222
	@echo "Running go coverage..."
223 224
	@(env bash $(PWD)/scripts/run_go_codecov.sh)

G
groot 已提交
225
# Run codecov-cpp
226
codecov-cpp: build-cpp-with-coverage
G
groot 已提交
227
	@echo "Running cpp coverage..."
228 229
	@(env bash $(PWD)/scripts/run_cpp_codecov.sh)

230 231 232 233
# Package docker image locally.
# TODO: fix error occur at starting up
docker: install
	./build/build_image.sh
234

235
# Build each component and install binary to $GOPATH/bin.
236 237
install: all
	@echo "Installing binary to './bin'"
238
	@mkdir -p $(GOPATH)/bin && cp -f $(PWD)/bin/milvus $(GOPATH)/bin/milvus
239
	@mkdir -p $(LIBRARY_PATH) && cp -r -P $(PWD)/internal/core/output/lib/*.so* $(LIBRARY_PATH)
240 241 242 243 244 245
	@echo "Installation successful."

clean:
	@echo "Cleaning up all the generated files"
	@find . -name '*.test' | xargs rm -fv
	@find . -name '*~' | xargs rm -fv
246 247
	@rm -rf bin/
	@rm -rf lib/
X
Xiaofan 已提交
248
	@rm -rf $(GOPATH)/bin/milvus
249 250
	@rm -rf cmake_build
	@rm -rf cwrapper_build
J
jaime 已提交
251
	@rm -rf internal/core/output
252

D
dragondriver 已提交
253
milvus-tools: print-build-info
254 255 256 257
	@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 已提交
258

259
rpm-setup:
S
shaoyue 已提交
260
	@echo "Setuping rpm env ...;"
261
	@build/rpm/setup-env.sh
S
shaoyue 已提交
262 263 264 265 266 267 268 269 270 271 272 273 274 275

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/
276
	@QA_RPATHS="$$[ 0x001|0x0002|0x0020 ]" rpmbuild -ba ./build/rpm/milvus.spec
277 278 279 280 281 282

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

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