.PHONY: build generate generate_buf generate_swagger

BIN     = bin
GOBIN   = $(abspath $(BIN))
GOENVS  = GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64
GOFLAGS = -ldflags "-s -w " -v

export DOCKER_BUILDKIT := 1
export GOBIN           := $(GOBIN)
export PATH            := ${GOBIN}:$(PATH)
export SHELL           := /bin/bash

build: generate
	$(GOENVS) go build $(GOFLAGS) -o bin/sqleditor cmd/sqleditor/main.go
	$(GOENVS) go build $(GOFLAGS) -o bin/chat2queryapi cmd/chat2queryapi/main.go

generate: generate_buf

generate_buf: $(BIN)/buf
	cd idl/idl && ${GOBIN}/buf generate

generate_swagger: $(BIN)/swag
	${GOBIN}/swag init -g cmd/sqleditor/main.go

$(BIN):
	@mkdir -p $@

$(BIN)/%: $(BIN)
	go install $(PACKAGE)

# bufbuild requires go1.18 since v1.1.1.
$(BIN)/buf: PACKAGE=github.com/bufbuild/buf/cmd/buf@v1.1.0
$(BIN)/buf: ${BIN}/protoc-gen-buf-breaking ${BIN}/protoc-gen-buf-lint ${BIN}/protoc-gen-go ${BIN}/protoc-gen-go-grpc ${BIN}/protoc-gen-grpc-gateway ${BIN}/protoc-gen-openapiv2

$(BIN)/swag: PACKAGE=github.com/swaggo/swag/cmd/swag@v1.16.6

$(BIN)/protoc-gen-buf-breaking: PACKAGE=github.com/bufbuild/buf/cmd/protoc-gen-buf-breaking@v1.1.0

$(BIN)/protoc-gen-buf-lint: PACKAGE=github.com/bufbuild/buf/cmd/protoc-gen-buf-lint@v1.1.0

$(BIN)/protoc-gen-go: PACKAGE=google.golang.org/protobuf/cmd/protoc-gen-go@v1.28

$(BIN)/protoc-gen-go-grpc: PACKAGE=google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

$(BIN)/protoc-gen-grpc-gateway: PACKAGE=github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.10.3

$(BIN)/protoc-gen-openapiv2: PACKAGE=github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.10.3