mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-05-18 05:57:29 +08:00
build: optimize Makefile for configurable multi-platform matrix and packaging
This commit is contained in:
46
Makefile
46
Makefile
@@ -1,4 +1,4 @@
|
|||||||
.PHONY: all build build-all install install-win uninstall clean help test install-bootstrap-docs sync-embed-workspace cleanup-embed-workspace test-only clean-test-artifacts
|
.PHONY: all build build-all package-all install install-win uninstall clean help test install-bootstrap-docs sync-embed-workspace cleanup-embed-workspace test-only clean-test-artifacts
|
||||||
|
|
||||||
# Build variables
|
# Build variables
|
||||||
BINARY_NAME=clawgo
|
BINARY_NAME=clawgo
|
||||||
@@ -21,6 +21,9 @@ LDFLAGS=-ldflags "$(BASE_LDFLAGS)$(EXTRA_LDFLAGS)"
|
|||||||
GO?=go
|
GO?=go
|
||||||
GOFLAGS?=-v
|
GOFLAGS?=-v
|
||||||
|
|
||||||
|
# Cross-platform build matrix (space-separated GOOS/GOARCH pairs)
|
||||||
|
BUILD_TARGETS?=linux/amd64 linux/arm64 linux/riscv64 darwin/amd64 darwin/arm64 windows/amd64 windows/arm64
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
INSTALL_PREFIX?=/usr/local
|
INSTALL_PREFIX?=/usr/local
|
||||||
INSTALL_BIN_DIR=$(INSTALL_PREFIX)/bin
|
INSTALL_BIN_DIR=$(INSTALL_PREFIX)/bin
|
||||||
@@ -79,18 +82,45 @@ build: sync-embed-workspace
|
|||||||
@echo "Build complete: $(BINARY_PATH)"
|
@echo "Build complete: $(BINARY_PATH)"
|
||||||
@ln -sf $(BINARY_NAME)-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/$(BINARY_NAME)
|
@ln -sf $(BINARY_NAME)-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/$(BINARY_NAME)
|
||||||
|
|
||||||
## build-all: Build clawgo for all platforms
|
## build-all: Build clawgo for all configured platforms (override with BUILD_TARGETS="linux/amd64 ...")
|
||||||
build-all: sync-embed-workspace
|
build-all: sync-embed-workspace
|
||||||
@echo "Building for multiple platforms..."
|
@echo "Building for multiple platforms: $(BUILD_TARGETS)"
|
||||||
@mkdir -p $(BUILD_DIR)
|
@mkdir -p $(BUILD_DIR)
|
||||||
@set -e; trap '$(MAKE) cleanup-embed-workspace' EXIT; \
|
@set -e; trap '$(MAKE) cleanup-embed-workspace' EXIT; \
|
||||||
GOOS=linux GOARCH=amd64 $(GO) build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-amd64 ./$(CMD_DIR); \
|
for target in $(BUILD_TARGETS); do \
|
||||||
GOOS=linux GOARCH=arm64 $(GO) build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-arm64 ./$(CMD_DIR); \
|
goos="$${target%/*}"; \
|
||||||
GOOS=linux GOARCH=riscv64 $(GO) build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-riscv64 ./$(CMD_DIR); \
|
goarch="$${target#*/}"; \
|
||||||
# GOOS=darwin GOARCH=amd64 $(GO) build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-darwin-amd64 ./$(CMD_DIR)
|
out="$(BUILD_DIR)/$(BINARY_NAME)-$$goos-$$goarch"; \
|
||||||
GOOS=windows GOARCH=amd64 $(GO) build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe ./$(CMD_DIR)
|
if [ "$$goos" = "windows" ]; then out="$$out.exe"; fi; \
|
||||||
|
echo " -> $$goos/$$goarch"; \
|
||||||
|
CGO_ENABLED=0 GOOS=$$goos GOARCH=$$goarch $(GO) build $(GOFLAGS) $(LDFLAGS) -o "$$out" ./$(CMD_DIR); \
|
||||||
|
done
|
||||||
@echo "All builds complete"
|
@echo "All builds complete"
|
||||||
|
|
||||||
|
## package-all: Create compressed archives and checksums for all build targets
|
||||||
|
package-all: build-all
|
||||||
|
@echo "Packaging build artifacts..."
|
||||||
|
@set -e; cd $(BUILD_DIR); \
|
||||||
|
for target in $(BUILD_TARGETS); do \
|
||||||
|
goos="$${target%/*}"; \
|
||||||
|
goarch="$${target#*/}"; \
|
||||||
|
bin="$(BINARY_NAME)-$$goos-$$goarch"; \
|
||||||
|
if [ "$$goos" = "windows" ]; then \
|
||||||
|
bin="$$bin.exe"; \
|
||||||
|
archive="$(BINARY_NAME)-$$goos-$$goarch.zip"; \
|
||||||
|
zip -q -j "$$archive" "$$bin"; \
|
||||||
|
else \
|
||||||
|
archive="$(BINARY_NAME)-$$goos-$$goarch.tar.gz"; \
|
||||||
|
tar -czf "$$archive" "$$bin"; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
if command -v sha256sum >/dev/null 2>&1; then \
|
||||||
|
sha256sum *.tar.gz *.zip 2>/dev/null | tee checksums.txt || true; \
|
||||||
|
elif command -v shasum >/dev/null 2>&1; then \
|
||||||
|
shasum -a 256 *.tar.gz *.zip 2>/dev/null | tee checksums.txt || true; \
|
||||||
|
fi
|
||||||
|
@echo "Package complete: $(BUILD_DIR)"
|
||||||
|
|
||||||
## sync-embed-workspace: Sync root workspace files into cmd/clawgo/workspace for go:embed
|
## sync-embed-workspace: Sync root workspace files into cmd/clawgo/workspace for go:embed
|
||||||
sync-embed-workspace:
|
sync-embed-workspace:
|
||||||
@echo "Syncing workspace seed files for embedding..."
|
@echo "Syncing workspace seed files for embedding..."
|
||||||
|
|||||||
10
README.md
10
README.md
@@ -173,6 +173,16 @@ clawgo skills ... 技能安装/查看/卸载
|
|||||||
clawgo uninstall [--purge] [--remove-bin]
|
clawgo uninstall [--purge] [--remove-bin]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Make 多平台构建:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make build-all
|
||||||
|
# 自定义目标矩阵(示例)
|
||||||
|
make build-all BUILD_TARGETS="linux/amd64 linux/arm64 darwin/arm64 windows/amd64"
|
||||||
|
# 产物打包 + 校验和
|
||||||
|
make package-all
|
||||||
|
```
|
||||||
|
|
||||||
全局参数:
|
全局参数:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
10
README_EN.md
10
README_EN.md
@@ -154,6 +154,16 @@ clawgo skills ... Skill install/list/remove/show
|
|||||||
clawgo uninstall [--purge] [--remove-bin]
|
clawgo uninstall [--purge] [--remove-bin]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Make cross-platform build:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make build-all
|
||||||
|
# Override build matrix (example)
|
||||||
|
make build-all BUILD_TARGETS="linux/amd64 linux/arm64 darwin/arm64 windows/amd64"
|
||||||
|
# Package artifacts + checksums
|
||||||
|
make package-all
|
||||||
|
```
|
||||||
|
|
||||||
Global flags:
|
Global flags:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
Reference in New Issue
Block a user