# ─────────────────────────────
# Reproducible build Makefile
# ─────────────────────────────

GO ?= go

BIN_DIR ?= ./bin
OUT_CLIENT ?= $(BIN_DIR)/cmaas-client
OUT_OPENAI_PROXY ?= $(BIN_DIR)/openai-proxy
OUT_ANTHROPIC_PROXY ?= $(BIN_DIR)/anthropic-proxy

# Environment detection
ifeq ($(shell uname -s),Darwin)
  # macOS environment
  GOOS   ?= darwin
  ifeq ($(shell uname -m),arm64)
    # ARM64 architecture
    GOARCH ?= arm64
  else
    # Intel architecture
    GOARCH ?= amd64
  endif
else
  # Linux environment
  GOOS   ?= linux
  GOARCH ?= amd64
endif

CGO_ENABLED := 0

# Use git commit time if available, otherwise use Unix epoch (1970-01-01)
SOURCE_DATE_EPOCH ?= $(shell git log -1 --pretty=%ct 2>/dev/null || echo 0)

export GOOS GOARCH CGO_ENABLED SOURCE_DATE_EPOCH

GOFLAGS := -trimpath -buildvcs=false
LDFLAGS := -s -w -buildid= -X 'main.buildTime=$(SOURCE_DATE_EPOCH)'

.PHONY: all build proxies client openai-proxy anthropic-proxy clean test

all: build

build: client openai-proxy anthropic-proxy

proxies: openai-proxy anthropic-proxy

client: $(OUT_CLIENT)

openai-proxy: $(OUT_OPENAI_PROXY)

anthropic-proxy: $(OUT_ANTHROPIC_PROXY)

$(OUT_CLIENT): go.mod $(shell find . -name '*.go')
	@mkdir -p $(@D)
	$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $@ ./cmd/cmaas-client

$(OUT_OPENAI_PROXY): go.mod $(shell find . -name '*.go')
	@mkdir -p $(@D)
	$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $@ ./cmd/openai-proxy

$(OUT_ANTHROPIC_PROXY): go.mod $(shell find . -name '*.go')
	@mkdir -p $(@D)
	$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $@ ./cmd/anthropic-proxy

test:
	$(GO) test ./...

clean:
	@rm -rf $(OUT_CLIENT) $(OUT_OPENAI_PROXY) $(OUT_ANTHROPIC_PROXY)
