rexglue-skate3/src/ui/CMakeLists.txt
2026-06-06 15:13:35 +01:00

171 lines
4.1 KiB
CMake

# rexui
# Core UI sources
set(REXUI_CORE_SOURCES
graphics_upload_buffer_pool.cpp
graphics_util.cpp
imgui_dialog.cpp
imgui_drawer.cpp
immediate_drawer.cpp
keybinds.cpp
menu_item.cpp
presenter.cpp
renderdoc_api.cpp
window.cpp
windowed_app.cpp
windowed_app_context.cpp
)
# Optional overlay dialogs
set(REXUI_OVERLAY_SOURCES
overlay/debug_overlay.cpp
overlay/console_overlay.cpp
overlay/install_wizard_overlay.cpp
overlay/simple_settings_overlay.cpp
overlay/settings_overlay.cpp
)
# Vulkan UI backend
set(REXUI_VULKAN_SOURCES
vulkan/linked_type_descriptor_set_allocator.cpp
vulkan/single_layout_descriptor_set_pool.cpp
vulkan/spirv_tools_context.cpp
vulkan/ui_samplers.cpp
vulkan/vulkan_device.cpp
vulkan/vulkan_immediate_drawer.cpp
vulkan/vulkan_instance.cpp
vulkan/vulkan_mem_alloc.cpp
vulkan/vulkan_presenter.cpp
vulkan/vulkan_provider.cpp
vulkan/vulkan_submission_tracker.cpp
vulkan/vulkan_upload_buffer_pool.cpp
vulkan/vulkan_util.cpp
)
# D3D12 UI backend
if(REXGLUE_USE_D3D12)
set(REXUI_D3D12_SOURCES
d3d12/d3d12_cpu_descriptor_pool.cpp
d3d12/d3d12_descriptor_heap_pool.cpp
d3d12/d3d12_immediate_drawer.cpp
d3d12/d3d12_presenter.cpp
d3d12/d3d12_provider.cpp
d3d12/d3d12_submission_tracker.cpp
d3d12/d3d12_upload_buffer_pool.cpp
d3d12/d3d12_util.cpp
)
endif()
# Platform-specific sources
if(WIN32)
set(REXUI_PLATFORM_SOURCES
surface_win.cpp
window_win.cpp
windowed_app_context_win.cpp
)
elseif(APPLE)
set(REXUI_PLATFORM_SOURCES
surface_sdl.cpp
window_sdl.cpp
windowed_app_context_sdl.cpp
)
else()
set(REXUI_PLATFORM_SOURCES
surface_gnulinux.cpp
window_gtk.cpp
windowed_app_context_gtk.cpp
)
endif()
# Combine sources
set(REXUI_SOURCES
${REXUI_CORE_SOURCES}
${REXUI_OVERLAY_SOURCES}
${REXUI_PLATFORM_SOURCES}
)
if(REXGLUE_USE_VULKAN)
list(APPEND REXUI_SOURCES ${REXUI_VULKAN_SOURCES})
endif()
if(REXGLUE_USE_D3D12)
list(APPEND REXUI_SOURCES ${REXUI_D3D12_SOURCES})
endif()
add_library(rexui OBJECT ${REXUI_SOURCES})
add_library(rex::ui ALIAS rexui)
target_include_directories(rexui PUBLIC
$<BUILD_INTERFACE:${REXGLUE_ROOT}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_include_directories(rexui PRIVATE
${REXGLUE_ROOT}/src # For ui/shaders/bytecode includes
)
target_link_libraries(rexui PUBLIC
rexcore
renderdoc
imgui::imgui
)
if(REXGLUE_FIDELITYFX_SOURCE_DIR AND EXISTS "${REXGLUE_FIDELITYFX_SOURCE_DIR}/sdk/include")
target_include_directories(rexui PRIVATE
"${REXGLUE_FIDELITYFX_SOURCE_DIR}/sdk/include"
"${REXGLUE_FIDELITYFX_SOURCE_DIR}/ffx-api/include"
)
target_compile_definitions(rexui PRIVATE REX_HAS_FIDELITYFX_SDK=1)
endif()
set(REXUI_HAS_FIDELITYFX_RUNTIME OFF)
if(TARGET amd_fidelityfx_vk)
target_link_libraries(rexui PRIVATE amd_fidelityfx_vk)
set(REXUI_HAS_FIDELITYFX_RUNTIME ON)
endif()
if(TARGET amd_fidelityfx_dx12)
target_link_libraries(rexui PRIVATE amd_fidelityfx_dx12)
set(REXUI_HAS_FIDELITYFX_RUNTIME ON)
endif()
if(REXUI_HAS_FIDELITYFX_RUNTIME)
target_compile_definitions(rexui PRIVATE REX_HAS_FIDELITYFX_RUNTIME=1)
endif()
if(REXGLUE_USE_VULKAN)
target_link_libraries(rexui PUBLIC
volk::volk
GPUOpen::VulkanMemoryAllocator
SPIRV-Tools-static
)
endif()
# Platform-specific dependencies
if(WIN32)
target_link_libraries(rexui PUBLIC
dwmapi
Shcore
)
elseif(APPLE)
target_link_libraries(rexui PUBLIC SDL3::SDL3)
else()
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
pkg_check_modules(X11_XCB REQUIRED x11-xcb)
target_include_directories(rexui PRIVATE
${GTK3_INCLUDE_DIRS}
${X11_XCB_INCLUDE_DIRS}
)
target_link_libraries(rexui PUBLIC
${GTK3_LIBRARIES}
${X11_XCB_LIBRARIES}
)
endif()
# D3D12 backend dependencies
if(REXGLUE_USE_D3D12)
target_link_libraries(rexui PUBLIC
dxgi
dxguid
dxc-headers
)
endif()