# Makefile for cross-platform builds
# 注意：此 Makefile 需要在项目根目录运行（通过根目录的 Makefile 包装器调用）

.PHONY: help build-all build-linux build-glibc build-windows build-macos install-targets install-cross install-glibc-targets build-cross clean stop

# 获取项目根目录（相对于当前 Makefile 的位置）
# Makefile 位于 scripts/build/Makefile，所以需要向上两级目录
PROJECT_ROOT := $(shell dirname $(shell dirname $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))))

# 目标平台
# 注意：在 macOS 上交叉编译的推荐配置
# musl 目标使用静态链接，无需交叉工具链
LINUX_X86_64 = x86_64-unknown-linux-musl
LINUX_ARM64 = aarch64-unknown-linux-musl
# GNU 工具链在 macOS 上可用（需要安装 mingw-w64）
WINDOWS_X86_64 = x86_64-pc-windows-gnu
MACOS_X86_64 = x86_64-apple-darwin
MACOS_ARM64 = aarch64-apple-darwin

TARGETS = $(LINUX_X86_64) $(LINUX_ARM64) $(WINDOWS_X86_64) $(MACOS_X86_64) $(MACOS_ARM64)
OUTPUT_DIR = target/release

# 如果安装了 cross 工具，可以使用这些目标（glibc 目标）
CROSS_LINUX_X86_64 = x86_64-unknown-linux-gnu
CROSS_LINUX_ARM64 = aarch64-unknown-linux-gnu
CROSS_WINDOWS_X86_64 = x86_64-pc-windows-msvc

# glibc 目标列表
GLIBC_TARGETS = $(CROSS_LINUX_X86_64) $(CROSS_LINUX_ARM64)

help:
	@echo "可用命令:"
	@echo "  make build-all        - 构建所有平台 (使用 musl/gnu 目标)"
	@echo "  make build-linux      - 构建 Linux 平台 (x86_64 和 ARM64, musl)"
	@echo "  make build-glibc      - 构建 Linux glibc 平台 (x86_64 和 ARM64, 需要 cross)"
	@echo "  make build-windows    - 构建 Windows 平台 (GNU 工具链)"
	@echo "  make build-macos      - 构建 macOS 平台 (Intel 和 Apple Silicon)"
	@echo "  make build-cross      - 使用 cross 工具构建 (需要先安装 cross)"
	@echo "  make install-targets  - 安装所有目标平台工具链"
	@echo "  make install-cross    - 安装 cross 工具"
	@echo "  make stop             - 停止正在运行的构建进程"
	@echo "  make clean            - 清理构建文件"

# 停止正在运行的构建进程
stop:
	@echo "=========================================="
	@echo "停止正在运行的构建进程"
	@echo "=========================================="
	@if pgrep -f "cargo build" > /dev/null 2>&1; then \
		echo "发现 cargo build 进程，正在停止..."; \
		pkill -9 -f "cargo build" 2>/dev/null || true; \
		echo "已停止 cargo build 进程"; \
	else \
		echo "未发现 cargo build 进程"; \
	fi
	@if pgrep -f "cross build" > /dev/null 2>&1; then \
		echo "发现 cross build 进程，正在停止..."; \
		pkill -9 -f "cross build" 2>/dev/null || true; \
		echo "已停止 cross build 进程"; \
	else \
		echo "未发现 cross build 进程"; \
	fi
	@if pgrep -f "rustc" > /dev/null 2>&1; then \
		echo "发现 rustc 进程，正在停止..."; \
		pkill -9 -f "rustc" 2>/dev/null || true; \
		echo "已停止 rustc 进程"; \
	else \
		echo "未发现 rustc 进程"; \
	fi
	@sleep 1
	@echo "进程停止完成"

install-targets:
	@echo "安装目标平台工具链..."
	@cd $(PROJECT_ROOT) && for target in $(TARGETS); do \
		if ! rustup target list --installed | grep -q "^$$target$$"; then \
			echo "安装 $$target..."; \
			rustup target add $$target || echo "警告: 无法安装 $$target"; \
		fi \
	done

