cmake_minimum_required(VERSION 3.24) project(video-shader VERSION 0.1.0 LANGUAGES CXX C) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if (NOT WIN32) message(FATAL_ERROR "Milestone 1 targets Windows x64 because it uses DeckLink COM and Direct3D 11.") endif() set(DECKLINK_SDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/Blackmagic DeckLink SDK 16.0") set(DECKLINK_IDL "${DECKLINK_SDK_DIR}/Win/include/DeckLinkAPI.idl") if (NOT EXISTS "${DECKLINK_IDL}") message(FATAL_ERROR "DeckLink SDK not found at ${DECKLINK_SDK_DIR}") endif() set(WINDOWS_KITS_10_DIR "$ENV{ProgramFiles\(x86\)}/Windows Kits/10") file(GLOB WINDOWS_SDK_MIDL_DIRS "${WINDOWS_KITS_10_DIR}/bin/*/x64" "${WINDOWS_KITS_10_DIR}/bin/*/arm64" ) list(SORT WINDOWS_SDK_MIDL_DIRS) list(REVERSE WINDOWS_SDK_MIDL_DIRS) find_program(MIDL_EXECUTABLE NAMES midl midl.exe HINTS ${WINDOWS_SDK_MIDL_DIRS} DOC "Microsoft Interface Definition Language compiler" REQUIRED ) set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") set(CONFIGURED_DIR "${CMAKE_CURRENT_BINARY_DIR}/configured") set(DECKLINK_GENERATED_HEADER "${GENERATED_DIR}/DeckLinkAPI_h.h") set(DECKLINK_GENERATED_IID "${GENERATED_DIR}/DeckLinkAPI_i.c") add_custom_command( OUTPUT "${DECKLINK_GENERATED_HEADER}" "${DECKLINK_GENERATED_IID}" COMMAND "${CMAKE_COMMAND}" -E make_directory "${GENERATED_DIR}" COMMAND "${MIDL_EXECUTABLE}" /nologo /char signed /env x64 /h DeckLinkAPI_h.h /iid DeckLinkAPI_i.c /proxy DeckLinkAPI_p.c /tlb DeckLinkAPI.tlb /out "${GENERATED_DIR}" /I "${DECKLINK_SDK_DIR}/Win/include" "${DECKLINK_IDL}" DEPENDS "${DECKLINK_IDL}" VERBATIM ) add_library(decklink_api_iids STATIC "${DECKLINK_GENERATED_IID}") target_include_directories(decklink_api_iids PUBLIC "${GENERATED_DIR}") set(APP_CONTENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/web") set(APP_SHADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/shaders") configure_file(src/AppConfig.h.in "${CONFIGURED_DIR}/AppConfig.h" @ONLY) add_executable(video-shader src/main.cpp src/AppState.cpp src/DeckLinkPipeline.cpp src/D3DProcessor.cpp src/FileUtil.cpp src/JsonUtil.cpp src/ShaderLibrary.cpp src/WebServer.cpp ) target_include_directories(video-shader PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src" "${GENERATED_DIR}" "${CONFIGURED_DIR}" ) target_compile_definitions(video-shader PRIVATE NOMINMAX WIN32_LEAN_AND_MEAN ) target_link_libraries(video-shader PRIVATE decklink_api_iids d3d11 dxgi d3dcompiler ws2_32 bcrypt ole32 oleaut32 ) add_custom_command(TARGET video-shader POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/web" "$/web" COMMAND "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders" "$/shaders" )