introduce a parserlib PHONY, and other rules depend on it, rather than parser. if parser.go already exists and not older than parser.y, avoid generate it.
138 lines
3.9 KiB
Makefile
138 lines
3.9 KiB
Makefile
### Makefile for tidb
|
|
|
|
# Ensure GOPATH is set before running build process.
|
|
ifeq "$(GOPATH)" ""
|
|
$(error Please set the environment variable GOPATH before running `make`)
|
|
endif
|
|
|
|
CURDIR := $(shell pwd)
|
|
path_to_add := $(addsuffix /bin,$(subst :,/bin:,$(CURDIR)/_vendor:$(GOPATH)))
|
|
export PATH := $(path_to_add):$(PATH)
|
|
|
|
GO := GO15VENDOREXPERIMENT="1" go
|
|
GOBUILD := GOPATH=$(CURDIR)/_vendor:$(GOPATH) $(GO) build
|
|
GOTEST := GOPATH=$(CURDIR)/_vendor:$(GOPATH) $(GO) test
|
|
|
|
ARCH := "`uname -s`"
|
|
LINUX := "Linux"
|
|
MAC := "Darwin"
|
|
PACKAGES := $$(go list ./...| grep -vE 'vendor')
|
|
FILES := $$(find . -name '*.go' | grep -vE 'vendor')
|
|
|
|
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)"
|
|
|
|
TARGET = ""
|
|
|
|
.PHONY: all build update parser clean todo test gotest interpreter server dev benchkv benchraw check parserlib
|
|
|
|
default: server buildsucc
|
|
|
|
buildsucc:
|
|
@echo Build TiDB Server successfully!
|
|
|
|
all: dev server benchkv
|
|
|
|
dev: parserlib build benchkv test check
|
|
|
|
build:
|
|
$(GOBUILD)
|
|
|
|
TEMP_FILE = temp_parser_file
|
|
|
|
goyacc:
|
|
$(GOBUILD) -o bin/goyacc parser/goyacc/main.go
|
|
|
|
parser: goyacc
|
|
bin/goyacc -o /dev/null -xegen $(TEMP_FILE) parser/parser.y
|
|
bin/goyacc -o parser/parser.go -xe $(TEMP_FILE) parser/parser.y 2>&1 | egrep "(shift|reduce)/reduce" | awk '{print} END {if (NR > 0) {print "Find conflict in parser.y. Please check y.output for more information."; system("rm -f $(TEMP_FILE)"); exit 1;}}'
|
|
rm -f $(TEMP_FILE)
|
|
rm -f y.output
|
|
|
|
@if [ $(ARCH) = $(LINUX) ]; \
|
|
then \
|
|
sed -i -e 's|//line.*||' -e 's/yyEofCode/yyEOFCode/' parser/parser.go; \
|
|
elif [ $(ARCH) = $(MAC) ]; \
|
|
then \
|
|
/usr/bin/sed -i "" 's|//line.*||' parser/parser.go; \
|
|
/usr/bin/sed -i "" 's/yyEofCode/yyEOFCode/' parser/parser.go; \
|
|
fi
|
|
|
|
@awk 'BEGIN{print "// Code generated by goyacc"} {print $0}' parser/parser.go > tmp_parser.go && mv tmp_parser.go parser/parser.go;
|
|
|
|
parserlib: parser/parser.go
|
|
|
|
parser/parser.go: parser/parser.y
|
|
make parser
|
|
|
|
check:
|
|
bash gitcookie.sh
|
|
go get github.com/golang/lint/golint
|
|
|
|
@echo "vet"
|
|
@ go tool vet $(FILES) 2>&1 | awk '{print} END{if(NR>0) {exit 1}}'
|
|
@echo "vet --shadow"
|
|
@ go tool vet --shadow $(FILES) 2>&1 | awk '{print} END{if(NR>0) {exit 1}}'
|
|
@echo "golint"
|
|
@ golint ./... 2>&1 | grep -vE 'context\.Context|LastInsertId|NewLexer|\.pb\.go' | awk '{print} END{if(NR>0) {exit 1}}'
|
|
@echo "gofmt (simplify)"
|
|
@ gofmt -s -l -w $(FILES) 2>&1 | awk '{print} END{if(NR>0) {exit 1}}'
|
|
|
|
errcheck:
|
|
go get github.com/kisielk/errcheck
|
|
errcheck -blank $(PACKAGES)
|
|
|
|
clean:
|
|
$(GO) clean -i ./...
|
|
rm -rf *.out
|
|
|
|
todo:
|
|
@grep -n ^[[:space:]]*_[[:space:]]*=[[:space:]][[:alpha:]][[:alnum:]]* */*.go parser/parser.y || true
|
|
@grep -n TODO */*.go parser/parser.y || true
|
|
@grep -n BUG */*.go parser/parser.y || true
|
|
@grep -n println */*.go parser/parser.y || true
|
|
|
|
test: gotest
|
|
|
|
gotest: parserlib
|
|
@export log_level=error;\
|
|
$(GOTEST) -cover $(PACKAGES)
|
|
|
|
race: parserlib
|
|
@export log_level=debug; \
|
|
$(GOTEST) -race $(PACKAGES)
|
|
|
|
tikv_integration_test: parserlib
|
|
$(GOTEST) ./store/tikv/. -with-tikv=true
|
|
|
|
server: parserlib
|
|
ifeq ($(TARGET), "")
|
|
$(GOBUILD) -ldflags '$(LDFLAGS)' -o bin/tidb-server tidb-server/main.go
|
|
else
|
|
$(GOBUILD) -ldflags '$(LDFLAGS)' -o '$(TARGET)' tidb-server/main.go
|
|
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
|
|
|
|
update:
|
|
which glide >/dev/null || curl https://glide.sh/get | sh
|
|
which glide-vc || go get -v -u github.com/sgotti/glide-vc
|
|
rm -r vendor && mv _vendor/src vendor || true
|
|
rm -rf _vendor
|
|
ifdef PKG
|
|
glide get -s -v --skip-test ${PKG}
|
|
else
|
|
glide update -s -v -u --skip-test
|
|
endif
|
|
@echo "removing test files"
|
|
glide vc --only-code --no-tests
|
|
mkdir -p _vendor
|
|
mv vendor _vendor/src
|