cmake_minimum_required(VERSION 3.20) project(sauna CXX C) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Static CRT (M4 step 7 install story): the exe must run on a machine # without the VC++ Redistributable — share spatial_light.exe alone and it # works. Everything else in the import table is Windows-inbox or ships # with the NVIDIA driver (nvapi64). set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") # DirectMode lives in the NDA HMD NVAPI — referenced in place from a local # mmi_test checkout, NOT vendored (licensing boundary, see ADR-0001 / S2). set(MMI_TEST_DIR "C:/Users/decid/Documents/projects/mmi_test" CACHE PATH "BigscreenVR/mmi_test checkout") set(NVAPI_DIR "${MMI_TEST_DIR}/directmode/nvapi/HMD-NDA-developer") if(NOT EXISTS "${NVAPI_DIR}/nvapi.h") message(FATAL_ERROR "NDA HMD NVAPI not found at ${NVAPI_DIR} — set MMI_TEST_DIR") endif() add_library(sauna_calib STATIC src/calib/hmd_config.cpp) target_include_directories(sauna_calib PUBLIC src third_party) add_library(puff STATIC third_party/puff/puff.c) target_include_directories(puff PUBLIC third_party) add_library(sauna_device STATIC src/device/tundra_imu.cpp src/device/tundra_config.cpp src/device/mcu_prox.cpp) target_include_directories(sauna_device PUBLIC src) target_link_libraries(sauna_device PRIVATE hid setupapi cfgmgr32 puff) add_library(sauna_present STATIC src/present/nvapi_d3d12.cpp) target_include_directories(sauna_present PUBLIC src "${NVAPI_DIR}") target_link_libraries(sauna_present PUBLIC "${NVAPI_DIR}/amd64/nvapi64.lib" d3d12 dxgi) add_executable(sauna_first_light src/app/first_light.cpp) target_link_libraries(sauna_first_light PRIVATE sauna_device sauna_present) add_executable(panel_bench src/app/panel_bench.cpp) target_link_libraries(panel_bench PRIVATE sauna_device sauna_present) # VRAM smoke harness (M5 doze VRAM diagnosis) — headless capture-pipeline # memory probe, no headset/present loop. add_executable(vram_smoke src/app/vram_smoke.cpp) target_link_libraries(vram_smoke PRIVATE sauna_capture d3d12 dxgi) add_executable(calib_check src/app/calib_check.cpp) target_link_libraries(calib_check PRIVATE sauna_calib) add_executable(gyro_cal src/app/gyro_cal.cpp) target_link_libraries(gyro_cal PRIVATE sauna_device) add_executable(calib_dump src/app/calib_dump.cpp) target_include_directories(calib_dump PRIVATE third_party) target_link_libraries(calib_dump PRIVATE sauna_device) add_library(sauna_track STATIC src/track/ahrs.cpp src/track/neck_cal.cpp) target_include_directories(sauna_track PUBLIC src) target_link_libraries(sauna_track PUBLIC sauna_calib sauna_device) add_executable(ahrs_log src/app/ahrs_log.cpp) target_link_libraries(ahrs_log PRIVATE sauna_track) add_library(sauna_capture STATIC src/capture/duplication_source.cpp src/capture/monitor_layout.cpp) target_include_directories(sauna_capture PUBLIC src) target_link_libraries(sauna_capture PUBLIC d3d12 d3d11 dxgi d3dcompiler) add_library(sauna_render STATIC src/render/scene_renderer.cpp src/render/warp_pass.cpp src/render/warp_direct.cpp) target_include_directories(sauna_render PUBLIC src) target_link_libraries(sauna_render PUBLIC sauna_calib d3d12 dxgi d3dcompiler) add_executable(render_core src/app/render_core.cpp) target_link_libraries(render_core PRIVATE sauna_render sauna_track) add_executable(warp_check src/app/warp_check.cpp) target_link_libraries(warp_check PRIVATE sauna_render) add_executable(spatial_light src/app/spatial_light.cpp src/app/settings.cpp src/app/gpu_hogs.cpp) target_link_libraries(spatial_light PRIVATE sauna_capture sauna_device sauna_present sauna_render sauna_track shell32 user32 pdh winmm)