#!/usr/bin/env make -f DIST_DIRECTORY = ./dist DIST_EXENAME = ai-agent-web BUILDINFO_CLASS = codelab/ai-agent/internal/conf BUILDINFO_VERSION := $(shell git describe --tags 2>/dev/null || echo "git/$(shell git rev-parse --short HEAD 2>/dev/null || echo 'none')") CROSS_BUILD_TRIPLES = darwin/amd64 \ darwin/arm64 \ windows/386 \ windows/amd64 \ windows/arm64 \ linux/386 \ linux/amd64 \ linux/arm64 \ linux/loong64 \ linux/mips \ linux/mips64 \ linux/mips64le \ linux/mipsle \ linux/riscv64 \ freebsd/386 \ freebsd/amd64 \ freebsd/arm64 \ freebsd/riscv64 LDFLAGS = -s -w LDFLAGS += -X "$(BUILDINFO_CLASS).BuildVersion=$(BUILDINFO_VERSION)" LDFLAGS += -X "$(BUILDINFO_CLASS).BuildTime=$(shell date '+%Y-%m-%d %H:%M:%S %Z')" LDFLAGS += -X "$(BUILDINFO_CLASS).BuildMode=release" .PHONY: build_debug build_debug: LDFLAGS = build_debug: build .PHONY: build build: clean install CGO_ENABLED=0 go build -ldflags '$(LDFLAGS)' -o $(DIST_DIRECTORY)/$(DIST_EXENAME) .PHONY: install install: go get .PHONY: clean clean: rm -rvf $(DIST_DIRECTORY) .PHONY: all $(CROSS_BUILD_TRIPLES) all: clean install $(CROSS_BUILD_TRIPLES) $(CROSS_BUILD_TRIPLES): GOOS = $(word 1,$(subst /, ,$@)) $(CROSS_BUILD_TRIPLES): GOARCH = $(word 2,$(subst /, ,$@)) $(CROSS_BUILD_TRIPLES): CROSS_DIST_DIRECTORY = $(DIST_DIRECTORY)/release/$@ $(CROSS_BUILD_TRIPLES): CROSS_DIST_EXENAME = $(DIST_EXENAME)$(if $(filter $(GOOS),windows),.exe,) $(CROSS_BUILD_TRIPLES): CROSS_DIST_ARCNAME = $(DIST_EXENAME)-$(subst /,.,$(BUILDINFO_VERSION)-$(GOOS)-$(GOARCH)).$(if $(filter $(GOOS),windows),zip,tar.gz) $(CROSS_BUILD_TRIPLES): $(MAKE) build GOOS=$(GOOS) GOARCH=$(GOARCH) \ DIST_DIRECTORY=$(CROSS_DIST_DIRECTORY)/bin \ DIST_EXENAME=$(CROSS_DIST_EXENAME) && \ if [ "$(GOOS)" = "windows" ]; then \ zip -j $(CROSS_DIST_DIRECTORY)/$(CROSS_DIST_ARCNAME) $(CROSS_DIST_DIRECTORY)/bin/$(CROSS_DIST_EXENAME); \ else \ tar -cvzf $(CROSS_DIST_DIRECTORY)/$(CROSS_DIST_ARCNAME) -C $(CROSS_DIST_DIRECTORY)/bin $(CROSS_DIST_EXENAME); \ fi && \ sh -c "cd $(CROSS_DIST_DIRECTORY) && sha256sum $(CROSS_DIST_ARCNAME) > $(CROSS_DIST_ARCNAME).sha256sum";