cmake_minimum_required(VERSION 3.16)
project(vgpu-streamer C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)            # strict c11; shim uses __asm__/__atomic_* — ok

add_library(vgpustream STATIC
    src/stream/publish.c
    src/stream/win32/region.c
    src/stream/win32/present.c
    src/stream/win32/cursor.c
    src/stream/win32/capture.c
    src/stream/win32/capture_nvfbc.c
    src/stream/win32/capture_dda.c
    src/stream/win32/capture_gdi.c)
target_include_directories(vgpustream
    PUBLIC  ${CMAKE_CURRENT_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/stream/include
            ${CMAKE_CURRENT_SOURCE_DIR}/src/stream/win32
            ${CMAKE_CURRENT_SOURCE_DIR}/third_party)   # vendor NvFBC + Windows.h shim
target_compile_definitions(vgpustream PRIVATE CINTERFACE WIN32_LEAN_AND_MEAN=)
target_compile_options(vgpustream PRIVATE
    $<$<C_COMPILER_ID:GNU>:-O2;-Wall;-Wextra>
    $<$<C_COMPILER_ID:MSVC>:/O2;/W3>)
target_link_libraries(vgpustream PRIVATE d3d11 dxgi dxguid uuid user32 gdi32)

add_executable(vgpu-streamer src/stream/win32/main.c)
set_target_properties(vgpu-streamer PROPERTIES OUTPUT_NAME vgpu-streamer)
target_include_directories(vgpu-streamer
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
            ${CMAKE_CURRENT_SOURCE_DIR}/src/stream/include
            ${CMAKE_CURRENT_SOURCE_DIR}/src/stream/win32)
target_link_libraries(vgpu-streamer PRIVATE vgpustream)
target_link_options(vgpu-streamer PRIVATE $<$<C_COMPILER_ID:GNU>:-static;-s>)
