# Makefile for pt_system_checking
# 支持 amd64 和 arm64 架构的交叉编译

# 项目名称
PROJECT_NAME = pt_system_checking
VERSION = 0.1.0

# 构建目录
BUILD_DIR = target
RELEASE_DIR = release

# 目标架构
ARCH_AMD64 = x86_64-unknown-linux-gnu
ARCH_ARM64 = aarch64-unknown-linux-gnu

# 输出二进制文件名
BINARY_AMD64 = $(PROJECT_NAME)-amd64
BINARY_ARM64 = $(PROJECT_NAME)-arm64

.PHONY: all help install-targets build-amd64 build-arm64 build-all clean release test prepare-release

# 默认目标
all: build-all

# 帮助信息
help:
	@echo "可用的构建目标："
	@echo "  make install-targets  - 安装交叉编译工具链"
	@echo "  make build-amd64      - 构建 amd64 版本"
	@echo "  make build-arm64      - 构建 arm64 版本（适用于香橙派 Zero3）"
	@echo "  make build-all        - 构建所有架构版本"
	@echo "  make release          - 创建发布版本（优化编译）"
	@echo "  make prepare-release  - 准备发布文件（包含安装脚本）"
	@echo "  make test             - 运行测试"
	@echo "  make clean            - 清理构建文件"
	@echo "  make install          - 安装到系统（需要 root 权限）"

# 安装交叉编译目标
install-targets:
	@echo "安装交叉编译工具链..."
	rustup target add $(ARCH_AMD64)
	rustup target add $(ARCH_ARM64)
	@echo ""
	@echo "请确保已安装 ARM64 交叉编译工具："
	@echo "  Ubuntu/Debian: sudo apt-get install gcc-aarch64-linux-gnu"
	@echo "  Fedora/RHEL:   sudo dnf install gcc-aarch64-linux-gnu"
	@echo "  Arch Linux:    sudo pacman -S aarch64-linux-gnu-gcc"
	@echo ""
	@if ! command -v aarch64-linux-gnu-gcc >/dev/null 2>&1; then \
		echo "警告: 未检测到 aarch64-linux-gnu-gcc，ARM64 交叉编译可能失败"; \
		echo "请运行: sudo apt-get install gcc-aarch64-linux-gnu"; \
	else \
		echo "✓ 检测到 aarch64-linux-gnu-gcc"; \
	fi
	@echo "工具链安装完成"

# 构建 amd64 版本
build-amd64:
	@echo "构建 amd64 版本..."
	cargo build --target $(ARCH_AMD64)
	@mkdir -p $(RELEASE_DIR)
	@cp $(BUILD_DIR)/$(ARCH_AMD64)/debug/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_AMD64)
	@echo "amd64 版本构建完成: $(RELEASE_DIR)/$(BINARY_AMD64)"

# 构建 arm64 版本（适用于香橙派 Zero3）
build-arm64:
	@echo "构建 arm64 版本（适用于香橙派 Zero3）..."
	cargo build --target $(ARCH_ARM64)
	@mkdir -p $(RELEASE_DIR)
	@cp $(BUILD_DIR)/$(ARCH_ARM64)/debug/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_ARM64)
	@echo "arm64 版本构建完成: $(RELEASE_DIR)/$(BINARY_ARM64)"

# 构建所有架构
build-all: build-amd64 build-arm64
	@echo "所有架构构建完成"

# 发布版本（优化编译）
release:
	@echo "构建优化版本..."
	@mkdir -p $(RELEASE_DIR)
	cargo build --release --target $(ARCH_AMD64)
	cargo build --release --target $(ARCH_ARM64)
	@cp $(BUILD_DIR)/$(ARCH_AMD64)/release/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_AMD64)
	@cp $(BUILD_DIR)/$(ARCH_ARM64)/release/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_ARM64)
	@echo "发布版本构建完成:"
	@ls -lh $(RELEASE_DIR)/

# 运行测试
test:
	cargo test

# 清理构建文件
clean:
	cargo clean
	rm -rf $(RELEASE_DIR)
	@echo "清理完成"

# 准备发布文件（包含二进制文件和安装脚本）
prepare-release: release
	@echo "准备发布文件..."
	@cp install.sh $(RELEASE_DIR)/
	@chmod +x $(RELEASE_DIR)/install.sh
	@echo "发布文件已准备完成，位于 $(RELEASE_DIR)/ 目录"
	@echo "请将以下文件上传到 Gitea Releases:"
	@ls -lh $(RELEASE_DIR)/

# 安装到系统（默认安装当前架构）
install:
	cargo install --path .
	@echo "安装完成"
