# ============================================================
# 五子棋 (Gomoku) 编译配置文件
# ============================================================
# 使用方法:
#   编译:                make
#   编译（详细输出）:    make VERBOSE=1
#   运行:                make run
#   清理:                make clean
#   打包成exe (Linux):   make exe-linux
#   打包成exe (Windows): make exe-win
#   打包成exe (MinGW):   make exe-mingw
# ============================================================

CC       = gcc
CFLAGS   = -Wall -Wextra -O2 -std=c99
LDFLAGS  = -lm
TARGET   = gomoku
SRC      = gomoku.c
OBJ      = $(SRC:.c=.o)

# 不显示编译命令，除非 VERBOSE=1
Q = @
ifdef VERBOSE
    Q =
endif

.PHONY: all run clean exe-linux exe-win exe-mingw help

# 默认目标
all: $(TARGET)

$(TARGET): $(OBJ)
	$(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
	$(Q)echo "  ✓ 编译成功: $(TARGET)"
	$(Q)echo "  运行: ./$(TARGET)"
	$(Q)echo "  清理: make clean"

%.o: %.c
	$(Q)$(CC) $(CFLAGS) -c -o $@ $<
	$(Q)echo "  CC  $<"

# 运行
run: $(TARGET)
	$(Q)./$(TARGET)

# 清理
clean:
	$(Q)rm -f $(TARGET) $(OBJ) *.exe gomoku_save.dat
	$(Q)echo "  ✓ 已清理编译产物和存档"

# ============================================================
# 打包为 Windows exe (使用 MinGW-w64 交叉编译)
# 需要安装: sudo apt install mingw-w64
# ============================================================
exe-win:
	$(Q)if command -v x86_64-w64-mingw32-gcc >/dev/null 2>&1; then \
		echo "  → 使用 MinGW-w64 交叉编译 Windows exe..."; \
		x86_64-w64-mingw32-gcc $(CFLAGS) $(SRC) -o gomoku_win64.exe $(LDFLAGS); \
		echo "  ✓ 生成: gomoku_win64.exe"; \
	else \
		echo "  ✗ 未安装 MinGW-w64，请执行:"; \
		echo "    sudo apt install mingw-w64"; \
		echo "  然后重新运行 make exe-win"; \
		exit 1; \
	fi

# ============================================================
# 打包为 exe (Linux下直接编译可执行文件)
# ============================================================
exe-linux: $(TARGET)
	$(Q)cp $(TARGET) $(TARGET)_linux_x64
	$(Q)strip $(TARGET)_linux_x64
	$(Q)echo "  ✓ 生成: $(TARGET)_linux_x64 (静态可执行)"
	$(Q)ls -lh $(TARGET)_linux_x64

# ============================================================
# 使用 MinGW (在 Windows 上原生编译)
# 在 Windows 上运行: mingw32-make exe-mingw
# ============================================================
exe-mingw:
	$(Q)$(CC) $(CFLAGS) $(SRC) -o $(TARGET).exe $(LDFLAGS)
	$(Q)echo "  ✓ 生成: $(TARGET).exe"

# 帮助
help:
	@echo "五子棋 (Gomoku) 编译配置"
	@echo "=========================="
	@echo "  make          - 编译 (Linux/Unix)"
	@echo "  make run      - 编译并运行"
	@echo "  make clean    - 清理"
	@echo "  make exe-win  - 交叉编译 Windows exe"
	@echo "  make exe-linux- 编译 Linux 可执行文件"
	@echo "  make exe-mingw- MinGW 编译 exe"
	@echo "  make help     - 显示此帮助"
