# re_wor - ReXGlue Recompiled Project
# Generated by: rexglue init
#
# This file is SDK-managed. Running 'rexglue migrate' will overwrite it.

cmake_minimum_required(VERSION 3.25)
project(re_wor LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(REXSDK_DIR "" CACHE PATH "Path to rexglue-sdk source tree")
if(REXSDK_DIR)
    add_subdirectory("${REXSDK_DIR}" rexglue-sdk)
else()
    find_package(rexglue QUIET CONFIG)
    if(NOT rexglue_FOUND)
        message(FATAL_ERROR
            "ReXGlue SDK not found. Either:\n"
            "  - Set REXSDK_DIR to the rexglue-sdk source tree (e.g. thirdparty/rexglue-sdk)\n"
            "  - Install the SDK package and ensure it is on CMAKE_PREFIX_PATH")
    endif()
endif()


include(FetchContent)
option(REWOR_ENABLE_DISCORD_RPC "Enable Discord Rich Presence via discord-rpc" ON)
if(REWOR_ENABLE_DISCORD_RPC)
    set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
    set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
    set(CMAKE_POLICY_VERSION_MINIMUM 3.5)
    set(CLANG_FORMAT_CMD OFF CACHE STRING "" FORCE)
    FetchContent_Declare(discord_rpc
        GIT_REPOSITORY https://github.com/discord/discord-rpc.git
        GIT_TAG v3.4.0
    )
    FetchContent_MakeAvailable(discord_rpc)
endif()

# Sources
set(REWOR_SOURCES
    src/main.cpp
    src/discord_rpc.cpp
    src/stubs.cpp
)

# Include generated code if codegen has been run
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/generated/sources.cmake")
    include(generated/sources.cmake)
    list(APPEND REWOR_SOURCES ${GENERATED_SOURCES})
endif()

if(WIN32)
    list(APPEND REWOR_SOURCES app_icon.rc)
    add_executable(re_wor WIN32 ${REWOR_SOURCES})
else()
    add_executable(re_wor ${REWOR_SOURCES})
endif()

target_include_directories(re_wor PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/generated
)

target_link_libraries(re_wor PRIVATE
    rex::core
    rex::system
    rex::kernel
    rex::graphics
    rex::ui
)

if(REWOR_ENABLE_DISCORD_RPC)
    target_link_libraries(re_wor PRIVATE discord-rpc)
    target_compile_definitions(re_wor PRIVATE REWOR_HAS_DISCORD_RPC=1)
endif()

# Platform entry point, ReXApp source, and platform-specific settings
rexglue_configure_target(re_wor)

# Developer mode (logging, stub tracking)
option(REWOR_DEV "Enable developer logging (TRACE, StubTracker, crash logs)" OFF)
if(REWOR_DEV)
    target_compile_definitions(re_wor PRIVATE REWOR_DEV=1)
endif()

# Output executable name
set_target_properties(re_wor PROPERTIES OUTPUT_NAME "Guitar Hero Warriors of Rock")

# SEH (__try/__except) crash protection for ctor iteration
# clang++ on Windows supports this natively via -fms-extensions (default)
# MSVC needs /EHa explicitly
if(MSVC AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    target_compile_options(re_wor PRIVATE /EHa)
endif()

# Codegen target - run 'cmake --build . --target re_wor_codegen'
add_custom_target(re_wor_codegen
    COMMAND $<TARGET_FILE:rex::rexglue> codegen ${CMAKE_CURRENT_SOURCE_DIR}/re_wor_config.toml
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    COMMENT "Generating recompiled code for re_wor"
    VERBATIM
)
