92 lines
3.4 KiB
Makefile
92 lines
3.4 KiB
Makefile
BIN_DIR := $(CURDIR)/bin
|
|
TMP_DIR := $(CURDIR)/tmp
|
|
OUT_DIR := $(CURDIR)/pkg
|
|
PROTO_DIR := $(CURDIR)/api/proto
|
|
|
|
# https://github.com/protocolbuffers/protobuf/releases
|
|
PROTO_VERSION := 24.0
|
|
# https://pkg.go.dev/google.golang.org/grpc?tab=versions
|
|
GO_GRPC_VERSION := 1.57.0
|
|
# https://pkg.go.dev/google.golang.org/protobuf?tab=versions
|
|
PROTO_GEN_GO_VERSION := 1.31.0
|
|
# https://pkg.go.dev/google.golang.org/grpc/cmd/protoc-gen-go-grpc?tab=versions
|
|
PROTO_GEN_GO_GRPC_VERSION := 1.3.0
|
|
# https://github.com/pseudomuto/protoc-gen-doc/releases
|
|
PROTO_GEN_DOC_VERSION := 1.5.1
|
|
# https://github.com/yoheimuta/protolint/releases
|
|
PROTOLINT_VERSION = 0.45.1
|
|
# Workaround for https://github.com/golang/protobuf/issues/52
|
|
# https://github.com/favadi/protoc-go-inject-tag/releases
|
|
PROTO_GO_INJECT_TAG_VERSION = 1.4.0
|
|
# Workaround for https://github.com/golang/protobuf/issues/513
|
|
# https://github.com/kluevandrew/protoc-go-remove-enum-prefix/releases
|
|
PROTOC_GO_REMOVE_ENUM_PREFIX_VERSION = 1.1.0
|
|
|
|
PATH := $(BIN_DIR):$(PATH)
|
|
ifeq ($(OS),Windows_NT)
|
|
IS_DARWIN := 0
|
|
OSNAME := "win"
|
|
OSARCH := $(if ($(PROCESSOR_ARCHITEW6432),AMD64),"64","32")
|
|
else
|
|
IS_DARWIN := $(filter Darwin,$(shell uname -s))
|
|
OSNAME := $(if $(filter Darwin,$(shell uname -s)),"osx","linux")
|
|
OSARCH := "-x86_64"
|
|
endif
|
|
|
|
.ONESHELL: protoc-install
|
|
.PHONY: protoc-install
|
|
protoc-install:
|
|
@type $(BIN_DIR)/protoc > /dev/null 2>&1 && exit 0 || (\
|
|
(mkdir -p $(BIN_DIR) || true) && \
|
|
(mkdir -p $(TMP_DIR) || true) && \
|
|
curl -sSL "https://github.com/protocolbuffers/protobuf/releases/download/v$(PROTO_VERSION)/protoc-$(PROTO_VERSION)-$(OSNAME)$(OSARCH).zip" \
|
|
-o $(TMP_DIR)/protoc.zip && \
|
|
unzip -q -o $(TMP_DIR)/protoc.zip -d $(TMP_DIR)/protoc && \
|
|
cp -f $(TMP_DIR)/protoc/bin/protoc $(BIN_DIR)/protoc && \
|
|
cp -rf $(TMP_DIR)/protoc/include $(BIN_DIR)/include && \
|
|
chmod +x $(BIN_DIR)/protoc && \
|
|
export GOBIN=$(BIN_DIR) && \
|
|
go install -ldflags '-w -s' google.golang.org/protobuf/cmd/protoc-gen-go@v${PROTO_GEN_GO_VERSION} && \
|
|
go install -ldflags '-w -s' google.golang.org/grpc/cmd/protoc-gen-go-grpc@v${PROTO_GEN_GO_GRPC_VERSION} && \
|
|
go install -ldflags '-w -s' github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v${PROTO_GEN_DOC_VERSION} && \
|
|
go install -ldflags '-w -s' github.com/favadi/protoc-go-inject-tag@v${PROTO_GO_INJECT_TAG_VERSION} && \
|
|
go install -ldflags '-w -s' github.com/kluevandrew/protoc-go-remove-enum-prefix@v${PROTOC_GO_REMOVE_ENUM_PREFIX_VERSION} && \
|
|
go install github.com/yoheimuta/protolint/cmd/protolint@v${PROTOLINT_VERSION} && \
|
|
rm -rf $(TMP_DIR)/* && echo "Installed")
|
|
|
|
.ONESHELL: generate
|
|
.PHONY: generate
|
|
.DEFAULT_GOAL := generate
|
|
generate: protoc-install
|
|
export GOBIN=$(BIN_DIR) && \
|
|
export PATH=$$GOBIN:$$PATH && \
|
|
protoc \
|
|
-I $(BIN_DIR)/include \
|
|
--proto_path $(PROTO_DIR) \
|
|
--go_out=$(OUT_DIR) \
|
|
--go-grpc_out=$(OUT_DIR) \
|
|
--go_opt=paths=source_relative \
|
|
--go-grpc_opt=paths=source_relative \
|
|
$(PROTO_DIR)/*/*.proto \
|
|
&& \
|
|
protoc-go-inject-tag -input=$(OUT_DIR)/*/*.pb.go -remove_tag_comment && \
|
|
protoc-go-remove-enum-prefix -input=$(OUT_DIR)/*/*.pb.go
|
|
|
|
.ONESHELL: clean
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf $(BIN_DIR) $(TMP_DIR)
|
|
|
|
.ONESHELL: lint
|
|
.PHONY: lint
|
|
lint: protoc-install
|
|
export GOBIN=$(BIN_DIR) && \
|
|
export PATH=$$GOBIN:$$PATH && \
|
|
protolint lint api/proto
|
|
|
|
.ONESHELL: lint-auto-fix
|
|
.PHONY: lint-auto-fix
|
|
lint-auto-fix: protoc-install
|
|
export GOBIN=$(BIN_DIR) && \
|
|
export PATH=$$GOBIN:$$PATH && \
|
|
protolint lint -fix api/proto
|