102 lines
2.9 KiB
CMake
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"
|
|
)
|