build-all: stop install-targets
	@echo "构建所有平台 (使用 musl/gnu 目标)..."
	@cd $(PROJECT_ROOT) && mkdir -p $(OUTPUT_DIR)
	@cd $(PROJECT_ROOT) && success=0; fail=0; \
	for target in $(TARGETS); do \
		echo "构建 $$target..."; \
		binary_name="secra-plugins"; \
		output_name="secra-plugins-$$target"; \
		lib_ext=""; \
		if echo $$target | grep -q "windows"; then \
			binary_name="$$binary_name.exe"; \
			output_name="$$output_name.exe"; \
			lib_ext=".dll"; \
		elif echo $$target | grep -q "linux"; then \
			lib_ext=".so"; \
		elif echo $$target | grep -q "darwin"; then \
			lib_ext=".dylib"; \
		fi; \
		if cargo build --workspace --release --target $$target; then \
			build_success=1; \
			if [ -f "target/$$target/release/$$binary_name" ]; then \
				cp "target/$$target/release/$$binary_name" "$(OUTPUT_DIR)/$$output_name"; \
				echo "  ✓ 主程序构建成功"; \
			else \
				echo "  ✗ 主程序二进制文件不存在"; \
				build_success=0; \
			fi; \
			if [ -n "$$lib_ext" ]; then \
				parent_lib=""; \
				child_lib=""; \
				if echo $$target | grep -q "windows"; then \
					parent_lib="parent_plugin$$lib_ext"; \
					child_lib="child_plugin$$lib_ext"; \
				else \
					parent_lib="libparent_plugin$$lib_ext"; \
					child_lib="libchild_plugin$$lib_ext"; \
				fi; \
				if [ -f "target/$$target/release/$$parent_lib" ]; then \
					cp "target/$$target/release/$$parent_lib" "$(OUTPUT_DIR)/$$parent_lib-$$target"; \
					echo "  ✓ parent-plugin 构建成功"; \
				fi; \
				if [ -f "target/$$target/release/$$child_lib" ]; then \
					cp "target/$$target/release/$$child_lib" "$(OUTPUT_DIR)/$$child_lib-$$target"; \
					echo "  ✓ child-plugin 构建成功"; \
				fi; \
			fi; \
			if [ $$build_success -eq 1 ]; then \
				echo "✓ $$target 构建成功"; \
				success=$$((success + 1)); \
			else \
				echo "✗ $$target 构建失败"; \
				fail=$$((fail + 1)); \
			fi; \
		else \
			echo "✗ $$target 构建失败"; \
			fail=$$((fail + 1)); \
		fi; \
	done; \
	echo ""; \
	echo "=========================================="; \
	echo "构建统计: 成功 $$success 个，失败 $$fail 个"; \
	echo "=========================================="; \
	echo ""; \
	if [ $$success -gt 0 ]; then \
		echo "构建完成的二进制文件:"; \
		echo ""; \
		for target in $(TARGETS); do \
			output_name="secra-plugins-$$target"; \
			platform_name=""; \
			lib_ext=""; \
			if echo $$target | grep -q "x86_64-unknown-linux-musl"; then \
				platform_name="Linux (x86_64)"; \
				lib_ext=".so"; \
			elif echo $$target | grep -q "aarch64-unknown-linux-musl"; then \
				platform_name="Linux (ARM64)"; \
				lib_ext=".so"; \
			elif echo $$target | grep -q "x86_64-pc-windows-gnu"; then \
				platform_name="Windows (x86_64)"; \
				output_name="$$output_name.exe"; \
				lib_ext=".dll"; \
			elif echo $$target | grep -q "x86_64-apple-darwin"; then \
				platform_name="macOS (Intel)"; \
				lib_ext=".dylib"; \
			elif echo $$target | grep -q "aarch64-apple-darwin"; then \
				platform_name="macOS (Apple Silicon)"; \
				lib_ext=".dylib"; \
			fi; \
			if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/$$output_name" ]; then \
				echo "  ✓ $$platform_name 主程序: $(PROJECT_ROOT)/$(OUTPUT_DIR)/$$output_name"; \
			fi; \
			if [ -n "$$lib_ext" ]; then \
				parent_lib=""; \
				child_lib=""; \
				if echo $$target | grep -q "windows"; then \
					parent_lib="parent_plugin$$lib_ext"; \
					child_lib="child_plugin$$lib_ext"; \
				else \
					parent_lib="libparent_plugin$$lib_ext"; \
					child_lib="libchild_plugin$$lib_ext"; \
				fi; \
				if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/$$parent_lib-$$target" ]; then \
					echo "  ✓ $$platform_name parent-plugin: $(PROJECT_ROOT)/$(OUTPUT_DIR)/$$parent_lib-$$target"; \
				fi; \
				if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/$$child_lib-$$target" ]; then \
					echo "  ✓ $$platform_name child-plugin: $(PROJECT_ROOT)/$(OUTPUT_DIR)/$$child_lib-$$target"; \
				fi; \
			fi; \
		done; \
		echo ""; \
	fi; \
	echo "所有二进制文件位于: $(PROJECT_ROOT)/$(OUTPUT_DIR)"

