cmake_minimum_required(VERSION 3.20) project(mxl_multiviewer LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) option( MXL_MULTIVIEWER_ENABLE_MXL_SDK "Enable real MXL SDK integration" OFF ) find_package(PkgConfig REQUIRED) find_package(Vulkan REQUIRED) pkg_check_modules(SDL3 REQUIRED sdl3) add_executable(mxl_multiviewer main.cpp imgui/imgui.cpp imgui/imgui_draw.cpp imgui/imgui_tables.cpp imgui/imgui_widgets.cpp imgui/backends/imgui_impl_sdl3.cpp imgui/backends/imgui_impl_vulkan.cpp AppConfig.cpp FeedCreate.cpp FeedTexture.cpp NoSignalFeed.cpp MxlFeed.cpp MxlInstanceCache.cpp MxlSdkFeed.cpp SmpteBarsFeed.cpp TileLayout.cpp VulkanContext.cpp VulkanUtils.cpp Swapchain.cpp RenderPipeline.cpp V210ComputeDecoder.cpp ) target_include_directories(mxl_multiviewer PRIVATE ${SDL3_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/imgui ${CMAKE_SOURCE_DIR}/imgui/backends ) set_source_files_properties( imgui/imgui.cpp imgui/imgui_draw.cpp imgui/imgui_tables.cpp imgui/imgui_widgets.cpp imgui/backends/imgui_impl_sdl3.cpp imgui/backends/imgui_impl_vulkan.cpp PROPERTIES COMPILE_OPTIONS "-w" ) target_link_libraries(mxl_multiviewer PRIVATE ${SDL3_LIBRARIES} ) target_compile_options(mxl_multiviewer PRIVATE -Wall -Wextra -Wpedantic ) target_compile_definitions(mxl_multiviewer PRIVATE MXL_MULTIVIEWER_ENABLE_MXL_SDK=$ ) if(MXL_MULTIVIEWER_ENABLE_MXL_SDK) set(MXL_SDK_ROOT "" CACHE PATH "Path to MXL SDK root directory") if(NOT MXL_SDK_ROOT) message(FATAL_ERROR "MXL_SDK_ROOT must be set when MXL_MULTIVIEWER_ENABLE_MXL_SDK is ON") endif() target_include_directories(mxl_multiviewer PRIVATE ${MXL_SDK_ROOT}/lib/include ${MXL_SDK_ROOT}/build/Linux-Clang-Release/lib/include ) target_link_directories(mxl_multiviewer PRIVATE ${MXL_SDK_ROOT}/build/Linux-Clang-Release/lib ${MXL_SDK_ROOT}/build/Linux-Clang-Release/lib/internal ) target_link_libraries(mxl_multiviewer PRIVATE mxl mxl-common ) endif() target_link_libraries(mxl_multiviewer PRIVATE ${SDL3_LIBRARIES} Vulkan::Vulkan ) # v210 conversion test add_executable(v210_test v210_test.cpp) target_include_directories(v210_test PRIVATE ${CMAKE_SOURCE_DIR}) # Compile compute shader add_custom_command( OUTPUT ${CMAKE_SOURCE_DIR}/shaders/bin/v210_decode.comp.spv COMMAND glslangValidator -V ${CMAKE_SOURCE_DIR}/shaders/v210_decode.comp -o ${CMAKE_SOURCE_DIR}/shaders/bin/v210_decode.comp.spv DEPENDS ${CMAKE_SOURCE_DIR}/shaders/v210_decode.comp COMMENT "Compiling v210_decode.comp to SPIR-V" )