# clip-sync Makefile # Cross-compilation, tests, release. BINARY := clip-sync VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "0.1.0") LDFLAGS := -s -w -X main.version=$(VERSION) BUILD_DIR := bin GOOSES := linux windows darwin GOARCHES := amd64 arm64 .DEFAULT_GOAL := build # ── Build ────────────────────────────────────────────────────────────── .PHONY: build build: @mkdir -p $(BUILD_DIR) CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(BINARY) . # ── Cross-compile ────────────────────────────────────────────────────── .PHONY: release release: @mkdir -p $(BUILD_DIR) @for os in $(GOOSES); do \ for arch in $(GOARCHES); do \ echo "Building $$os/$$arch..."; \ GOOS=$$os GOARCH=$$arch CGO_ENABLED=0 go build \ -ldflags "$(LDFLAGS)" \ -o $(BUILD_DIR)/$(BINARY)-$$os-$$arch$(if $(filter windows,$$os),.exe,) \ .; \ done; \ done @echo "Release builds in $(BUILD_DIR)/:" @ls -lh $(BUILD_DIR) # ── Test ─────────────────────────────────────────────────────────────── .PHONY: test test: go test ./... -count=1 -timeout 60s .PHONY: test-verbose test-verbose: go test ./... -v -count=1 -timeout 60s .PHONY: test-race test-race: go test ./... -race -count=1 -timeout 120s .PHONY: test-cover test-cover: go test ./... -coverprofile=coverage.out -count=1 -timeout 60s go tool cover -func=coverage.out # ── Lint ─────────────────────────────────────────────────────────────── .PHONY: lint lint: golangci-lint run ./... # ── Clean ────────────────────────────────────────────────────────────── .PHONY: clean clean: rm -rf $(BUILD_DIR) coverage.out # ── Install (local dev) ──────────────────────────────────────────────── .PHONY: install install: build install -m 755 $(BUILD_DIR)/$(BINARY) $(HOME)/.local/bin/$(BINARY) # ── Help ──────────────────────────────────────────────────────────────── .PHONY: help help: @echo "clip-sync Makefile" @echo "" @echo " build Build for current platform" @echo " release Cross-compile all platforms (linux/windows/darwin, amd64/arm64)" @echo " test Run all tests" @echo " test-verbose Run tests with verbose output" @echo " test-race Run tests with race detector" @echo " test-cover Run tests with coverage report" @echo " lint Run golangci-lint" @echo " clean Remove build artifacts" @echo " install Install binary to ~/.local/bin/" @echo " help Show this help"