build-glibc: stop install-cross install-glibc-targets
	@if ! command -v cross >/dev/null 2>&1; then \
		echo "错误: 未找到 cross 工具，请先运行 make install-cross"; \
		exit 1; \
	fi
	@echo "使用 cross 工具构建 Linux glibc 平台..."
	@cd $(PROJECT_ROOT) && mkdir -p $(OUTPUT_DIR)
	@cd $(PROJECT_ROOT) && success=0; fail=0; \
	for target in $(GLIBC_TARGETS); do \
		echo "构建 $$target (glibc)..."; \
		binary_name="secra-plugins"; \
		output_name="secra-plugins-$$target"; \
		lib_ext=".so"; \
		if cross build --workspace --release --target $$target; then \
			build_success=1; \
			if [ -f "target/$$target/release/$$binary_name" ]; then \
				cp "target/$$target/release/$$binary_name" "$(OUTPUT_DIR)/$$output_name"; \
				echo "  ✓ 主程序构建成功"; \
			else \
				echo "  ✗ 主程序二进制文件不存在"; \
				build_success=0; \
			fi; \
			parent_lib="libparent_plugin$$lib_ext"; \
			child_lib="libchild_plugin$$lib_ext"; \
			if [ -f "target/$$target/release/$$parent_lib" ]; then \
				cp "target/$$target/release/$$parent_lib" "$(OUTPUT_DIR)/$$parent_lib-$$target"; \
				echo "  ✓ parent-plugin 构建成功"; \
			fi; \
			if [ -f "target/$$target/release/$$child_lib" ]; then \
				cp "target/$$target/release/$$child_lib" "$(OUTPUT_DIR)/$$child_lib-$$target"; \
				echo "  ✓ child-plugin 构建成功"; \
			fi; \
			if [ $$build_success -eq 1 ]; then \
				echo "✓ $$target 构建成功"; \
				success=$$((success + 1)); \
			else \
				echo "✗ $$target 构建失败"; \
				fail=$$((fail + 1)); \
			fi; \
		else \
			echo "✗ $$target 构建失败"; \
			fail=$$((fail + 1)); \
		fi; \
	done; \
	echo ""; \
	echo "=========================================="; \
	echo "构建统计: 成功 $$success 个，失败 $$fail 个"; \
	echo "=========================================="; \
	echo ""; \
	if [ $$success -gt 0 ]; then \
		echo "构建完成的二进制文件:"; \
		echo ""; \
		for target in $(GLIBC_TARGETS); do \
			output_name="secra-plugins-$$target"; \
			platform_name=""; \
			lib_ext=".so"; \
			if echo $$target | grep -q "x86_64-unknown-linux-gnu"; then \
				platform_name="Linux (x86_64, glibc)"; \
			elif echo $$target | grep -q "aarch64-unknown-linux-gnu"; then \
				platform_name="Linux (ARM64, glibc)"; \
			fi; \
			if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/$$output_name" ]; then \
				echo "  ✓ $$platform_name 主程序: $(PROJECT_ROOT)/$(OUTPUT_DIR)/$$output_name"; \
			fi; \
			parent_lib="libparent_plugin$$lib_ext"; \
			child_lib="libchild_plugin$$lib_ext"; \
			if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/$$parent_lib-$$target" ]; then \
				echo "  ✓ $$platform_name parent-plugin: $(PROJECT_ROOT)/$(OUTPUT_DIR)/$$parent_lib-$$target"; \
			fi; \
			if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/$$child_lib-$$target" ]; then \
				echo "  ✓ $$platform_name child-plugin: $(PROJECT_ROOT)/$(OUTPUT_DIR)/$$child_lib-$$target"; \
			fi; \
		done; \
		echo ""; \
	fi; \
	echo "所有二进制文件位于: $(PROJECT_ROOT)/$(OUTPUT_DIR)"

