#!/usr/bin/env make -f AGENTS_DIR = agents DIST_DIRECTORY = ./bin DIST_APPNAME = ai-agent 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_DIRNAME = $(DIST_APPNAME)-$(subst /,.,$(BUILDINFO_VERSION)-$(GOOS)-$(GOARCH)) $(CROSS_BUILD_TRIPLES): CROSS_DIST_EXENAME = $(DIST_EXENAME)$(if $(filter $(GOOS),windows),.exe,) $(CROSS_BUILD_TRIPLES): CROSS_DIST_ARCNAME = $(CROSS_DIST_DIRNAME).$(if $(filter $(GOOS),windows),zip,tar.gz) $(CROSS_BUILD_TRIPLES): $(MAKE) build GOOS=$(GOOS) GOARCH=$(GOARCH) \ DIST_DIRECTORY=$(DIST_DIRECTORY)/$(CROSS_DIST_DIRNAME) \ DIST_EXENAME=$(CROSS_DIST_EXENAME) && \ cp -r $(AGENTS_DIR) $(DIST_DIRECTORY)/$(CROSS_DIST_DIRNAME)/ && \ mkdir -p $(DIST_DIRECTORY)/arch/$(GOOS)/$(GOARCH) && \ cp $(DIST_DIRECTORY)/$(CROSS_DIST_DIRNAME)/$(CROSS_DIST_EXENAME) $(DIST_DIRECTORY)/arch/$(GOOS)/$(GOARCH)/$(CROSS_DIST_EXENAME) && \ if [ "$(GOOS)" = "windows" ]; then \ cd $(DIST_DIRECTORY) && zip -r $(CROSS_DIST_ARCNAME) $(CROSS_DIST_DIRNAME) && cd -; \ else \ tar -cvzf $(DIST_DIRECTORY)/$(CROSS_DIST_ARCNAME) -C $(DIST_DIRECTORY) $(CROSS_DIST_DIRNAME); \ fi && \ sh -c "cd $(DIST_DIRECTORY) && sha256sum $(CROSS_DIST_ARCNAME) > $(CROSS_DIST_ARCNAME).sha256sum";