258 lines
7.8 KiB
Makefile
258 lines
7.8 KiB
Makefile
PROJECT=tidb
|
|
GOPATH ?= $(shell go env GOPATH)
|
|
|
|
# Ensure GOPATH is set before running build process.
|
|
ifeq "$(GOPATH)" ""
|
|
$(error Please set the environment variable GOPATH before running `make`)
|
|
endif
|
|
FAIL_ON_STDOUT := awk '{ print } END { if (NR > 0) { exit 1 } }'
|
|
|
|
CURDIR := $(shell pwd)
|
|
path_to_add := $(addsuffix /bin,$(subst :,/bin:,$(GOPATH))):$(PWD)/tools/bin
|
|
export PATH := $(path_to_add):$(PATH)
|
|
|
|
GO := GO111MODULE=on go
|
|
GOBUILD := CGO_ENABLED=1 $(GO) build $(BUILD_FLAG) -tags codes
|
|
GOBUILDCOVERAGE := GOPATH=$(GOPATH) CGO_ENABLED=1 cd tidb-server; $(GO) test -coverpkg="../..." -c .
|
|
GOTEST := CGO_ENABLED=1 $(GO) test -p 4
|
|
OVERALLS := CGO_ENABLED=1 GO111MODULE=on overalls
|
|
|
|
ARCH := "`uname -s`"
|
|
LINUX := "Linux"
|
|
MAC := "Darwin"
|
|
PACKAGE_LIST := go list ./...| grep -vE "cmd" | grep -vE "test"
|
|
PACKAGES := $$($(PACKAGE_LIST))
|
|
PACKAGE_DIRECTORIES := $(PACKAGE_LIST) | sed 's|github.com/pingcap/$(PROJECT)/||'
|
|
FILES := $$(find $$($(PACKAGE_DIRECTORIES)) -name "*.go")
|
|
|
|
FAILPOINT_ENABLE := $$(find $$PWD/ -type d | grep -vE "(\.git|tools)" | xargs tools/bin/failpoint-ctl enable)
|
|
FAILPOINT_DISABLE := $$(find $$PWD/ -type d | grep -vE "(\.git|tools)" | xargs tools/bin/failpoint-ctl disable)
|
|
|
|
LDFLAGS += -X "github.com/pingcap/parser/mysql.TiDBReleaseVersion=$(shell git describe --tags --dirty --always)"
|
|
LDFLAGS += -X "github.com/pingcap/tidb/util/printer.TiDBBuildTS=$(shell date -u '+%Y-%m-%d %I:%M:%S')"
|
|
LDFLAGS += -X "github.com/pingcap/tidb/util/printer.TiDBGitHash=$(shell git rev-parse HEAD)"
|
|
LDFLAGS += -X "github.com/pingcap/tidb/util/printer.TiDBGitBranch=$(shell git rev-parse --abbrev-ref HEAD)"
|
|
LDFLAGS += -X "github.com/pingcap/tidb/util/printer.GoVersion=$(shell go version)"
|
|
|
|
TEST_LDFLAGS = -X "github.com/pingcap/tidb/config.checkBeforeDropLDFlag=1"
|
|
COVERAGE_SERVER_LDFLAGS = -X "github.com/pingcap/tidb/tidb-server.isCoverageServer=1"
|
|
|
|
CHECK_LDFLAGS += $(LDFLAGS) ${TEST_LDFLAGS}
|
|
|
|
TARGET = ""
|
|
|
|
.PHONY: all build update clean todo test gotest interpreter server dev benchkv benchraw check checklist parser tidy ddltest
|
|
|
|
default: server buildsucc
|
|
|
|
server-admin-check: server_check buildsucc
|
|
|
|
buildsucc:
|
|
@echo Build TiDB Server successfully!
|
|
|
|
all: dev server benchkv
|
|
|
|
parser:
|
|
@echo "remove this command later, when our CI script doesn't call it"
|
|
|
|
dev: checklist check test
|
|
|
|
build:
|
|
$(GOBUILD)
|
|
|
|
# Install the check tools.
|
|
check-setup:tools/bin/revive tools/bin/goword tools/bin/gometalinter tools/bin/gosec
|
|
|
|
check: fmt errcheck lint tidy testSuite check-static vet
|
|
|
|
# These need to be fixed before they can be ran regularly
|
|
check-fail: goword check-slow
|
|
|
|
fmt:
|
|
@echo "gofmt (simplify)"
|
|
@gofmt -s -l -w $(FILES) 2>&1 | $(FAIL_ON_STDOUT)
|
|
|
|
goword:tools/bin/goword
|
|
tools/bin/goword $(FILES) 2>&1 | $(FAIL_ON_STDOUT)
|
|
|
|
gosec:tools/bin/gosec
|
|
tools/bin/gosec $$($(PACKAGE_DIRECTORIES))
|
|
|
|
check-static:tools/bin/gometalinter tools/bin/misspell tools/bin/ineffassign
|
|
@ # TODO: enable megacheck.
|
|
@ # TODO: gometalinter has been DEPRECATED.
|
|
@ # https://github.com/alecthomas/gometalinter/issues/590
|
|
tools/bin/gometalinter --disable-all --deadline 120s \
|
|
--enable misspell \
|
|
--enable ineffassign \
|
|
$$($(PACKAGE_DIRECTORIES))
|
|
|
|
check-slow:tools/bin/gometalinter tools/bin/gosec
|
|
tools/bin/gometalinter --disable-all \
|
|
--enable errcheck \
|
|
$$($(PACKAGE_DIRECTORIES))
|
|
|
|
errcheck:tools/bin/errcheck
|
|
@echo "errcheck"
|
|
@GO111MODULE=on tools/bin/errcheck -exclude ./tools/check/errcheck_excludes.txt -blank $(PACKAGES) | grep -v "_test\.go" | awk '{print} END{if(NR>0) {exit 1}}'
|
|
|
|
lint:tools/bin/revive
|
|
@echo "linting"
|
|
@tools/bin/revive -formatter friendly -config tools/check/revive.toml $(FILES)
|
|
|
|
vet:
|
|
@echo "vet"
|
|
$(GO) vet -all $(PACKAGES) 2>&1 | $(FAIL_ON_STDOUT)
|
|
|
|
tidy:
|
|
@echo "go mod tidy"
|
|
./tools/check/check-tidy.sh
|
|
|
|
testSuite:
|
|
@echo "testSuite"
|
|
./tools/check/check_testSuite.sh
|
|
|
|
clean:
|
|
$(GO) clean -i ./...
|
|
rm -rf *.out
|
|
rm -rf parser
|
|
|
|
test: checklist checkdep gotest explaintest
|
|
|
|
explaintest: server
|
|
@cd cmd/explaintest && ./run-tests.sh -s ../../bin/tidb-server
|
|
|
|
ddltest:
|
|
@cd cmd/ddltest && $(GO) test -o ../../bin/ddltest -c
|
|
|
|
upload-coverage: SHELL:=/bin/bash
|
|
upload-coverage:
|
|
ifeq ("$(TRAVIS_COVERAGE)", "1")
|
|
mv overalls.coverprofile coverage.txt
|
|
bash <(curl -s https://codecov.io/bash)
|
|
endif
|
|
|
|
gotest: failpoint-enable
|
|
ifeq ("$(TRAVIS_COVERAGE)", "1")
|
|
@echo "Running in TRAVIS_COVERAGE mode."
|
|
@export log_level=error; \
|
|
$(GO) get github.com/go-playground/overalls
|
|
$(OVERALLS) -project=github.com/pingcap/tidb \
|
|
-covermode=count \
|
|
-ignore='.git,vendor,cmd,docs,LICENSES' \
|
|
-concurrency=4 \
|
|
-- -coverpkg=./... \
|
|
|| { $(FAILPOINT_DISABLE); exit 1; }
|
|
else
|
|
@echo "Running in native mode."
|
|
@export log_level=error; \
|
|
$(GOTEST) -ldflags '$(TEST_LDFLAGS)' -cover $(PACKAGES) || { $(FAILPOINT_DISABLE); exit 1; }
|
|
endif
|
|
@$(FAILPOINT_DISABLE)
|
|
|
|
race: failpoint-enable
|
|
@export log_level=debug; \
|
|
$(GOTEST) -timeout 20m -race $(PACKAGES) || { $(FAILPOINT_DISABLE); exit 1; }
|
|
@$(FAILPOINT_DISABLE)
|
|
|
|
leak: failpoint-enable
|
|
@export log_level=debug; \
|
|
$(GOTEST) -tags leak $(PACKAGES) || { $(FAILPOINT_DISABLE); exit 1; }
|
|
@$(FAILPOINT_DISABLE)
|
|
|
|
tikv_integration_test: failpoint-enable
|
|
$(GOTEST) ./store/tikv/. -with-tikv=true || { $(FAILPOINT_DISABLE); exit 1; }
|
|
@$(FAILPOINT_DISABLE)
|
|
|
|
RACE_FLAG =
|
|
ifeq ("$(WITH_RACE)", "1")
|
|
RACE_FLAG = -race
|
|
GOBUILD = GOPATH=$(GOPATH) CGO_ENABLED=1 $(GO) build
|
|
endif
|
|
|
|
CHECK_FLAG =
|
|
ifeq ("$(WITH_CHECK)", "1")
|
|
CHECK_FLAG = $(TEST_LDFLAGS)
|
|
endif
|
|
|
|
server:
|
|
ifeq ($(TARGET), "")
|
|
$(GOBUILD) $(RACE_FLAG) -ldflags '$(LDFLAGS) $(CHECK_FLAG)' -o bin/tidb-server tidb-server/main.go
|
|
else
|
|
$(GOBUILD) $(RACE_FLAG) -ldflags '$(LDFLAGS) $(CHECK_FLAG)' -o '$(TARGET)' tidb-server/main.go
|
|
endif
|
|
|
|
server_check:
|
|
ifeq ($(TARGET), "")
|
|
$(GOBUILD) $(RACE_FLAG) -ldflags '$(CHECK_LDFLAGS)' -o bin/tidb-server tidb-server/main.go
|
|
else
|
|
$(GOBUILD) $(RACE_FLAG) -ldflags '$(CHECK_LDFLAGS)' -o '$(TARGET)' tidb-server/main.go
|
|
endif
|
|
|
|
coverage_server:
|
|
ifeq ($(TARGET), "")
|
|
$(GOBUILDCOVERAGE) $(RACE_FLAG) -ldflags '$(LDFLAGS) $(COVERAGE_SERVER_LDFLAGS) $(CHECK_FLAG)' -o ../bin/tidb-coverage-server
|
|
else
|
|
$(GOBUILDCOVERAGE) $(RACE_FLAG) -ldflags '$(LDFLAGS) $(COVERAGE_SERVER_LDFLAGS) $(CHECK_FLAG)' -o '$(TARGET)'
|
|
endif
|
|
|
|
benchkv:
|
|
$(GOBUILD) -ldflags '$(LDFLAGS)' -o bin/benchkv cmd/benchkv/main.go
|
|
|
|
benchraw:
|
|
$(GOBUILD) -ldflags '$(LDFLAGS)' -o bin/benchraw cmd/benchraw/main.go
|
|
|
|
benchdb:
|
|
$(GOBUILD) -ldflags '$(LDFLAGS)' -o bin/benchdb cmd/benchdb/main.go
|
|
|
|
importer:
|
|
$(GOBUILD) -ldflags '$(LDFLAGS)' -o bin/importer ./cmd/importer
|
|
|
|
checklist:
|
|
cat checklist.md
|
|
|
|
failpoint-enable: tools/bin/failpoint-ctl
|
|
# Converting gofail failpoints...
|
|
@$(FAILPOINT_ENABLE)
|
|
|
|
failpoint-disable: tools/bin/failpoint-ctl
|
|
# Restoring gofail failpoints...
|
|
@$(FAILPOINT_DISABLE)
|
|
|
|
checkdep:
|
|
$(GO) list -f '{{ join .Imports "\n" }}' github.com/pingcap/tidb/store/tikv | grep ^github.com/pingcap/parser$$ || exit 0; exit 1
|
|
|
|
tools/bin/megacheck: tools/check/go.mod
|
|
cd tools/check; \
|
|
$(GO) build -o ../bin/megacheck honnef.co/go/tools/cmd/megacheck
|
|
|
|
tools/bin/revive: tools/check/go.mod
|
|
cd tools/check; \
|
|
$(GO) build -o ../bin/revive github.com/mgechev/revive
|
|
|
|
tools/bin/goword: tools/check/go.mod
|
|
cd tools/check; \
|
|
$(GO) build -o ../bin/goword github.com/chzchzchz/goword
|
|
|
|
tools/bin/gometalinter: tools/check/go.mod
|
|
cd tools/check; \
|
|
$(GO) build -o ../bin/gometalinter gopkg.in/alecthomas/gometalinter.v3
|
|
|
|
tools/bin/gosec: tools/check/go.mod
|
|
cd tools/check; \
|
|
$(GO) build -o ../bin/gosec github.com/securego/gosec/cmd/gosec
|
|
|
|
tools/bin/errcheck: tools/check/go.mod
|
|
cd tools/check; \
|
|
$(GO) build -o ../bin/errcheck github.com/kisielk/errcheck
|
|
|
|
tools/bin/failpoint-ctl: go.mod
|
|
$(GO) build -o $@ github.com/pingcap/failpoint/failpoint-ctl
|
|
|
|
tools/bin/misspell:tools/check/go.mod
|
|
$(GO) get -u github.com/client9/misspell/cmd/misspell
|
|
|
|
tools/bin/ineffassign:tools/check/go.mod
|
|
cd tools/check; \
|
|
$(GO) build -o ../bin/ineffassign github.com/gordonklaus/ineffassign
|