build-cross: stop install-cross
	@if ! command -v cross >/dev/null 2>&1; then \
		echo "错误: 未找到 cross 工具，请先运行 make install-cross"; \
		exit 1; \
	fi
	@echo "使用 cross 工具构建所有平台..."
	@cd $(PROJECT_ROOT) && mkdir -p $(OUTPUT_DIR)
	@cd $(PROJECT_ROOT) && cross build --release --target $(CROSS_LINUX_X86_64) && \
		cp "target/$(CROSS_LINUX_X86_64)/release/secra-plugins" "$(OUTPUT_DIR)/secra-plugins-$(CROSS_LINUX_X86_64)" && \
		echo "✓ $(CROSS_LINUX_X86_64) 构建成功" || echo "✗ $(CROSS_LINUX_X86_64) 构建失败"
	@cd $(PROJECT_ROOT) && cross build --release --target $(CROSS_LINUX_ARM64) && \
		cp "target/$(CROSS_LINUX_ARM64)/release/secra-plugins" "$(OUTPUT_DIR)/secra-plugins-$(CROSS_LINUX_ARM64)" && \
		echo "✓ $(CROSS_LINUX_ARM64) 构建成功" || echo "✗ $(CROSS_LINUX_ARM64) 构建失败"
	@cd $(PROJECT_ROOT) && cross build --release --target $(CROSS_WINDOWS_X86_64) && \
		cp "target/$(CROSS_WINDOWS_X86_64)/release/secra-plugins.exe" "$(OUTPUT_DIR)/secra-plugins-$(CROSS_WINDOWS_X86_64).exe" && \
		echo "✓ $(CROSS_WINDOWS_X86_64) 构建成功" || echo "✗ $(CROSS_WINDOWS_X86_64) 构建失败"
	@cd $(PROJECT_ROOT) && echo "" && \
		echo "构建完成的二进制文件:" && \
		if [ -f "$(OUTPUT_DIR)/secra-plugins-$(CROSS_LINUX_X86_64)" ]; then \
			echo "  ✓ Linux (x86_64): $(PROJECT_ROOT)/$(OUTPUT_DIR)/secra-plugins-$(CROSS_LINUX_X86_64)"; \
		fi && \
		if [ -f "$(OUTPUT_DIR)/secra-plugins-$(CROSS_LINUX_ARM64)" ]; then \
			echo "  ✓ Linux (ARM64): $(PROJECT_ROOT)/$(OUTPUT_DIR)/secra-plugins-$(CROSS_LINUX_ARM64)"; \
		fi && \
		if [ -f "$(OUTPUT_DIR)/secra-plugins-$(CROSS_WINDOWS_X86_64).exe" ]; then \
			echo "  ✓ Windows (x86_64): $(PROJECT_ROOT)/$(OUTPUT_DIR)/secra-plugins-$(CROSS_WINDOWS_X86_64).exe"; \
		fi && \
		echo "" && \
		echo "所有二进制文件位于: $(PROJECT_ROOT)/$(OUTPUT_DIR)"

install-cross:
	@if command -v cross >/dev/null 2>&1; then \
		echo "cross 工具已安装"; \
	else \
		echo "安装 cross 工具..."; \
		cargo install cross --git https://github.com/cross-rs/cross || echo "安装失败，请检查网络连接"; \
	fi

