Files
video-shader-toys/CMakeLists.txt
2026-05-02 14:20:38 +10:00

102 lines
2.9 KiB
CMake

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" "$<TARGET_FILE_DIR:video-shader>/web"
COMMAND "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders" "$<TARGET_FILE_DIR:video-shader>/shaders"
)