# dbz1 - ReXGlue Recompiled Project
# Generated by: rexglue init

cmake_minimum_required(VERSION 3.25)
project(dbz1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Find ReXGlue SDK
# REXSDK env var takes precedence, otherwise search system paths
if(DEFINED ENV{REXSDK})
    list(PREPEND CMAKE_PREFIX_PATH $ENV{REXSDK})
endif()
find_package(rexglue REQUIRED)
if(NOT rexglue_FOUND)
    message(FATAL_ERROR "ReXGlue SDK was not found in environment variables or from find_package.")
endif()

# User source files
set(DBZ1_SOURCES
    src/main.cpp
)

# Platform-specific entry point (provides main/wWinMain)
if(WIN32)
    list(APPEND DBZ1_SOURCES ${REXGLUE_SHARE_DIR}/windowed_app_main_win.cpp)
else()
    list(APPEND DBZ1_SOURCES ${REXGLUE_SHARE_DIR}/windowed_app_main_posix.cpp)
endif()

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

if(WIN32)
    add_executable(dbz1 WIN32 ${DBZ1_SOURCES})
else()
    add_executable(dbz1 ${DBZ1_SOURCES})
endif()

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

target_link_libraries(dbz1 PRIVATE
    rex::core
    rex::runtime
    rex::kernel
    rex::graphics
    rex::ui
)

# Platform-specific settings
if(UNIX AND NOT APPLE)
    # GTK3 for entry point (windowed_app_main_posix.cpp)
    find_package(PkgConfig REQUIRED)
    pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
    target_include_directories(dbz1 PRIVATE ${GTK3_INCLUDE_DIRS})
    target_link_libraries(dbz1 PRIVATE ${GTK3_LIBRARIES})

    # Whole-archive linking for kernel hooks
    target_link_options(dbz1 PRIVATE
        -Wl,--whole-archive
        $<TARGET_FILE:rex::kernel>
        -Wl,--no-whole-archive
    )
    # Large executable support
    target_link_options(dbz1 PRIVATE -Wl,--no-relax)
    target_compile_options(dbz1 PRIVATE -mcmodel=large)
endif()

if(NOT MSVC)
    target_compile_options(dbz1 PRIVATE -msse4.1)
endif()

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