cmake_minimum_required(VERSION 3.21)
project(RRPopout CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ---------------------------------------------------------------------------
# Dear ImGui — fetched once at configure time, built as a static lib.
# Only the D3D11 backend is compiled; Win32 input is fed manually via atomics.
# ---------------------------------------------------------------------------
include(FetchContent)
FetchContent_Declare(
    imgui
    GIT_REPOSITORY https://github.com/ocornut/imgui.git
    GIT_TAG        v1.90.4
    GIT_SHALLOW    TRUE
)
FetchContent_MakeAvailable(imgui)

add_library(imgui STATIC
    ${imgui_SOURCE_DIR}/imgui.cpp
    ${imgui_SOURCE_DIR}/imgui_draw.cpp
    ${imgui_SOURCE_DIR}/imgui_tables.cpp
    ${imgui_SOURCE_DIR}/imgui_widgets.cpp
    ${imgui_SOURCE_DIR}/backends/imgui_impl_dx11.cpp
)
target_include_directories(imgui PUBLIC
    ${imgui_SOURCE_DIR}
    ${imgui_SOURCE_DIR}/backends
)
# imgui_impl_dx11.cpp calls D3DCompile at runtime to build its own shaders.
target_link_libraries(imgui PUBLIC d3d11 d3dcompiler)

# Suppress MSVC warnings inside third-party ImGui source.
if(MSVC)
    target_compile_options(imgui PRIVATE /W0)
endif()

# ---------------------------------------------------------------------------
# RRPopout native plugin DLL
# ---------------------------------------------------------------------------
add_library(RRPopout SHARED
    src/dllmain.cpp
    src/exports.cpp
    src/popout_windows.cpp
    src/d3d11_renderer.cpp
)

target_include_directories(RRPopout PRIVATE
    include
    external
)

target_link_libraries(RRPopout PRIVATE
    imgui
    d3d11
    dxgi
    d3dcompiler
    dwmapi        # DwmSetWindowAttribute (dark title bar, rounded corners)
    shell32       # ExtractIconExW (EXE icon loading)
)

set_target_properties(RRPopout PROPERTIES
    OUTPUT_NAME "RRPopout"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

if(MSVC)
    target_compile_options(RRPopout PRIVATE /W3 /WX- /GR- /EHsc)
    target_compile_options(RRPopout PRIVATE $<$<CONFIG:Release>:/Zi>)
    target_link_options(RRPopout PRIVATE $<$<CONFIG:Release>:/DEBUG /OPT:REF /OPT:ICF>)
endif()
