cmake_minimum_required(VERSION 3.15) project(dwm-capture) # C++17 is sufficient — DwmGetDxSharedSurface does not use WinRT/C++20 features. # (WGC required C++20 for coroutine headers; shared surface approach does not.) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) include_directories(${CMAKE_JS_INC}) add_library(${PROJECT_NAME} SHARED src/addon.cpp src/capture.cpp src/d3d_device.cpp src/png_encoder.cpp ) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC} ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/vendor ) target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB} d3d11.lib dxgi.lib dwmapi.lib ) # node-addon-api headers execute_process( COMMAND node -p "require('node-addon-api').include" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/.. OUTPUT_VARIABLE NODE_ADDON_API_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ) string(REPLACE "\"" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR}) target_include_directories(${PROJECT_NAME} PRIVATE ${NODE_ADDON_API_DIR}) # NAPI version 8 per D-07 target_compile_definitions(${PROJECT_NAME} PRIVATE NAPI_VERSION=8) # Disable C++ exceptions in node-addon-api (use NAPI error handling instead) target_compile_definitions(${PROJECT_NAME} PRIVATE NAPI_DISABLE_CPP_EXCEPTIONS) set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node" )