install-glibc-targets:
	@echo "安装 glibc 目标平台工具链..."
	@cd $(PROJECT_ROOT) && for target in $(GLIBC_TARGETS); do \
		if ! rustup target list --installed | grep -q "^$$target$$"; then \
			echo "安装 $$target (glibc)..."; \
			rustup target add $$target || echo "警告: 无法安装 $$target"; \
		fi \
	done

build-linux: stop install-targets
	@echo "构建 Linux 平台..."
	@cd $(PROJECT_ROOT) && mkdir -p $(OUTPUT_DIR)
	@cd $(PROJECT_ROOT) && for target in $(LINUX_X86_64) $(LINUX_ARM64); do \
		echo "构建 $$target..."; \
		if cargo build --workspace --release --target $$target; then \
			if [ -f "target/$$target/release/secra-plugins" ]; then \
				cp "target/$$target/release/secra-plugins" "$(OUTPUT_DIR)/secra-plugins-$$target"; \
				echo "  ✓ 主程序构建成功"; \
			fi; \
			if [ -f "target/$$target/release/libparent_plugin.so" ]; then \
				cp "target/$$target/release/libparent_plugin.so" "$(OUTPUT_DIR)/libparent_plugin-$$target.so"; \
				echo "  ✓ parent-plugin 构建成功"; \
			fi; \
			if [ -f "target/$$target/release/libchild_plugin.so" ]; then \
				cp "target/$$target/release/libchild_plugin.so" "$(OUTPUT_DIR)/libchild_plugin-$$target.so"; \
				echo "  ✓ child-plugin 构建成功"; \
			fi; \
			echo "✓ $$target 构建成功"; \
		fi; \
	done; \
	echo ""; \
	echo "构建完成的二进制文件:"; \
	for target in $(LINUX_X86_64) $(LINUX_ARM64); do \
		platform_name=""; \
		if echo $$target | grep -q "x86_64-unknown-linux-musl"; then \
			platform_name="Linux (x86_64)"; \
		elif echo $$target | grep -q "aarch64-unknown-linux-musl"; then \
			platform_name="Linux (ARM64)"; \
		fi; \
		if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/secra-plugins-$$target" ]; then \
			echo "  ✓ $$platform_name 主程序: $(PROJECT_ROOT)/$(OUTPUT_DIR)/secra-plugins-$$target"; \
		fi; \
		if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/libparent_plugin-$$target.so" ]; then \
			echo "  ✓ $$platform_name parent-plugin: $(PROJECT_ROOT)/$(OUTPUT_DIR)/libparent_plugin-$$target.so"; \
		fi; \
		if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/libchild_plugin-$$target.so" ]; then \
			echo "  ✓ $$platform_name child-plugin: $(PROJECT_ROOT)/$(OUTPUT_DIR)/libchild_plugin-$$target.so"; \
		fi; \
	done; \
	echo ""; \
	echo "所有二进制文件位于: $(PROJECT_ROOT)/$(OUTPUT_DIR)"

build-windows: stop install-targets
	@echo "构建 Windows 平台..."
	@cd $(PROJECT_ROOT) && mkdir -p $(OUTPUT_DIR)
	@cd $(PROJECT_ROOT) && if cargo build --workspace --release --target $(WINDOWS_X86_64); then \
		if [ -f "target/$(WINDOWS_X86_64)/release/secra-plugins.exe" ]; then \
			cp "target/$(WINDOWS_X86_64)/release/secra-plugins.exe" "$(OUTPUT_DIR)/secra-plugins-$(WINDOWS_X86_64).exe"; \
			echo "  ✓ 主程序构建成功"; \
		fi; \
		if [ -f "target/$(WINDOWS_X86_64)/release/parent_plugin.dll" ]; then \
			cp "target/$(WINDOWS_X86_64)/release/parent_plugin.dll" "$(OUTPUT_DIR)/parent_plugin-$(WINDOWS_X86_64).dll"; \
			echo "  ✓ parent-plugin 构建成功"; \
		fi; \
		if [ -f "target/$(WINDOWS_X86_64)/release/child_plugin.dll" ]; then \
			cp "target/$(WINDOWS_X86_64)/release/child_plugin.dll" "$(OUTPUT_DIR)/child_plugin-$(WINDOWS_X86_64).dll"; \
			echo "  ✓ child-plugin 构建成功"; \
		fi; \
		echo "✓ $(WINDOWS_X86_64) 构建成功"; \
	fi; \
	echo ""; \
	echo "构建完成的二进制文件:"; \
	if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/secra-plugins-$(WINDOWS_X86_64).exe" ]; then \
		echo "  ✓ Windows (x86_64) 主程序: $(PROJECT_ROOT)/$(OUTPUT_DIR)/secra-plugins-$(WINDOWS_X86_64).exe"; \
	fi; \
	if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/parent_plugin-$(WINDOWS_X86_64).dll" ]; then \
		echo "  ✓ Windows (x86_64) parent-plugin: $(PROJECT_ROOT)/$(OUTPUT_DIR)/parent_plugin-$(WINDOWS_X86_64).dll"; \
	fi; \
	if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/child_plugin-$(WINDOWS_X86_64).dll" ]; then \
		echo "  ✓ Windows (x86_64) child-plugin: $(PROJECT_ROOT)/$(OUTPUT_DIR)/child_plugin-$(WINDOWS_X86_64).dll"; \
	fi; \
	echo ""; \
	echo "所有二进制文件位于: $(PROJECT_ROOT)/$(OUTPUT_DIR)"

