# Dear ImGui built as a static lib with the Win32 + DX11 backends the host uses. add_library(imgui STATIC imgui/imgui.cpp imgui/imgui_draw.cpp imgui/imgui_tables.cpp imgui/imgui_widgets.cpp imgui/imgui_demo.cpp imgui/backends/imgui_impl_win32.cpp imgui/backends/imgui_impl_dx11.cpp) target_include_directories(imgui PUBLIC imgui imgui/backends) # ImGui's own sources are third-party; don't subject them to /W4. if(MSVC) target_compile_options(imgui PRIVATE /W0) endif() target_link_libraries(imgui PUBLIC d3d11 dxgi dwmapi) # --- Vulkan: official Khronos headers + volk meta-loader (submodules) ------- # volk dynamically loads vulkan-1.dll at runtime (no link-time loader lib, no SDK install), # so the Vulkan mock backend + capture hook need only these two submodules. coop_require_submodule("Vulkan-Headers" "third_party/Vulkan-Headers/include/vulkan/vulkan.h") coop_require_submodule("volk" "third_party/volk/volk.h") add_library(vulkan_headers INTERFACE) target_include_directories(vulkan_headers INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/include) add_library(volk STATIC volk/volk.c) target_include_directories(volk PUBLIC volk) target_link_libraries(volk PUBLIC vulkan_headers) # VK_NO_PROTOTYPES: volk provides the entry points itself (no link to a loader lib). target_compile_definitions(volk PUBLIC VK_NO_PROTOTYPES) if(WIN32) target_compile_definitions(volk PUBLIC VK_USE_PLATFORM_WIN32_KHR) endif() if(MSVC) target_compile_options(volk PRIVATE /W0) # third-party source # Match the rest of the project's CRT (dynamic) so it doesn't drag in LIBCMT (LNK4098). set_target_properties(volk PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") endif()