chatai/Makefile
2024-12-25 17:53:53 +00:00

71 lines
2.4 KiB
Makefile

#!/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";