cmake_minimum_required(VERSION 3.16.3)
project(wind_server VERSION 1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 定位项目根目录（支持独立构建和作为子工程）
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
    set(REPO_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/..")
else()
    set(REPO_ROOT "${CMAKE_SOURCE_DIR}")
endif()

# ---- 架构检测 ----
if(NOT DEFINED TARGET_ARCH)
    if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv7.*|arm)$")
        set(TARGET_ARCH "arm32")
    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$")
        set(TARGET_ARCH "arm64")
    else()
        set(TARGET_ARCH "x64")
    endif()
endif()

# ---- 本地 Drogon/Trantor (third_party 编译产物) ----
if(NOT DEFINED DROGON_LOCAL_PREFIX)
    set(DROGON_LOCAL_PREFIX "${REPO_ROOT}/third_party/drogon/install/${TARGET_ARCH}")
endif()
if(EXISTS "${DROGON_LOCAL_PREFIX}/libs/cmake/Drogon/DrogonConfig.cmake")
    list(PREPEND CMAKE_PREFIX_PATH "${DROGON_LOCAL_PREFIX}")
    set(Drogon_DIR "${DROGON_LOCAL_PREFIX}/libs/cmake/Drogon" CACHE PATH "" FORCE)
    set(Trantor_DIR "${DROGON_LOCAL_PREFIX}/libs/cmake/Trantor" CACHE PATH "" FORCE)
    message(STATUS "Using local Drogon from ${DROGON_LOCAL_PREFIX}")
endif()

find_package(Drogon CONFIG REQUIRED)
find_package(Threads REQUIRED)

file(GLOB_RECURSE SOURCES
    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h"
)

# 复制配置文件到 build 目录
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/config/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/config)

add_executable(wind_server ${SOURCES})

target_include_directories(wind_server PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/src
    ${REPO_ROOT}/third_party
)

target_link_libraries(wind_server PRIVATE
    Drogon::Drogon
    Threads::Threads
)

# 运行期 .so 解析：RPATH 指向 Drogon install 的 libs 目录
set_target_properties(wind_server PROPERTIES
    BUILD_RPATH "${DROGON_LOCAL_PREFIX}/libs"
    INSTALL_RPATH "$ORIGIN/../lib;${DROGON_LOCAL_PREFIX}/libs"
)
