BINARY_NAME := chatlog GO := go ifeq ($(VERSION),) VERSION := $(shell git describe --tags --always --dirty="-dev") endif LDFLAGS := -ldflags '-X "github.com/sjzar/chatlog/pkg/version.Version=$(VERSION)" -w -s' PLATFORMS := \ darwin/amd64 \ darwin/arm64 \ windows/amd64 \ windows/arm64 UPX_PLATFORMS := \ darwin/amd64 \ windows/386 \ windows/amd64 .PHONY: all clean lint tidy test build crossbuild upx all: clean lint tidy test build clean: @echo "๐Ÿงน Cleaning..." @rm -rf bin/ lint: @echo "๐Ÿ•ต๏ธโ€โ™‚๏ธ Running linters..." golangci-lint run ./... tidy: @echo "๐Ÿงผ Tidying up dependencies..." $(GO) mod tidy test: @echo "๐Ÿงช Running tests..." $(GO) test ./... -cover build: @echo "๐Ÿ”จ Building for current platform..." CGO_ENABLED=1 $(GO) build -trimpath $(LDFLAGS) -o bin/$(BINARY_NAME) main.go crossbuild: clean @echo "๐ŸŒ Building for multiple platforms..." for platform in $(PLATFORMS); do \ os=$$(echo $$platform | cut -d/ -f1); \ arch=$$(echo $$platform | cut -d/ -f2); \ float=$$(echo $$platform | cut -d/ -f3); \ output_name=bin/chatlog_$${os}_$${arch}; \ [ "$$float" != "" ] && output_name=$$output_name_$$float; \ echo "๐Ÿ”จ Building for $$os/$$arch..."; \ echo "๐Ÿ”จ Building for $$output_name..."; \ GOOS=$$os GOARCH=$$arch CGO_ENABLED=1 GOARM=$$float $(GO) build -trimpath $(LDFLAGS) -o $$output_name main.go ; \ if [ "$(ENABLE_UPX)" = "1" ] && echo "$(UPX_PLATFORMS)" | grep -q "$$os/$$arch"; then \ echo "โš™๏ธ Compressing binary $$output_name..." && upx --best $$output_name; \ fi; \ done