# Copyright (c) 2019 Guyutongxue
# 
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

CMAKE_MINIMUM_REQUIRED(VERSION 3.5)

PROJECT(amazons)

# 检测是否为Windows交叉编译
SET(IS_WINDOWS_CROSSCOMPILE FALSE)
IF(CMAKE_CROSSCOMPILING)
    MESSAGE(STATUS "Cross-compiling detected")
    IF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
        SET(IS_WINDOWS_CROSSCOMPILE TRUE)
    ENDIF()
ENDIF()

MESSAGE(STATUS "Windows cross-compile: ${IS_WINDOWS_CROSSCOMPILE}")

# 根据不同平台设置编译选项
IF(IS_WINDOWS_CROSSCOMPILE)
    MESSAGE(STATUS "Setting up for Windows cross-compilation")
    
    # Windows交叉编译选项
    SET(CMAKE_CXX_STANDARD 17)
    ADD_COMPILE_OPTIONS(-static -static-libgcc -static-libstdc++)
    ADD_COMPILE_OPTIONS(-finput-charset=UTF-8 -fexec-charset=UTF-8)
    ADD_COMPILE_OPTIONS(-O2)
    
    # Windows特定的定义
    ADD_DEFINITIONS(-D_WIN32 -D_X86_=1 -DPDCURSES -DPDC_WIDE)
    
    # 设置输出路径
    SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/build)
    
ELSEIF(CMAKE_GENERATOR MATCHES "Visual Studio.*")
    # Visual Studio编译
    ADD_COMPILE_OPTIONS(/utf-8)
    SET(CMAKE_CXX_STANDARD 17)
    SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/build)
    
ELSE()
    # macOS/Linux本地编译
    SET(CMAKE_CXX_STANDARD 17)
    ADD_COMPILE_OPTIONS(-finput-charset=UTF-8 -fexec-charset=UTF-8)
    ADD_COMPILE_OPTIONS(-O2)
    # ADD_COMPILE_OPTIONS(-ggdb)
    SET(EXECUTABLE_OUTPUT_PATH build)
    
ENDIF()

AUX_SOURCE_DIRECTORY(src DIR_SRCS)
ADD_EXECUTABLE(amazons ${DIR_SRCS})

# 处理curses库依赖
IF(IS_WINDOWS_CROSSCOMPILE)
    MESSAGE(STATUS "Using local PDCurses for Windows")
    
    # 设置PDCurses路径
    SET(PDCURSES_DIR "${CMAKE_SOURCE_DIR}/thirdparty/pdcurses")
    
    # 检查文件是否存在
    IF(EXISTS "${PDCURSES_DIR}/include/curses.h" AND EXISTS "${PDCURSES_DIR}/lib/libpdcurses.a")
        MESSAGE(STATUS "Found PDCurses in: ${PDCURSES_DIR}")
        
        # 包含目录
        TARGET_INCLUDE_DIRECTORIES(amazons PRIVATE 
            ${PDCURSES_DIR}/include
        )
        
        # 链接PDCurses库
        TARGET_LINK_LIBRARIES(amazons 
            ${PDCURSES_DIR}/lib/libpdcurses.a
        )
        
        # 添加Windows系统库
        TARGET_LINK_LIBRARIES(amazons -luser32 -lwinmm -lgdi32)
        
    ELSE()
        MESSAGE(FATAL_ERROR "PDCurses not found in ${PDCURSES_DIR}")
    ENDIF()
    
ELSE()
    MESSAGE(STATUS "Using system curses")
    
    # 非Windows平台：使用系统ncurses
    FIND_PACKAGE(Curses REQUIRED)
    TARGET_INCLUDE_DIRECTORIES(amazons PRIVATE ${CURSES_INCLUDE_DIRS})
    TARGET_LINK_LIBRARIES(amazons ${CURSES_LIBRARIES})
ENDIF()

# 设置目标属性
SET_TARGET_PROPERTIES(amazons PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY "${EXECUTABLE_OUTPUT_PATH}"
)