build-macos: stop install-targets
	@echo "构建 macOS 平台..."
	@cd $(PROJECT_ROOT) && mkdir -p $(OUTPUT_DIR)
	@cd $(PROJECT_ROOT) && for target in $(MACOS_X86_64) $(MACOS_ARM64); do \
		echo "构建 $$target..."; \
		if cargo build --workspace --release --target $$target; then \
			if [ -f "target/$$target/release/secra-plugins" ]; then \
				cp "target/$$target/release/secra-plugins" "$(OUTPUT_DIR)/secra-plugins-$$target"; \
				echo "  ✓ 主程序构建成功"; \
			fi; \
			if [ -f "target/$$target/release/libparent_plugin.dylib" ]; then \
				cp "target/$$target/release/libparent_plugin.dylib" "$(OUTPUT_DIR)/libparent_plugin-$$target.dylib"; \
				echo "  ✓ parent-plugin 构建成功"; \
			fi; \
			if [ -f "target/$$target/release/libchild_plugin.dylib" ]; then \
				cp "target/$$target/release/libchild_plugin.dylib" "$(OUTPUT_DIR)/libchild_plugin-$$target.dylib"; \
				echo "  ✓ child-plugin 构建成功"; \
			fi; \
			echo "✓ $$target 构建成功"; \
		fi; \
	done; \
	echo ""; \
	echo "构建完成的二进制文件:"; \
	for target in $(MACOS_X86_64) $(MACOS_ARM64); do \
		platform_name=""; \
		if echo $$target | grep -q "x86_64-apple-darwin"; then \
			platform_name="macOS (Intel)"; \
		elif echo $$target | grep -q "aarch64-apple-darwin"; then \
			platform_name="macOS (Apple Silicon)"; \
		fi; \
		if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/secra-plugins-$$target" ]; then \
			echo "  ✓ $$platform_name 主程序: $(PROJECT_ROOT)/$(OUTPUT_DIR)/secra-plugins-$$target"; \
		fi; \
		if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/libparent_plugin-$$target.dylib" ]; then \
			echo "  ✓ $$platform_name parent-plugin: $(PROJECT_ROOT)/$(OUTPUT_DIR)/libparent_plugin-$$target.dylib"; \
		fi; \
		if [ -f "$(PROJECT_ROOT)/$(OUTPUT_DIR)/libchild_plugin-$$target.dylib" ]; then \
			echo "  ✓ $$platform_name child-plugin: $(PROJECT_ROOT)/$(OUTPUT_DIR)/libchild_plugin-$$target.dylib"; \
		fi; \
	done; \
	echo ""; \
	echo "所有二进制文件位于: $(PROJECT_ROOT)/$(OUTPUT_DIR)"

clean:
	@echo "清理构建文件..."
	@cd $(PROJECT_ROOT) && cargo clean
	@cd $(PROJECT_ROOT) && rm -rf $(OUTPUT_DIR)
	@echo "清理完成"
