123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #===================================================
- # Makefile helper functions for golang
- #
- GO :=go
- GO_SUPPORTED_VERSIONS ?= 1.13|1.14|1.15|1.16|1.17|1.18|1.19|1.20|1.21|1.22
- GO_LDFLAGS += -X $(VERSION_PACKAGE).GitVersion=$(VERSION) \
- -X $(VERSION_PACKAGE).GitCommit=$(GIT_COMMIT) \
- -X $(VERSION_PACKAGE).GitTreeState=$(GIT_TREE_STATE) \
- -X $(VERSION_PACKAGE).BuildDate=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')
- ifneq ($(DLV),)
- GO_BUILD_FLAGS += -gcflags "all=-N -l"
- LDFLAGS = ""
- endif
- GO_BUILD_FLAGS += -tags=jsoniter -ldflags "$(GO_LDFLAGS)"
- ifeq ($(GOOS),windows)
- GO_OUT_EXT := .exe
- endif
- ifeq ($(ROOT_PACKAGE),)
- $(error the variable ROOT_PACKAGE must be set prior to including golang.mk)
- endif
- GOPATH := $(shell go env GOPATH)
- ifeq ($(origin GOBIN), undefined)
- GOBIN := $(GOPATH)/bin
- endif
- COMMANDS ?= $(filter-out %docs, $(wildcard ${ROOT_DIR}/cmd/*))
- BINS ?= $(foreach cmd,${COMMANDS},$(notdir ${cmd}))
- ifeq (${COMMANDS},)
- $(error Could not determine COMMANDS, set ROOT_DIR or run in source dir)
- endif
- ifeq (${BINS},)
- $(error Could not determine BINS, set ROOT_DIR or run in source dir)
- endif
- # 指定测试用例目录
- EXCLUDE_TESTS= admin-layout/test
- # 判断go版本
- .PHONY: go.build.verify
- go.build.verify:
- ifneq ($(shell $(GO) version | grep -q -E '\bgo($(GO_SUPPORTED_VERSIONS))\b' && echo 0 || echo 1), 0)
- $(error unsupported go version. Please make install one of the following supported version: '$(GO_SUPPORTED_VERSIONS)')
- endif
- # 编译函数
- .PHONY: go.build.%
- go.build.%:
- $(eval COMMAND := $(word 2,$(subst ., ,$*)))
- $(eval PLATFORM := $(word 1,$(subst ., ,$*)))
- $(eval OS := $(word 1,$(subst _, ,$(PLATFORM))))
- $(eval ARCH := $(word 2,$(subst _, ,$(PLATFORM))))
- @echo "===========> Building binary $(COMMAND) $(VERSION) for $(OS) $(ARCH)"
- @mkdir -p $(OUTPUT_DIR)/platforms/$(OS)/$(ARCH)
- @CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH) $(GO) build $(GO_BUILD_FLAGS) -o $(OUTPUT_DIR)/platforms/$(OS)/$(ARCH)/$(COMMAND)$(GO_OUT_EXT) $(ROOT_PACKAGE)/cmd/$(COMMAND)
- # 根据当前平台编译
- .PHONY: go.build
- go.build: go.build.verify $(addprefix go.build., $(addprefix $(PLATFORM)., $(BINS)))
- # 多平台编译
- .PHONY: go.build.multiarch
- go.build.multiarch: go.build.verify $(foreach p,$(PLATFORMS),$(addprefix go.build.,$(addprefix $(p).,$(BINS))))
- # 代码检查
- .PHONY: go.lint
- go.lint: tools.verify.golangci-lint
- @echo "===========> Run golangci to lint source codes"
- @golangci-lint run -c $(ROOT_DIR)/.golangci.yaml $(ROOT_DIR)/...
- # 测试用例执行和报告
- # 测试覆盖率检查
|