2022-11-22 23:22:07 +00:00
## Derived from work and ideas in https://github.com/ovrclk/akash/blob/8a29be1c3404843c80f0c861b2e577067607474b/make/setup-cache.mk
################################################################################
### Required Variables ###
################################################################################
i f n d e f B U I L D _ C A C H E _ D I R
$( error BUILD_CACHE_DIR not set )
e n d i f
i f n d e f B I N _ D I R
$( error BIN_DIR not set )
e n d i f
i f n d e f O S _ F A M I L Y
$( error OS_FAMILY not set )
e n d i f
i f n d e f M A C H I N E
$( error MACHINE not set )
e n d i f
################################################################################
### Dir Setup ###
################################################################################
DIRS := $( BUILD_CACHE_DIR) $( BIN_DIR)
################################################################################
### Tool Versions ###
################################################################################
2023-08-11 20:29:54 +00:00
GO_BIN ?= go
2022-11-22 23:22:07 +00:00
PROTOC_VERSION ?= v21.9
BUF_VERSION ?= v1.9.0
PROTOC_GEN_GOCOSMOS_VERSION ?= v0.3.1
2023-08-11 20:29:54 +00:00
PROTOC_GEN_GRPC_GATEWAY_VERSION ?= $( shell $( GO_BIN) list -m github.com/grpc-ecosystem/grpc-gateway| sed 's:.* ::' )
2022-11-22 23:22:07 +00:00
PROTOC_GEN_DOC_VERSION ?= v1.5.1
SWAGGER_COMBINE_VERSION ?= v1.4.0
################################################################################
### Protoc Install ###
################################################################################
PROTOC_VERSION_FILE := $( BUILD_CACHE_DIR) /protoc-$( PROTOC_VERSION) .version
i f e q ( $( OS_FAMILY ) , L i n u x )
PROTOC_PLATFORM := linux
e n d i f
i f e q ( $( OS_FAMILY ) , D a r w i n )
PROTOC_PLATFORM := osx
e n d i f
PROTOC_MACHINE := $( MACHINE)
i f e q ( $( MACHINE ) , a m d 6 4 )
PROTOC_MACHINE := x86_64
e n d i f
i f e q ( $( MACHINE ) , a a r c h 6 4 )
PROTOC_MACHINE := aarch_64
e n d i f
i f e q ( $( MACHINE ) , a r m 6 4 )
PROTOC_MACHINE := aarch_64
e n d i f
PROTOC_ARCHIVE_NAME := protoc-$( shell echo $( PROTOC_VERSION) | sed s/^v//) -$( PROTOC_PLATFORM) -$( PROTOC_MACHINE) .zip
PROTOC_DOWNLOAD_URL := https://github.com/protocolbuffers/protobuf/releases/download/$( PROTOC_VERSION) /$( PROTOC_ARCHIVE_NAME)
$(PROTOC_VERSION_FILE) :
@echo "installing protoc..."
@mkdir -p $( DIRS)
@touch $( PROTOC_VERSION_FILE)
@cd $( BUILD_CACHE_DIR) ; \
mkdir -p protoc && cd protoc; \
curl -sOL $( PROTOC_DOWNLOAD_URL) ; \
unzip -q $( PROTOC_ARCHIVE_NAME) bin/protoc
@cp $( BUILD_CACHE_DIR) /protoc/bin/protoc $( BIN_DIR) /protoc
@rm -rf $( BUILD_CACHE_DIR) /protoc
PROTOC := $( BIN_DIR) /protoc
BUILD_DEPS = $( PROTOC)
$(PROTOC) : $( PROTOC_VERSION_FILE )
@echo " installed $( shell $( PROTOC) --version) "
################################################################################
### Buf Install ###
################################################################################
BUF_VERSION_FILE := $( BUILD_CACHE_DIR) /buf-$( BUF_VERSION) .version
BUF_ARCHIVE_NAME := buf-$( OS_FAMILY) -$( MACHINE) .tar.gz
BUF_DOWNLOAD_URL := https://github.com/bufbuild/buf/releases/download/$( BUF_VERSION) /$( BUF_ARCHIVE_NAME)
$(BUF_VERSION_FILE) :
@echo "installing buf..."
@mkdir -p $( DIRS)
@touch $( BUF_VERSION_FILE)
@cd $( BUILD_CACHE_DIR) ; \
mkdir -p buf && cd buf; \
curl -sOL $( BUF_DOWNLOAD_URL) ; \
tar -xzf $( BUF_ARCHIVE_NAME) buf/bin/buf
@cp $( BUILD_CACHE_DIR) /buf/buf/bin/buf $( BIN_DIR) /buf
@rm -rf $( BUILD_CACHE_DIR) /buf
BUF := $( BIN_DIR) /buf
BUILD_DEPS += $( BUF)
$(BUF) : $( BUF_VERSION_FILE )
@echo " installed buf $( shell $( BUF) --version) "
################################################################################
### gocomos proto plugin ###
################################################################################
PROTOC_GEN_GOCOSMOS_VERSION_FILE := $( BUILD_CACHE_DIR) /protoc-gen-gocosmos-$( PROTOC_GEN_GOCOSMOS_VERSION) .version
$(PROTOC_GEN_GOCOSMOS_VERSION_FILE) :
@echo "installing protoc-gen-gocosmos..."
@mkdir -p $( DIRS)
@touch $( PROTOC_GEN_GOCOSMOS_VERSION_FILE)
@cd $( BUILD_CACHE_DIR) ; \
mkdir -p protoc-gen-gocosmos && cd protoc-gen-gocosmos; \
git clone -q https://github.com/regen-network/cosmos-proto.git; \
cd cosmos-proto; \
git checkout -q $( PROTOC_GEN_GOCOSMOS_VERSION) ; \
2023-08-11 20:29:54 +00:00
GOBIN = $( ROOT_DIR) /$( BIN_DIR) $( GO_BIN) install ./protoc-gen-gocosmos
2022-11-22 23:22:07 +00:00
@rm -rf $( BUILD_CACHE_DIR) /protoc-gen-gocosmos
PROTOC_GEN_GOCOSMOS := $( BIN_DIR) /protoc-gen-gocosmos
BUILD_DEPS += $( PROTOC_GEN_GOCOSMOS)
$(PROTOC_GEN_GOCOSMOS) : $( PROTOC_GEN_GOCOSMOS_VERSION_FILE )
@echo " installed protoc-gen-gocosmos $( PROTOC_GEN_GOCOSMOS_VERSION) "
################################################################################
### grpc gateway proto plugin ###
################################################################################
PROTOC_GEN_GRPC_GATEWAY_VERSION_FILE := $( BUILD_CACHE_DIR) /protoc-gen-grpc-gateway-$( PROTOC_GEN_GRPC_GATEWAY_VERSION) .version
$(PROTOC_GEN_GRPC_GATEWAY_VERSION_FILE) :
@echo "installing protoc-gen-grpc-gateway..."
@mkdir -p $( DIRS)
@touch $( PROTOC_GEN_GRPC_GATEWAY_VERSION_FILE)
@cd $( BUILD_CACHE_DIR) ; \
mkdir -p protoc-gen-grpc-gateway && cd protoc-gen-grpc-gateway; \
git clone -q https://github.com/grpc-ecosystem/grpc-gateway.git; \
cd grpc-gateway; \
git checkout -q $( PROTOC_GEN_GRPC_GATEWAY_VERSION) ; \
2023-08-11 20:29:54 +00:00
GOBIN = $( ROOT_DIR) /$( BIN_DIR) $( GO_BIN) install ./protoc-gen-grpc-gateway; \
GOBIN = $( ROOT_DIR) /$( BIN_DIR) $( GO_BIN) install ./protoc-gen-swagger
2022-11-22 23:22:07 +00:00
@rm -rf $( BUILD_CACHE_DIR) /protoc-gen-grpc-gateway
PROTOC_GEN_GRPC_GATEWAY := $( BIN_DIR) /protoc-gen-grpc-gateway
BUILD_DEPS += $( PROTOC_GEN_GRPC_GATEWAY)
$(PROTOC_GEN_GRPC_GATEWAY) : $( PROTOC_GEN_GRPC_GATEWAY_VERSION_FILE )
@echo " installed protoc-gen-grpc-gateway $( PROTOC_GEN_GRPC_GATEWAY_VERSION) "
PROTOC_GEN_SWAGGER := $( BIN_DIR) /protoc-gen-swagger
BUILD_DEPS += $( PROTOC_GEN_SWAGGER)
$(PROTOC_GEN_SWAGGER) : $( PROTOC_GEN_GRPC_GATEWAY_VERSION_FILE )
@echo " installed protoc-gen-swagger $( PROTOC_GEN_GRPC_GATEWAY_VERSION) "
################################################################################
### Proto Gen Doc Install ###
################################################################################
PROTOC_GEN_DOC_VERSION_FILE := $( BUILD_CACHE_DIR) /protoc-gen-doc-$( PROTOC_GEN_DOC_VERSION) .version
i f e q ( $( OS_FAMILY ) , L i n u x )
PROTOC_GEN_DOC_PLATFORM := linux
e n d i f
i f e q ( $( OS_FAMILY ) , D a r w i n )
PROTOC_GEN_DOC_PLATFORM := darwin
e n d i f
PROTOC_GEN_DOC_MACHINE := $( MACHINE)
i f e q ( $( MACHINE ) , x 8 6 _ 6 4 )
PROTOC_GEN_DOC_MACHINE := amd64
e n d i f
i f e q ( $( MACHINE ) , a a r c h 6 4 )
PROTOC_GEN_DOC_MACHINE := arm64
e n d i f
PROTOC_GEN_DOC_ARCHIVE_NAME := protoc-gen-doc_$( shell echo $( PROTOC_GEN_DOC_VERSION) | sed s/^v//) _$( PROTOC_GEN_DOC_PLATFORM) _$( PROTOC_GEN_DOC_MACHINE) .tar.gz
PROTOC_GEN_DOC_DOWNLOAD_URL := https://github.com/pseudomuto/protoc-gen-doc/releases/download/$( PROTOC_GEN_DOC_VERSION) /$( PROTOC_GEN_DOC_ARCHIVE_NAME)
$(PROTOC_GEN_DOC_VERSION_FILE) :
@echo "installing protoc-gen-doc..."
@mkdir -p $( DIRS)
@touch $( PROTOC_GEN_DOC_VERSION_FILE)
@cd $( BUILD_CACHE_DIR) ; \
mkdir -p protoc-gen-doc && cd protoc-gen-doc; \
curl -sOL $( PROTOC_GEN_DOC_DOWNLOAD_URL) ; \
tar -xzf $( PROTOC_GEN_DOC_ARCHIVE_NAME) protoc-gen-doc
@cp $( BUILD_CACHE_DIR) /protoc-gen-doc/protoc-gen-doc $( BIN_DIR) /protoc-gen-doc
@rm -rf $( BUILD_CACHE_DIR) /protoc-gen-doc
PROTOC_GEN_DOC := $( BIN_DIR) /protoc-gen-doc
BUILD_DEPS += $( PROTOC_GEN_DOC)
$(PROTOC_GEN_DOC) : $( PROTOC_GEN_DOC_VERSION_FILE )
@echo " installed protoc-gen-doc $( shell $( PROTOC_GEN_DOC) --version) "
################################################################################
### Swagger Combine ###
################################################################################
SWAGGER_COMBINE_VERSION_FILE := $( BUILD_CACHE_DIR) /swagger-combine-$( SWAGGER_COMBINE_VERSION) .version
$(SWAGGER_COMBINE_VERSION_FILE) :
@echo "installing swagger-combine..."
@mkdir -p $( DIRS) $( BUILD_CACHE_DIR) /node_modules
@touch $( SWAGGER_COMBINE_VERSION_FILE)
@npm install --silent --no-progress --prefix $( BUILD_CACHE_DIR) swagger-combine@$( shell echo $( SWAGGER_COMBINE_VERSION) | sed s/^v//)
@ln -sf ../.cache/node_modules/.bin/swagger-combine $( BIN_DIR) /swagger-combine
SWAGGER_COMBINE := $( BIN_DIR) /swagger-combine
BUILD_DEPS += $( SWAGGER_COMBINE)
$(SWAGGER_COMBINE) : $( SWAGGER_COMBINE_VERSION_FILE )
@echo " installed swagger-combine $( shell $( SWAGGER_COMBINE) -v) "
################################################################################
### Build Deps ###
################################################################################
.PHONY : install -build -deps
install-build-deps : $( BUILD_DEPS )