PROTOC_GEN_GO := $(shell go env GOPATH)/bin/protoc-gen-go

ARCH := $(shell uname -m)
VERSION := $(shell git describe --always --dirty=-dirty)

GOLDFLAGS += -X main.Version=$(VERSION)
GOLDFLAGS += -X main.Buildarch=$(ARCH)
GOFLAGS := -ldflags "$(GOLDFLAGS)"

default: run

run: ./mfer
	./$<
	./$< gen

$(PROTOC_GEN_GO):
	test -e $(PROTOC_GEN_GO) || go get -u github.com/golang/protobuf/protoc-gen-go

prereqs: $(PROTOC_GEN_GO)
	which gofumpt || go install -v mvdan.cc/gofumpt@latest
	which golangci-lint || go install -v github.com/golangci/golangci-lint/cmd/golangci-lint@latest

mfer: prereqs src/*.go cmd/*/*.go
	cd proto && go generate .
	cd cmd/mfer && go build -o ../../mfer $(GOFLAGS) .

clean:
	rm -rfv proto/*.pb.go ./mfer

fmt: prereqs
	gofumpt -l -w src cmd
	golangci-lint run --fix
	prettier -w *.json *.md

lint:
	golangci-lint run
	sh -c 'test -z "$$(gofmt -l .)"'

dockerbuild:
	docker build .