Only the shipping artifacts (coop_host.exe, coop_hook.dll, coop_hook_x86.dll, coop_inject_x86.exe, steam_api64.dll, steam_input_actions.vdf) now land in the bin/<config>/ root, so it can be copied wholesale into a donor game folder. Test exes (plus the coop_tone fixture) build into bin/<config>/tests/ and the dev probes into bin/<config>/tools/, via a new coop_output_subdir() CMake helper. The probes resolve coop_hook.dll / the x86 injector from the deployable root one level up (new common/coop/tool_paths.hpp: deployed_artifact_path checks next-to-exe then parent). coop_tone is co-located with the tests so audio_loopback_test's "spawn coop_tone.exe next to me" lookup is unchanged. Verified from a clean bin/: root holds only deployables; ctest x64 7/7 and x86 3/3 green (incl. audio_loopback_test driving coop_tone from tests/). Also convert the roadmap Planned list to bullets and drop this (now-done) item. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
89 lines
3.6 KiB
CMake
89 lines
3.6 KiB
CMake
add_executable(coop_host WIN32
|
|
src/main.cpp
|
|
src/d3d11_window.cpp
|
|
src/imgui_layer.cpp
|
|
src/controllers_panel.cpp
|
|
src/injection_panel.cpp
|
|
src/capture_panel.cpp
|
|
src/audio_panel.cpp
|
|
src/log_panel.cpp
|
|
src/ui/app_chrome.cpp
|
|
src/input/xinput_source.cpp
|
|
src/inject/process_list.cpp
|
|
src/inject/injector.cpp
|
|
src/ipc/ipc_server.cpp
|
|
src/capture/frame_renderer.cpp
|
|
src/capture/window_capture.cpp
|
|
src/capture/shared_texture.cpp
|
|
src/audio/audio_loopback.cpp
|
|
src/audio/process_loopback_capture.cpp)
|
|
|
|
target_include_directories(coop_host PRIVATE src)
|
|
|
|
# Process-loopback capture (AUDIOCLIENT_ACTIVATION_TYPE_PROCESS_LOOPBACK) needs the
|
|
# Windows 10 20H1 (NTDDI_WIN10_CO) headers; raise the target SDK version for it.
|
|
target_compile_definitions(coop_host PRIVATE NTDDI_VERSION=0x0A00000B)
|
|
|
|
target_link_libraries(coop_host PRIVATE
|
|
coop_common
|
|
imgui
|
|
d3d11
|
|
dxgi
|
|
dwmapi
|
|
d3dcompiler
|
|
windowsapp
|
|
xinput
|
|
mmdevapi
|
|
ole32)
|
|
|
|
set_target_properties(coop_host PROPERTIES OUTPUT_NAME "coop_host")
|
|
|
|
# Optional Steam Input: enabled automatically when the Steamworks SDK is vendored
|
|
# under third_party/steamworks_sdk (it isn't redistributable, so it's gitignored
|
|
# and never committed). Without it, the host builds XInput-only.
|
|
set(COOP_STEAM_SDK_DIR "${CMAKE_SOURCE_DIR}/third_party/steamworks_sdk/sdk")
|
|
if(EXISTS "${COOP_STEAM_SDK_DIR}/public/steam/steam_api.h")
|
|
message(STATUS "Steamworks SDK found -> Steam Input enabled")
|
|
target_sources(coop_host PRIVATE src/input/steam_input_source.cpp)
|
|
target_compile_definitions(coop_host PRIVATE COOP_WITH_STEAM)
|
|
target_include_directories(coop_host SYSTEM PRIVATE "${COOP_STEAM_SDK_DIR}/public")
|
|
# The SDK headers trip /W4 (strncpy, non-UTF-8 bytes); silence for this TU only.
|
|
set_source_files_properties(src/input/steam_input_source.cpp PROPERTIES
|
|
COMPILE_OPTIONS "/wd4996;/wd4828")
|
|
target_link_libraries(coop_host PRIVATE
|
|
"${COOP_STEAM_SDK_DIR}/redistributable_bin/win64/steam_api64.lib")
|
|
# Stage steam_api64.dll + the action manifest next to coop_host.exe.
|
|
add_custom_command(TARGET coop_host POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${COOP_STEAM_SDK_DIR}/redistributable_bin/win64/steam_api64.dll"
|
|
"$<TARGET_FILE_DIR:coop_host>/steam_api64.dll"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/assets/steam_input_actions.vdf"
|
|
"$<TARGET_FILE_DIR:coop_host>/steam_input_actions.vdf"
|
|
VERBATIM)
|
|
|
|
# Console smoke test for Steam Input (reuses the shipping source). Not a ctest
|
|
# (needs Steam running + an appid); run manually from bin/<config>/.
|
|
add_executable(coop_steam_input_probe
|
|
${CMAKE_SOURCE_DIR}/tools/steam_input_probe/main.cpp
|
|
src/input/steam_input_source.cpp
|
|
src/input/xinput_source.cpp)
|
|
target_include_directories(coop_steam_input_probe PRIVATE src)
|
|
target_include_directories(coop_steam_input_probe SYSTEM PRIVATE "${COOP_STEAM_SDK_DIR}/public")
|
|
target_compile_definitions(coop_steam_input_probe PRIVATE COOP_WITH_STEAM)
|
|
set_source_files_properties(src/input/steam_input_source.cpp PROPERTIES COMPILE_OPTIONS "/wd4996;/wd4828")
|
|
target_link_libraries(coop_steam_input_probe PRIVATE
|
|
coop_common
|
|
xinput
|
|
"${COOP_STEAM_SDK_DIR}/redistributable_bin/win64/steam_api64.lib")
|
|
# Dev tool -> bin/<config>/tools/ (its steam_api64.dll copy follows via TARGET_FILE_DIR).
|
|
coop_output_subdir(tools coop_steam_input_probe)
|
|
add_custom_command(TARGET coop_steam_input_probe POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${COOP_STEAM_SDK_DIR}/redistributable_bin/win64/steam_api64.dll"
|
|
"$<TARGET_FILE_DIR:coop_steam_input_probe>/steam_api64.dll"
|
|
VERBATIM)
|
|
else()
|
|
message(STATUS "Steamworks SDK not found -> Steam Input disabled (XInput only)")
|
|
endif()
|