PROJECT=ffs

REGISTY ?= ecr
REPO ?= mhboy
TAG ?= latest

GOPATH ?= $(shell go env GOPATH)

# Ensure GOPATH is set before running build process.
ifeq "$(GOPATH)" ""
  $(error Please set the environment variable GOPATH before running `make`)
endif

GO                  := GO111MODULE=on go
GOBUILD             := $(GO) build $(BUILD_FLAG) -tags codes
GOTEST              := $(GO) test -p 8

LDFLAGS             += -X 'main.gitHash=`git rev-parse HEAD`'
TEST_LDFLAGS        := ""

PACKAGE_LIST        := go list ./...| grep -vE "cmd"
PACKAGES            := $$($(PACKAGE_LIST))

# Targets
.PHONY: build linux test go-test go-build go-build-linux universe zone throttler realm client

default: build

test: go-test

go-test:
	@echo "Running tests in native mode."
	@export TZ='Asia/Shanghai'; \
	$(GOTEST) -cover $(PACKAGES)

lint:

build: go-build

linux: go-build-linux

linux-amd64: go-build-linux-amd64

linux-arm64: go-build-linux-arm64

buildx: docker-buildx

go-build: universe zone throttler realm client

go-build-linux: universe-linux zone-linux throttler-linux realm-linux client-linux

go-build-linux-amd64: universe-linux-amd64 zone-linux-amd64 throttler-linux-amd64 realm-linux-amd64 client-linux-amd64

go-build-linux-arm64: universe-linux-arm64 zone-linux-arm64 throttler-linux-arm64 realm-linux-arm64 client-linux-arm64

universe:
	$(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/universe-server cmd/universe-server/main.go

universe-linux:
	GOOS=linux $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/universe-server-linux cmd/universe-server/main.go

universe-linux-amd64:
	GOOS=linux GOARCH=amd64 $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/universe-server-linux cmd/universe-server/main.go

universe-linux-arm64:
	GOOS=linux GOARCH=arm64 $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/universe-server-linux cmd/universe-server/main.go

zone:
	$(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/zone-server cmd/zone-server/main.go

zone-linux:
	GOOS=linux $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/zone-server-linux cmd/zone-server/main.go

zone-linux-amd64:
	GOOS=linux GOARCH=amd64 $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/zone-server-linux cmd/zone-server/main.go

zone-linux-arm64:
	GOOS=linux GOARCH=arm64 $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/zone-server-linux cmd/zone-server/main.go

throttler:
	$(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/throttler-server cmd/throttler-server/main.go

throttler-linux:
	GOOS=linux $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/throttler-server-linux cmd/throttler-server/main.go

throttler-linux-amd64:
	GOOS=linux GOARCH=amd64 $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/throttler-server-linux cmd/throttler-server/main.go

throttler-linux-arm64:
	GOOS=linux GOARCH=arm64 $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/throttler-server-linux cmd/throttler-server/main.go

realm:
	$(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/realm-server cmd/realm-server/main.go

realm-linux:
	GOOS=linux $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/realm-server-linux cmd/realm-server/main.go

realm-linux-amd64:
	GOOS=linux GOARCH=amd64 $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/realm-server-linux cmd/realm-server/main.go

realm-linux-arm64:
	GOOS=linux GOARCH=arm64 $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/realm-server-linux cmd/realm-server/main.go

client:
	$(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/ffs-client cmd/ffs-client/main.go

client-linux:
	GOOS=linux $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/ffs-client-linux cmd/ffs-client/main.go

client-linux-amd64:
	GOOS=linux GOARCH=amd64 $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/ffs-client-linux cmd/ffs-client/main.go

client-linux-arm64:
	GOOS=linux GOARCH=arm64 $(GOBUILD) -ldflags "$(LDFLAGS)" -o bin/ffs-client-linux cmd/ffs-client/main.go

docker-buildx: docker-buildx-universe docker-buildx-zone docker-buildx-throttler docker-buildx-realm docker-buildx-client

docker-buildx-universe:
	docker buildx build --platform=linux/arm64,linux/amd64 --push --target universe -t ${IMG} .

docker-buildx-zone:
	docker buildx build --platform=linux/arm64,linux/amd64 --push --target zone -t ${IMG} .

docker-buildx-throttler:
	docker buildx build --platform=linux/arm64,linux/amd64 --push --target throttler -t ${IMG} .

docker-buildx-realm:
	docker buildx build --platform=linux/arm64,linux/amd64 --push --target realm -t ${IMG} .

docker-buildx-client:
	docker buildx build --platform=linux/arm64,linux/amd64 --push --target client -t ${IMG} .
