diff --git a/.gitignore b/.gitignore index 4c30feb4a5eb82..0443d1740aeccb 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ !/docs !/libobs* !/plugins -!/tests +!/test !/UI !.cirrus.xml !.clang-format diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index cbebcd84d9a993..c50416bce0689f 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -79,8 +79,6 @@ target_sources( platform.hpp qt-display.cpp qt-display.hpp - qt-wrappers.cpp - qt-wrappers.hpp ui-config.h ui-validation.cpp ui-validation.hpp) @@ -91,7 +89,7 @@ elseif(OS_MACOS) include(cmake/os-macos.cmake) elseif(OS_LINUX) include(cmake/os-linux.cmake) -elseif(OS_FREEBSD) +elseif(OS_FREEBSD OR OS_OPENBSD) include(cmake/os-freebsd.cmake) endif() diff --git a/UI/cmake/feature-browserpanels.cmake b/UI/cmake/feature-browserpanels.cmake index 5d504940417d31..bce82e4e1c5607 100644 --- a/UI/cmake/feature-browserpanels.cmake +++ b/UI/cmake/feature-browserpanels.cmake @@ -3,6 +3,8 @@ if(TARGET OBS::browser-panels) target_link_libraries(obs-studio PRIVATE OBS::browser-panels) - target_sources(obs-studio PRIVATE window-dock-browser.cpp window-dock-browser.hpp window-extra-browsers.cpp - window-extra-browsers.hpp) + target_sources( + obs-studio + PRIVATE # cmake-format: sortable + window-dock-browser.cpp window-dock-browser.hpp window-extra-browsers.cpp window-extra-browsers.hpp) endif() diff --git a/UI/cmake/feature-importers.cmake b/UI/cmake/feature-importers.cmake index e55620c4a4dfa9..16ff1635be0580 100644 --- a/UI/cmake/feature-importers.cmake +++ b/UI/cmake/feature-importers.cmake @@ -1,2 +1,5 @@ -target_sources(obs-studio PRIVATE importers/classic.cpp importers/importers.cpp importers/importers.hpp - importers/sl.cpp importers/studio.cpp importers/xsplit.cpp) +target_sources( + obs-studio + PRIVATE # cmake-format: sortable + importers/classic.cpp importers/importers.cpp importers/importers.hpp importers/sl.cpp importers/studio.cpp + importers/xsplit.cpp) diff --git a/UI/cmake/feature-whatsnew.cmake b/UI/cmake/feature-whatsnew.cmake index 0220cae9ff2a64..3d093ae46cc059 100644 --- a/UI/cmake/feature-whatsnew.cmake +++ b/UI/cmake/feature-whatsnew.cmake @@ -1,3 +1,5 @@ +include_guard(DIRECTORY) + option(ENABLE_WHATSNEW "Enable WhatsNew dialog" ON) if(ENABLE_WHATSNEW AND TARGET OBS::browser-panels) diff --git a/UI/cmake/feature-youtube.cmake b/UI/cmake/feature-youtube.cmake index c7e7e9cb03720d..97be6ee7377589 100644 --- a/UI/cmake/feature-youtube.cmake +++ b/UI/cmake/feature-youtube.cmake @@ -1,7 +1,8 @@ if(YOUTUBE_CLIENTID AND YOUTUBE_SECRET AND YOUTUBE_CLIENTID_HASH MATCHES "^(0|[a-fA-F0-9]+)$" - AND YOUTUBE_SECRET_HASH MATCHES "^(0|[a-fA-F0-9]+)$") + AND YOUTUBE_SECRET_HASH MATCHES "^(0|[a-fA-F0-9]+)$" + AND TARGET OBS::browser-panels) target_sources( obs-studio PRIVATE # cmake-format: sortable diff --git a/UI/cmake/os-macos.cmake b/UI/cmake/os-macos.cmake index 9a6cc3ef7d87ea..0c74c683dcd2b4 100644 --- a/UI/cmake/os-macos.cmake +++ b/UI/cmake/os-macos.cmake @@ -1,11 +1,5 @@ -if(NOT XCODE) - target_add_resource(obs-studio "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/Assets.xcassets") -endif() - target_sources(obs-studio PRIVATE platform-osx.mm forms/OBSPermissions.ui window-permissions.cpp window-permissions.hpp) -target_compile_options( - obs-studio PRIVATE -Wno-error=float-conversion -Wno-error=implicit-int-conversion -Wno-error=shorten-64-to-32 - -Wno-quoted-include-in-framework-header -Wno-comma) +target_compile_options(obs-studio PRIVATE -Wno-quoted-include-in-framework-header -Wno-comma) set_source_files_properties(platform-osx.mm PROPERTIES COMPILE_FLAGS -fobjc-arc) diff --git a/UI/cmake/os-windows.cmake b/UI/cmake/os-windows.cmake index c5cece943f6f44..35180a37eda75e 100644 --- a/UI/cmake/os-windows.cmake +++ b/UI/cmake/os-windows.cmake @@ -14,12 +14,14 @@ configure_file(cmake/windows/obs.rc.in obs.rc) target_sources( obs-studio - PRIVATE obs.rc - platform-windows.cpp - win-dll-blocklist.c + PRIVATE # cmake-format: sortable cmake/windows/obs.manifest + obs.rc + platform-windows.cpp update/crypto-helpers-mbedtls.cpp update/crypto-helpers.hpp + update/models/branches.hpp + update/models/whatsnew.hpp update/shared-update.cpp update/shared-update.hpp update/update-helpers.cpp @@ -28,19 +30,21 @@ target_sources( update/update-window.hpp update/win-update.cpp update/win-update.hpp - update/models/branches.hpp - update/models/whatsnew.hpp + win-dll-blocklist.c win-update/updater/manifest.hpp) target_link_libraries(obs-studio PRIVATE crypt32 OBS::blake2 OBS::w32-pthreads MbedTLS::MbedTLS nlohmann_json::nlohmann_json Detours::Detours) + target_compile_definitions(obs-studio PRIVATE PSAPI_VERSION=2) -target_link_options(obs-studio PRIVATE /IGNORE:4098 /IGNORE:4099) + +target_link_options(obs-studio PRIVATE /IGNORE:4099) add_library(obs-update-helpers INTERFACE) add_library(OBS::update-helpers ALIAS obs-update-helpers) target_sources(obs-update-helpers INTERFACE win-update/win-update-helpers.cpp win-update/win-update-helpers.hpp) + target_include_directories(obs-update-helpers INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/win-update") # Set commit for untagged version comparisons in the Windows updater @@ -49,6 +53,7 @@ if(OBS_VERSION MATCHES ".+g[a-f0-9]+.*") else() set(OBS_COMMIT "") endif() + set_source_files_properties(update/win-update.cpp PROPERTIES COMPILE_DEFINITIONS OBS_COMMIT="${OBS_COMMIT}") add_subdirectory(win-update/updater) diff --git a/UI/cmake/ui-elements.cmake b/UI/cmake/ui-elements.cmake index 240e1f245a2c79..39082b694e8865 100644 --- a/UI/cmake/ui-elements.cmake +++ b/UI/cmake/ui-elements.cmake @@ -1,3 +1,32 @@ +add_library(obs-ui-support INTERFACE) +add_library(OBS::ui-support ALIAS obs-ui-support) + +target_sources( + obs-ui-support + INTERFACE # cmake-format: sortable + clickable-label.hpp + double-slider.cpp + double-slider.hpp + horizontal-scroll-area.cpp + horizontal-scroll-area.hpp + plain-text-edit.cpp + plain-text-edit.hpp + properties-view.cpp + properties-view.hpp + properties-view.moc.hpp + qt-wrappers.cpp + qt-wrappers.hpp + slider-ignorewheel.cpp + slider-ignorewheel.hpp + spinbox-ignorewheel.cpp + spinbox-ignorewheel.hpp + vertical-scroll-area.cpp + vertical-scroll-area.hpp) + +target_include_directories(obs-ui-support INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") + +target_link_libraries(obs-studio PRIVATE OBS::ui-support) + target_sources( obs-studio PRIVATE # cmake-format: sortable @@ -6,15 +35,10 @@ target_sources( audio-encoders.cpp audio-encoders.hpp balance-slider.hpp - clickable-label.hpp context-bar-controls.cpp context-bar-controls.hpp - double-slider.cpp - double-slider.hpp focus-list.cpp focus-list.hpp - horizontal-scroll-area.cpp - horizontal-scroll-area.hpp hotkey-edit.cpp hotkey-edit.hpp item-widget-helpers.cpp @@ -30,11 +54,6 @@ target_sources( menu-button.cpp menu-button.hpp mute-checkbox.hpp - plain-text-edit.cpp - plain-text-edit.hpp - properties-view.cpp - properties-view.hpp - properties-view.moc.hpp record-button.cpp record-button.hpp remote-text.cpp @@ -44,20 +63,14 @@ target_sources( screenshot-obj.hpp slider-absoluteset-style.cpp slider-absoluteset-style.hpp - slider-ignorewheel.cpp - slider-ignorewheel.hpp source-label.cpp source-label.hpp source-tree.cpp source-tree.hpp - spinbox-ignorewheel.cpp - spinbox-ignorewheel.hpp undo-stack-obs.cpp undo-stack-obs.hpp url-push-button.cpp url-push-button.hpp - vertical-scroll-area.cpp - vertical-scroll-area.hpp visibility-item-widget.cpp visibility-item-widget.hpp volume-control.cpp diff --git a/UI/cmake/ui-qt.cmake b/UI/cmake/ui-qt.cmake index 3107f2aaea3fd2..6108dfd81e052f 100644 --- a/UI/cmake/ui-qt.cmake +++ b/UI/cmake/ui-qt.cmake @@ -1,4 +1,12 @@ -find_qt(COMPONENTS Widgets Network Svg Xml COMPONENTS_LINUX Gui) +# cmake-format: off +find_package(Qt6 REQUIRED Widgets Network Svg Xml) +# cmake-format: on + +if(OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) + find_package(Qt6 REQUIRED Gui) +endif() target_link_libraries(obs-studio PRIVATE Qt::Widgets Qt::Svg Qt::Xml Qt::Network) diff --git a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt index 76de1224696de0..3bed6ee56a3a22 100644 --- a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt +++ b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt @@ -8,79 +8,64 @@ if(NOT ENABLE_AJA) endif() find_package(LibAJANTV2 REQUIRED) -find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui) + +find_package(Qt6 REQUIRED Widgets) + +if(OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) + find_package(Qt6 REQUIRED Gui) + + find_package(X11 REQUIRED) +endif() + +if(NOT TARGET OBS::aja-support) + add_subdirectory("${CMAKE_SOURCE_DIR}/plugins/aja" "${CMAKE_BINARY_DIR}/plugins/aja") +endif() add_library(aja-output-ui MODULE) add_library(OBS::aja-output-ui ALIAS aja-output-ui) -target_sources( - aja-output-ui - PRIVATE AJAOutputUI.h - AJAOutputUI.cpp - aja-ui-main.cpp - aja-ui-main.h - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-card-manager.cpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-card-manager.hpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-common.cpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-common.hpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-enums.hpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-presets.cpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-presets.hpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-props.cpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-props.hpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-routing.cpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-routing.hpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-ui-props.hpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-vpid-data.cpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-vpid-data.hpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-widget-io.cpp" - "${CMAKE_SOURCE_DIR}/plugins/aja/aja-widget-io.hpp" - "${CMAKE_SOURCE_DIR}/UI/double-slider.cpp" - "${CMAKE_SOURCE_DIR}/UI/double-slider.hpp" - "${CMAKE_SOURCE_DIR}/UI/plain-text-edit.hpp" - "${CMAKE_SOURCE_DIR}/UI/plain-text-edit.cpp" - "${CMAKE_SOURCE_DIR}/UI/properties-view.hpp" - "${CMAKE_SOURCE_DIR}/UI/properties-view.cpp" - "${CMAKE_SOURCE_DIR}/UI/properties-view.moc.hpp" - "${CMAKE_SOURCE_DIR}/UI/qt-wrappers.cpp" - "${CMAKE_SOURCE_DIR}/UI/qt-wrappers.hpp" - "${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.cpp" - "${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.hpp" - "${CMAKE_SOURCE_DIR}/UI/slider-ignorewheel.cpp" - "${CMAKE_SOURCE_DIR}/UI/slider-ignorewheel.hpp" - "${CMAKE_SOURCE_DIR}/UI/vertical-scroll-area.cpp" - "${CMAKE_SOURCE_DIR}/UI/vertical-scroll-area.hpp") +target_sources(aja-output-ui PRIVATE # cmake-format: sortable + aja-ui-main.cpp aja-ui-main.h AJAOutputUI.cpp AJAOutputUI.h) target_sources(aja-output-ui PRIVATE forms/output.ui) -target_link_libraries(aja-output-ui PRIVATE OBS::libobs OBS::frontend-api Qt::Widgets AJA::LibAJANTV2) +target_compile_options( + aja-output-ui PRIVATE $<$:-Wno-deprecated-declarations> + $<$:-Wno-quoted-include-in-framework-header>) + +target_link_libraries( + aja-output-ui + PRIVATE OBS::libobs + OBS::aja-support + OBS::frontend-api + OBS::ui-support + Qt::Widgets + AJA::LibAJANTV2 + $<$:ws2_32.lib> + $<$:setupapi.lib> + $<$:Winmm.lib> + $<$:netapi32.lib> + $<$:Shlwapi.lib> + "$<$:$>" + "$<$:$>" + "$<$:$>" + $<$:X11::X11> + $<$:Qt::GuiPrivate>) + +target_link_options(aja-output-ui PRIVATE $<$:/IGNORE:4099>) if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in aja-output-ui.rc) target_sources(aja-output-ui PRIVATE aja-output-ui.rc) - target_compile_options(aja-output-ui PRIVATE /wd4996) - - target_link_libraries(aja-output-ui PRIVATE ws2_32.lib setupapi.lib Winmm.lib netapi32.lib Shlwapi.lib) - target_link_options(aja-output-ui PRIVATE /IGNORE:4099) - set_property( - TARGET aja-output-ui - APPEND - PROPERTY AUTORCC_OPTIONS --format-version 1) -elseif(OS_MACOS) # cmake-format: off - target_link_libraries( - aja-output-ui - PRIVATE "$" - "$" - "$") + set_property(TARGET aja-output-ui APPEND PROPERTY AUTORCC_OPTIONS --format-version 1) # cmake-format: on - target_compile_options(aja-output-ui PRIVATE -Wno-deprecated-declarations -Wno-quoted-include-in-framework-header) -elseif(OS_LINUX OR OS_FREEBSD) - find_package(X11 REQUIRED) - target_link_libraries(aja-output-ui PRIVATE X11::X11 Qt::GuiPrivate) endif() +# cmake-format: off set_target_properties_obs( aja-output-ui PROPERTIES FOLDER frontend @@ -89,3 +74,4 @@ set_target_properties_obs( AUTOUIC ON AUTORCC ON AUTOUIC_SEARCH_PATHS forms) +# cmake-format: on diff --git a/UI/frontend-plugins/decklink-captions/CMakeLists.txt b/UI/frontend-plugins/decklink-captions/CMakeLists.txt index 3fc910b6c28a9d..7ea1c6ee0bcd3c 100644 --- a/UI/frontend-plugins/decklink-captions/CMakeLists.txt +++ b/UI/frontend-plugins/decklink-captions/CMakeLists.txt @@ -7,31 +7,40 @@ if(NOT ENABLE_DECKLINK) return() endif() -find_qt(COMPONENTS Widgets) +if(OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) + find_package(X11 REQUIRED) + mark_as_advanced(X11) +endif() + +# cmake-format: off +find_package(Qt6 REQUIRED Widgets) +# cmake-format: on add_library(decklink-captions MODULE) add_library(OBS::decklink-captions ALIAS decklink-captions) target_sources(decklink-captions PRIVATE decklink-captions.cpp decklink-captions.h forms/captions.ui) -target_link_libraries(decklink-captions PRIVATE OBS::frontend-api OBS::libobs Qt::Widgets) + +target_compile_options(decklink-captions PRIVATE $<$:-Wno-quoted-include-in-framework-header> + $<$:-Wno-comma>) + +target_link_libraries( + decklink-captions + PRIVATE OBS::frontend-api OBS::libobs Qt::Widgets + "$<$:$>" $<$:X11::X11>) if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in decklink-captions.rc) target_sources(decklink-captions PRIVATE decklink-captions.rc) - set_property( - TARGET decklink-captions - APPEND - PROPERTY AUTORCC_OPTIONS --format-version 1) -elseif(OS_MACOS) - target_compile_options(decklink-captions PRIVATE -Wno-quoted-include-in-framework-header -Wno-comma) - target_link_libraries(decklink-captions PRIVATE "$") -elseif(OS_LINUX OR OS_FREEBSD) - find_package(X11 REQUIRED) - mark_as_advanced(X11) - target_link_libraries(decklink-captions PRIVATE X11::X11) + # cmake-format: off + set_property(TARGET decklink-captions APPEND PROPERTY AUTORCC_OPTIONS --format-version 1) + # cmake-format: on endif() +# cmake-format: off set_target_properties_obs( decklink-captions PROPERTIES FOLDER plugins/decklink @@ -40,3 +49,4 @@ set_target_properties_obs( AUTOUIC ON AUTORCC ON AUTOUIC_SEARCH_PATHS forms) +# cmake-format: on diff --git a/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt b/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt index a5e697e8859ab6..96e5ba2812fb24 100644 --- a/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt +++ b/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt @@ -7,54 +7,43 @@ if(NOT ENABLE_DECKLINK) return() endif() -find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui) +find_package(Qt6 REQUIRED Widgets) + +if(OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) + find_package(Qt6 REQUIRED Gui) + + find_package(X11 REQUIRED) +endif() add_library(decklink-output-ui MODULE) add_library(OBS::decklink-output-ui ALIAS decklink-output-ui) target_sources(decklink-output-ui PRIVATE forms/output.ui) -target_sources( - decklink-output-ui - PRIVATE DecklinkOutputUI.cpp - DecklinkOutputUI.h - decklink-ui-main.cpp - decklink-ui-main.h - "${CMAKE_SOURCE_DIR}/UI/double-slider.cpp" - "${CMAKE_SOURCE_DIR}/UI/double-slider.hpp" - "${CMAKE_SOURCE_DIR}/UI/plain-text-edit.hpp" - "${CMAKE_SOURCE_DIR}/UI/plain-text-edit.cpp" - "${CMAKE_SOURCE_DIR}/UI/properties-view.hpp" - "${CMAKE_SOURCE_DIR}/UI/properties-view.cpp" - "${CMAKE_SOURCE_DIR}/UI/properties-view.moc.hpp" - "${CMAKE_SOURCE_DIR}/UI/qt-wrappers.hpp" - "${CMAKE_SOURCE_DIR}/UI/qt-wrappers.cpp" - "${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.cpp" - "${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.hpp" - "${CMAKE_SOURCE_DIR}/UI/slider-ignorewheel.cpp" - "${CMAKE_SOURCE_DIR}/UI/slider-ignorewheel.hpp" - "${CMAKE_SOURCE_DIR}/UI/vertical-scroll-area.hpp" - "${CMAKE_SOURCE_DIR}/UI/vertical-scroll-area.cpp") +target_sources(decklink-output-ui PRIVATE DecklinkOutputUI.cpp DecklinkOutputUI.h decklink-ui-main.cpp + decklink-ui-main.h) -target_link_libraries(decklink-output-ui PRIVATE OBS::libobs OBS::frontend-api Qt::Widgets) +target_compile_options(decklink-output-ui PRIVATE $<$:-Wno-quoted-include-in-framework-header>) + +target_link_libraries( + decklink-output-ui + PRIVATE OBS::libobs + OBS::frontend-api + OBS::ui-support + Qt::Widgets + "$<$:$>" + $<$:X11::X11> + $<$:Qt::GuiPrivate>) if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in decklink-output-ui.rc) target_sources(decklink-output-ui PRIVATE decklink-output-ui.rc) - set_property( - TARGET decklink-output-ui - APPEND - PROPERTY AUTORCC_OPTIONS --format-version 1) -elseif(OS_MACOS) - find_library(COCOA Cocoa) - mark_as_advanced(COCOA) - - target_link_libraries(decklink-output-ui PRIVATE ${COCOA}) - target_compile_options(decklink-output-ui PRIVATE -Wno-quoted-include-in-framework-header) -elseif(OS_LINUX OR OS_FREEBSD) - find_package(X11 REQUIRED) - target_link_libraries(decklink-output-ui PRIVATE X11::X11 Qt::GuiPrivate) + # cmake-format: off + set_property(TARGET decklink-output-ui APPEND PROPERTY AUTORCC_OPTIONS --format-version 1) + # cmake-format: on endif() set_target_properties_obs( diff --git a/UI/frontend-plugins/frontend-tools/CMakeLists.txt b/UI/frontend-plugins/frontend-tools/CMakeLists.txt index 5a0eeba451efbc..bdc6582ec73ebe 100644 --- a/UI/frontend-plugins/frontend-tools/CMakeLists.txt +++ b/UI/frontend-plugins/frontend-tools/CMakeLists.txt @@ -2,42 +2,54 @@ cmake_minimum_required(VERSION 3.22...3.25) legacy_check() -find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui) +find_package(Qt6 REQUIRED Widgets) + +if(OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) + find_package(Qt6 REQUIRED Gui) + find_package(X11 REQUIRED) +endif() add_library(frontend-tools MODULE) add_library(OBS::frontend-tools ALIAS frontend-tools) target_sources( frontend-tools - PRIVATE frontend-tools.c - auto-scene-switcher.hpp + PRIVATE # cmake-format: sortable + $<$:auto-scene-switcher-osx.mm> + $<$:auto-scene-switcher-nix.cpp> + $<$:auto-scene-switcher-win.cpp> + $<$:captions-handler.cpp> + $<$:captions-handler.hpp> + $<$:captions-mssapi-stream.cpp> + $<$:captions-mssapi-stream.hpp> + $<$:captions-mssapi.cpp> + $<$:captions-mssapi.hpp> + $<$:captions.cpp> + $<$:captions.hpp> auto-scene-switcher.cpp - output-timer.hpp - tool-helpers.hpp + auto-scene-switcher.hpp + frontend-tools.c output-timer.cpp - "${CMAKE_SOURCE_DIR}/UI/double-slider.cpp" - "${CMAKE_SOURCE_DIR}/UI/double-slider.hpp" - "${CMAKE_SOURCE_DIR}/UI/horizontal-scroll-area.cpp" - "${CMAKE_SOURCE_DIR}/UI/horizontal-scroll-area.hpp" - "${CMAKE_SOURCE_DIR}/UI/properties-view.cpp" - "${CMAKE_SOURCE_DIR}/UI/properties-view.hpp" - "${CMAKE_SOURCE_DIR}/UI/properties-view.moc.hpp" - "${CMAKE_SOURCE_DIR}/UI/qt-wrappers.cpp" - "${CMAKE_SOURCE_DIR}/UI/qt-wrappers.hpp" - "${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.cpp" - "${CMAKE_SOURCE_DIR}/UI/spinbox-ignorewheel.hpp" - "${CMAKE_SOURCE_DIR}/UI/slider-ignorewheel.cpp" - "${CMAKE_SOURCE_DIR}/UI/slider-ignorewheel.hpp" - "${CMAKE_SOURCE_DIR}/UI/vertical-scroll-area.hpp" - "${CMAKE_SOURCE_DIR}/UI/vertical-scroll-area.cpp" - "${CMAKE_SOURCE_DIR}/UI/plain-text-edit.cpp" - "${CMAKE_SOURCE_DIR}/UI/plain-text-edit.hpp") + output-timer.hpp + tool-helpers.hpp) target_sources(frontend-tools PRIVATE forms/auto-scene-switcher.ui forms/captions.ui forms/output-timer.ui forms/scripts.ui) -target_link_libraries(frontend-tools PRIVATE OBS::frontend-api OBS::libobs Qt::Widgets - $<$:Qt::GuiPrivate>) +target_compile_options(frontend-tools PRIVATE $<$:-Wno-quoted-include-in-framework-header> + $<$:-Wno-comma>) + +target_link_libraries( + frontend-tools + PRIVATE OBS::frontend-api + OBS::libobs + OBS::ui-support + Qt::Widgets + "$<$:$>" + $<$:X11::X11> + $<$:Qt::GuiPrivate>) add_subdirectory("${CMAKE_SOURCE_DIR}/deps/obs-scripting" "${CMAKE_BINARY_DIR}/deps/obs-scripting") @@ -49,41 +61,14 @@ endif() if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in frontend-tools.rc) - target_sources( - frontend-tools - PRIVATE auto-scene-switcher-win.cpp - frontend-tools.rc - captions.cpp - captions.hpp - captions-handler.cpp - captions-handler.hpp - captions-mssapi.cpp - captions-mssapi.hpp - captions-mssapi-stream.cpp - captions-mssapi-stream.hpp) - - set_property( - TARGET frontend-tools - APPEND - PROPERTY AUTORCC_OPTIONS --format-version 1) -elseif(OS_MACOS) - find_library(COCOA Cocoa) - mark_as_advanced(COCOA) - target_link_libraries(frontend-tools PRIVATE ${COCOA}) - - target_sources(frontend-tools PRIVATE auto-scene-switcher-osx.mm) - target_compile_options(frontend-tools PRIVATE -Wno-quoted-include-in-framework-header -Wno-comma) - set_target_properties(frontend-tools PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) - if(NOT XCODE) - set_source_files_properties(auto-scene-switcher-osx.mm PROPERTIES COMPILE_FLAGS -fobjc-arc) - endif() -elseif(OS_LINUX OR OS_FREEBSD) - find_package(X11 REQUIRED) + target_sources(frontend-tools PRIVATE frontend-tools.rc) - target_link_libraries(frontend-tools PRIVATE X11::X11) - target_sources(frontend-tools PRIVATE auto-scene-switcher-nix.cpp) + # cmake-format: off + set_property(TARGET frontend-tools APPEND PROPERTY AUTORCC_OPTIONS --format-version 1) + # cmake-format: on endif() +# cmake-format: off set_target_properties_obs( frontend-tools PROPERTIES FOLDER frontend @@ -91,4 +76,6 @@ set_target_properties_obs( AUTOMOC ON AUTOUIC ON AUTORCC ON - AUTOUIC_SEARCH_PATHS forms) + AUTOUIC_SEARCH_PATHS forms + XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) +# cmake-format: on diff --git a/UI/obs-frontend-api/CMakeLists.txt b/UI/obs-frontend-api/CMakeLists.txt index ca4eae5138abb2..f9193dc2592d2c 100644 --- a/UI/obs-frontend-api/CMakeLists.txt +++ b/UI/obs-frontend-api/CMakeLists.txt @@ -18,6 +18,8 @@ elseif(OS_MACOS) set_target_properties(obs-frontend-api PROPERTIES SOVERSION 1) endif() +# cmake-format: off set_target_properties_obs(obs-frontend-api PROPERTIES FOLDER frontend PREFIX "" PUBLIC_HEADER obs-frontend-api.h) +# cmake-format: on target_export(obs-frontend-api) diff --git a/UI/win-update/updater/CMakeLists.txt b/UI/win-update/updater/CMakeLists.txt index 40909217c9877c..1f38168e2e41a8 100644 --- a/UI/win-update/updater/CMakeLists.txt +++ b/UI/win-update/updater/CMakeLists.txt @@ -22,13 +22,14 @@ target_sources( updater.manifest updater.rc) -target_compile_options(updater PRIVATE $,/MTd,/MT> "/utf-8") target_compile_definitions(updater PRIVATE NOMINMAX "PSAPI_VERSION=2") target_include_directories(updater PRIVATE "${CMAKE_SOURCE_DIR}/libobs" "${CMAKE_SOURCE_DIR}/UI/win-update") target_link_libraries(updater PRIVATE OBS::blake2 nlohmann_json::nlohmann_json zstd::libzstd_static comctl32 shell32 winhttp) -target_link_options(updater PRIVATE /IGNORE:4098) + +# zstd is hardcoded with /DEFAULTLIB:LIBCMT +target_link_options(updater PRIVATE /NODEFAULTLIB:LIBCMT) set_target_properties(updater PROPERTIES FOLDER frontend OUTPUT_NAME updater) diff --git a/cmake/32bit/projects.cmake b/cmake/32bit/projects.cmake index 00111e51e6c877..e32f692c625bb1 100644 --- a/cmake/32bit/projects.cmake +++ b/cmake/32bit/projects.cmake @@ -1,5 +1,10 @@ # OBS CMake 32-bit slice module +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=E1121 +# cmake-format: on + include_guard(GLOBAL) include(compilerconfig) @@ -13,9 +18,11 @@ macro(legacy_check) endmacro() # cmake-format: off +# target_disable_feature: Stub macro for 32-bit projects macro(target_disable_feature) endmacro() +# target_disable: Stub macro for 32-bit projects macro(target_disable) endmacro() # cmake-format: on diff --git a/cmake/common/bootstrap.cmake b/cmake/common/bootstrap.cmake index d081fe5bf68f0b..5ee72282f127de 100644 --- a/cmake/common/bootstrap.cmake +++ b/cmake/common/bootstrap.cmake @@ -2,34 +2,10 @@ include_guard(GLOBAL) -# Enable automatic PUSH and POP of policies to parent scope -if(POLICY CMP0011) - cmake_policy(SET CMP0011 NEW) -endif() - -# Enable distinction between Clang and AppleClang -if(POLICY CMP0025) - cmake_policy(SET CMP0025 NEW) -endif() - -# Enable strict checking of "break()" usage -if(POLICY CMP0055) - cmake_policy(SET CMP0055 NEW) -endif() - -# Honor visibility presets for all target types (executable, shared, module, static) -if(POLICY CMP0063) - cmake_policy(SET CMP0063 NEW) -endif() - -# Disable export function calls to populate package registry by default -if(POLICY CMP0090) - cmake_policy(SET CMP0090 NEW) -endif() - -set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO RelWithDebInfo Release MinSizeRel "") -set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL MinSizeRel Release RelWithDebInfo "") -set(CMAKE_MAP_IMPORTED_CONFIG_RELEASE Release RelWithDebInfo MinSizeRel "") +# Map fallback configurations for optimized build configurations +set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO RelWithDebInfo Release MinSizeRel None "") +set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL MinSizeRel Release RelWithDebInfo None "") +set(CMAKE_MAP_IMPORTED_CONFIG_RELEASE Release RelWithDebInfo MinSizeRel None "") # Prohibit in-source builds if("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") @@ -57,19 +33,20 @@ set(_obs_beta 0) # Add common module directories to default search path list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/common" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/finders") +include(policies NO_POLICY_SCOPE) include(versionconfig) include(buildnumber) include(osconfig) # Allow selection of common build types via UI if(NOT CMAKE_GENERATOR MATCHES "(Xcode|Visual Studio .+)") - set(CMAKE_BUILD_TYPE - "RelWithDebInfo" - CACHE STRING "OBS build type [Release, RelWithDebInfo, Debug, MinSizeRel]" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Release RelWithDebInfo Debug MinSizeRel) + if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE + "RelWithDebInfo" + CACHE STRING "OBS build type [Release, RelWithDebInfo, Debug, MinSizeRel]" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Release RelWithDebInfo Debug MinSizeRel) + endif() endif() -# Disable exports automatically going into the CMake package registry -set(CMAKE_EXPORT_PACKAGE_REGISTRY FALSE) # Enable default inclusion of targets' source and binary directory set(CMAKE_INCLUDE_CURRENT_DIR TRUE) diff --git a/cmake/common/buildspec_common.cmake b/cmake/common/buildspec_common.cmake index 9d208d5d3c82e9..158b769db4795c 100644 --- a/cmake/common/buildspec_common.cmake +++ b/cmake/common/buildspec_common.cmake @@ -1,7 +1,7 @@ # OBS common build dependencies module # cmake-format: off -# cmake-lint: disable=C0103 +# cmake-lint: disable=E1121 # cmake-lint: disable=E1126 # cmake-lint: disable=R0912 # cmake-lint: disable=R0915 @@ -11,9 +11,9 @@ include_guard(GLOBAL) # _check_deps_version: Checks for obs-deps VERSION file in prefix paths function(_check_deps_version version) - # cmake-format: off - set(found FALSE PARENT_SCOPE) - # cmake-format: on + set(found + FALSE + PARENT_SCOPE) foreach(path IN LISTS CMAKE_PREFIX_PATH) if(EXISTS "${path}/share/obs-deps/VERSION") @@ -30,25 +30,25 @@ function(_check_deps_version version) string(REPLACE "-" "." version "${version}") if(_check_version VERSION_EQUAL version) - # cmake-format: off - set(found TRUE PARENT_SCOPE) - # cmake-format: on + set(found + TRUE + PARENT_SCOPE) break() elseif(_check_version VERSION_LESS version) message(AUTHOR_WARNING "Older ${label} version detected in ${path}: \n" "Found ${_check_version}, require ${version}") list(REMOVE_ITEM CMAKE_PREFIX_PATH "${path}") list(APPEND CMAKE_PREFIX_PATH "${path}") - # cmake-format: off - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE) - # cmake-format: on + set(CMAKE_PREFIX_PATH + ${CMAKE_PREFIX_PATH} + PARENT_SCOPE) continue() else() message(AUTHOR_WARNING "Newer ${label} version detected in ${path}: \n" "Found ${_check_version}, require ${version}") - # cmake-format: off - set(found TRUE PARENT_SCOPE) - # cmake-format: on + set(found + TRUE + PARENT_SCOPE) break() endif() endif() @@ -59,9 +59,7 @@ endfunction() function(_check_dependencies) file(READ "${CMAKE_CURRENT_SOURCE_DIR}/buildspec.json" buildspec) - # cmake-format: off string(JSON dependency_data GET ${buildspec} dependencies) - # cmake-format: on foreach(dependency IN LISTS dependencies_list) if(dependency STREQUAL cef AND arch STREQUAL universal) @@ -72,12 +70,12 @@ function(_check_dependencies) set(platform macos-${arch}) endif() - # cmake-format: off string(JSON data GET ${dependency_data} ${dependency}) string(JSON version GET ${data} version) string(JSON hash GET ${data} hashes ${platform}) string(JSON url GET ${data} baseUrl) string(JSON label GET ${data} label) + # cmake-format: off string(JSON revision ERROR_VARIABLE error GET ${data} revision ${platform}) # cmake-format: on @@ -181,7 +179,7 @@ function(_check_dependencies) list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) - # cmake-format: off - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} CACHE PATH "CMake prefix search path" FORCE) - # cmake-format: on + set(CMAKE_PREFIX_PATH + ${CMAKE_PREFIX_PATH} + CACHE PATH "CMake prefix search path" FORCE) endfunction() diff --git a/cmake/common/ccache.cmake b/cmake/common/ccache.cmake index aa4b148f36289b..5083d7b810297a 100644 --- a/cmake/common/ccache.cmake +++ b/cmake/common/ccache.cmake @@ -3,13 +3,14 @@ include_guard(GLOBAL) if(NOT DEFINED CCACHE_PROGRAM) - message(DEBUG "Trying to find ccache on build host...") + message(DEBUG "Trying to find ccache on build host") find_program(CCACHE_PROGRAM "ccache") mark_as_advanced(CCACHE_PROGRAM) endif() if(CCACHE_PROGRAM) - message(DEBUG "Ccache found as ${CCACHE_PROGRAM}...") + message(DEBUG "Trying to find ccache on build host - done") + message(DEBUG "Ccache found as ${CCACHE_PROGRAM}") option(ENABLE_CCACHE "Enable compiler acceleration with ccache" ON) if(ENABLE_CCACHE) @@ -19,4 +20,6 @@ if(CCACHE_PROGRAM) set(CMAKE_OBJCXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") set(CMAKE_CUDA_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") endif() +else() + message(DEBUG "Trying to find ccache on build host - skipped") endif() diff --git a/cmake/common/helpers_common.cmake b/cmake/common/helpers_common.cmake index 48c583264f3474..81a540595a81be 100644 --- a/cmake/common/helpers_common.cmake +++ b/cmake/common/helpers_common.cmake @@ -2,10 +2,7 @@ # cmake-format: off # cmake-lint: disable=C0103 -# cmake-lint: disable=C0301 -# cmake-lint: disable=C0307 -# cmake-lint: disable=R0912 -# cmake-lint: disable=R0915 +# cmake-lint: disable=E1121 # cmake-format: on include_guard(GLOBAL) @@ -156,6 +153,74 @@ macro(find_qt) endforeach() endmacro() +# _handle_generator_expression_dependency: Helper function to yield dependency from a generator expression +function(_handle_generator_expression_dependency library) + set(oneValueArgs FOUND_VAR) + set(multiValueArgs) + cmake_parse_arguments(var "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + set(${var_FOUND_VAR} "${var_FOUND_VAR}-NOTFOUND") + + message(DEBUG "Checking ${library}...") + + if(library MATCHES "\\$<\\$]+>:.+>" OR library MATCHES "\\$<\\$]+>>:.+>") + # Platform-dependent generator expression found. Platforms are a comma-separated list of CMake host OS identifiers. + # Convert to CMake list and check if current host OS is contained in list. + string(REGEX REPLACE "\\$<.*\\$]+)>>?:([^>]+)>" "\\1;\\2" gen_expression "${library}") + list(GET gen_expression 0 gen_platform) + list(GET gen_expression 1 gen_library) + string(REPLACE "," ";" gen_platform "${gen_platform}") + + set(${var_FOUND_VAR} "${var_FOUND_VAR}-SKIP") + + if(library MATCHES "\\$<\\$.+>") + if(NOT CMAKE_SYSTEM_NAME IN_LIST gen_platform) + set(${var_FOUND_VAR} "${gen_library}") + endif() + else() + if(CMAKE_SYSTEM_NAME IN_LIST gen_platform) + set(${var_FOUND_VAR} "${gen_library}") + endif() + endif() + elseif(library MATCHES "\\$<\\$]+>:.+>") + # Boolean generator expression found. Consider parameter a CMake variable that resolves into a CMake-like boolean + # value for a simple conditional check. + string(REGEX REPLACE "\\$<\\$]+)>:([^>]+)>" "\\1;\\2" gen_expression "${library}") + list(GET gen_expression 0 gen_boolean) + list(GET gen_expression 1 gen_library) + + set(${var_FOUND_VAR} "${var_FOUND_VAR}-SKIP") + + if(${gen_boolean}) + set(${var_FOUND_VAR} "${gen_library}") + endif() + elseif(library MATCHES "\\$]+>") + # Target-dependent generator expression found. Consider parameter to be a CMake target identifier and check for + # target existence. + string(REGEX REPLACE "\\$]+)>" "\\1" gen_target "${library}") + + set(${var_FOUND_VAR} "${var_FOUND_VAR}-SKIP") + + if(TARGET ${gen_target}) + set(${var_FOUND_VAR} "${gen_target}") + endif() + elseif(library MATCHES "\\$<.*Qt6::EntryPointPrivate>" OR library MATCHES "\\$<.*Qt6::QDarwin.+PermissionPlugin>") + set(${var_FOUND_VAR} "${var_FOUND_VAR}-SKIP") + else() + # Unknown or unimplemented generator expression found. Abort script run to either add to ignore list or implement + # detection. + message(FATAL_ERROR "${library} is an unsupported generator expression for linked libraries.") + endif() + + if(CMAKE_VERSION VERSION_LESS 3.25) + set(${var_FOUND_VAR} + ${var_FOUND_VAR} + PARENT_SCOPE) + else() + return(PROPAGATE ${var_FOUND_VAR}) + endif() +endfunction() + # find_dependencies: Check linked interface and direct dependencies of target function(find_dependencies) set(oneValueArgs TARGET FOUND_VAR) @@ -188,45 +253,11 @@ function(find_dependencies) continue() elseif(library MATCHES "\\$<.*:[^>]+>") # Generator expression found - if(library MATCHES "\\$<\\$]+>:.+>") - # Platform-dependent generator expression found - platforms are a comma-separated list of CMake host OS - # identifiers. Convert to CMake list and check if current host os is contained in list. - string(REGEX REPLACE "\\$<\\$]+)>:([^>]+)>" "\\1;\\2" gen_expression "${library}") - list(GET gen_expression 0 gen_platform) - list(GET gen_expression 1 gen_library) - string(REPLACE "," ";" gen_platform "${gen_platform}") - if(CMAKE_SYSTEM_NAME IN_LIST platform) - set(library "${gen_library}") - else() - continue() - endif() - elseif(library MATCHES "\\$<\\$]+>:.+>") - # Boolean generator expression found - consider parameter a CMake variable that resolves into a CMake-like - # boolean value for a simple conditional check. - string(REGEX REPLACE "\\$<\\$]+)>:([^>]+)>" "\\1;\\2" gen_expression "${library}") - list(GET gen_expression 0 gen_boolean) - list(GET gen_expression 1 gen_library) - if(${gen_boolean}) - set(library "${gen_library}") - else() - continue() - endif() - elseif(library MATCHES "\\$]+>") - # Target-dependent generator expression found - consider parameter to be a CMake target identifier and check for - # target existence. - string(REGEX REPLACE "\\$]+)>" "\\1" gen_target "${library}") - if(TARGET ${gen_target}) - set(library "${gen_target}") - else() - continue() - endif() - elseif(library MATCHES "\\$<.*Qt6::EntryPointPrivate>" OR library MATCHES "\\$<.*Qt6::QDarwin.+PermissionPlugin>") - # Known Qt6-specific generator expression, ignored. + _handle_generator_expression_dependency(${library} FOUND_VAR found_library) + if(found_library STREQUAL found_library-SKIP) continue() - else() - # Unknown or unimplemented generator expression found - abort script run to either add to ignore list or - # implement detection. - message(FATAL_ERROR "${library} is an unsupported generator expression for linked libraries.") + elseif(found_library) + set(library ${found_library}) endif() endif() @@ -240,18 +271,18 @@ function(find_dependencies) endforeach() if(NOT is_root) - set(found_libraries - ${found_libraries} - PARENT_SCOPE) + # cmake-format: off + set(found_libraries ${found_libraries} PARENT_SCOPE) + # cmake-format: on # Exit recursive branch return() endif() list(REMOVE_DUPLICATES found_libraries) list(APPEND ${var_FOUND_VAR} ${found_libraries}) - set(${var_FOUND_VAR} - ${${var_FOUND_VAR}} - PARENT_SCOPE) + # cmake-format: off + set(${var_FOUND_VAR} ${${var_FOUND_VAR}} PARENT_SCOPE) + # cmake-format: on endfunction() # find_qt_plugins: Find and add Qt plugin libraries associated with Qt component to target @@ -263,18 +294,13 @@ function(find_qt_plugins) list(GET library_tuple 0 library_namespace) list(GET library_tuple 1 library_name) - if(NOT ${library_namespace} MATCHES "Qt[56]?") - message(FATAL_ERROR "'find_qt_plugins' has to be called with a valid target from the Qt, Qt5, or Qt6 namespace.") + if(NOT ${library_namespace} MATCHES "Qt6?") + message(FATAL_ERROR "'find_qt_plugins' has to be called with a valid target from the Qt or Qt6 namespace.") endif() - list( - APPEND - qt_plugins_Core - platforms - printsupport - styles - imageformats - iconengines) + # cmake-format: off + list(APPEND qt_plugins_Core platforms printsupport styles imageformats iconengines) + # cmake-format: on list(APPEND qt_plugins_Gui platforminputcontexts virtualkeyboard) list(APPEND qt_plugins_Network bearer) list(APPEND qt_plugins_Sql sqldrivers) @@ -318,9 +344,9 @@ function(find_qt_plugins) endforeach() endif() - set(${var_FOUND_VAR} - ${plugins_list} - PARENT_SCOPE) + # cmake-format: off + set(${var_FOUND_VAR} ${plugins_list} PARENT_SCOPE) + # cmake-format: on endfunction() # target_export: Helper function to export target as CMake package @@ -400,15 +426,19 @@ function(target_export target) ${exclude_variant}) endif() - message(DEBUG "Generating export header for target ${target} as ${target}_EXPORT.h...") - include(GenerateExportHeader) - generate_export_header(${target} EXPORT_FILE_NAME "${target}_EXPORT.h") - target_sources(${target} PUBLIC $) + get_target_property(target_type ${target} TYPE) - set_property( - TARGET ${target} - APPEND - PROPERTY PUBLIC_HEADER "${target}_EXPORT.h") + if(NOT target_type STREQUAL INTERFACE_LIBRARY) + message(DEBUG "Generating export header for target ${target} as ${target}_EXPORT.h...") + include(GenerateExportHeader) + generate_export_header(${target} EXPORT_FILE_NAME "${target}_EXPORT.h") + target_sources(${target} PUBLIC $) + + set_property( + TARGET ${target} + APPEND + PROPERTY PUBLIC_HEADER "${target}_EXPORT.h") + endif() set(TARGETS_EXPORT_NAME ${target}Targets) message( @@ -476,14 +506,44 @@ function(check_uuid uuid_string return_value) set(valid_uuid FALSE) endif() message(DEBUG "UUID ${uuid_string} valid: ${valid_uuid}") - set(${return_value} - ${valid_uuid} - PARENT_SCOPE) + # cmake-format: off + set(${return_value} ${valid_uuid} PARENT_SCOPE) + # cmake-format: on endfunction() -# legacy_check: Checks if new CMake framework was not enabled and load legacy rules instead +# legacy_check: Check if new CMake framework was not enabled and load legacy rules instead macro(legacy_check) if(OBS_CMAKE_VERSION VERSION_LESS 3.0.0) message(FATAL_ERROR "CMake version changed between CMakeLists.txt.") endif() endmacro() + +# add_obs_plugin: Add plugin subdirectory if host platform is in specified list of supported platforms +function(add_obs_plugin target) + set(options WITH_MESSAGE) + set(oneValueArgs "") + set(multiValueArgs PLATFORMS) + cmake_parse_arguments(PARSE_ARGV 0 _AOP "${options}" "${oneValueArgs}" "${multiValueArgs}") + + set(found_platform FALSE) + list(LENGTH _AOP_PLATFORMS _AOP_NUM_PLATFORMS) + + if(_AOP_NUM_PLATFORMS EQUAL 0) + set(found_platform TRUE) + else() + foreach(platform IN LISTS _AOP_PLATFORMS) + set(check_var_name "OS_${platform}") + if(${${check_var_name}}) + set(found_platform TRUE) + break() + endif() + endforeach() + endif() + + if(found_platform) + add_subdirectory(${target}) + elseif(_AOP_WITH_MESSAGE) + add_custom_target(${target} COMMENT "Dummy target for unavailable module ${target}") + target_disable(${target}) + endif() +endfunction() diff --git a/cmake/common/policies.cmake b/cmake/common/policies.cmake new file mode 100644 index 00000000000000..0044bd8ee856c0 --- /dev/null +++ b/cmake/common/policies.cmake @@ -0,0 +1,3 @@ +# OBS CMake policies module + +include_guard(GLOBAL) diff --git a/cmake/common/versionconfig.cmake b/cmake/common/versionconfig.cmake index c1ddb56c3730c5..e24e0d2a2099d9 100644 --- a/cmake/common/versionconfig.cmake +++ b/cmake/common/versionconfig.cmake @@ -1,9 +1,5 @@ # OBS CMake common version helper module -# cmake-format: off -# cmake-lint: disable=C0301 -# cmake-format: on - include_guard(GLOBAL) set(_obs_version ${_obs_default_version}) diff --git a/cmake/macos/compilerconfig.cmake b/cmake/macos/compilerconfig.cmake index 4cca6bfe454467..32e77bdc767c41 100644 --- a/cmake/macos/compilerconfig.cmake +++ b/cmake/macos/compilerconfig.cmake @@ -2,6 +2,13 @@ include_guard(GLOBAL) +option(ENABLE_COMPILER_TRACE "Enable clang time-trace" OFF) +mark_as_advanced(ENABLE_COMPILER_TRACE) + +if(NOT XCODE) + message(FATAL_ERROR "Building OBS Studio on macOS requires Xcode generator.") +endif() + include(ccache) include(compiler_common) @@ -15,77 +22,59 @@ if(NOT CMAKE_OSX_ARCHITECTURES) endif() set_property(CACHE CMAKE_OSX_ARCHITECTURES PROPERTY STRINGS arm64 x86_64) -# Make sure the macOS SDK is recent enough for OBS -set(OBS_MACOS_MINIMUM_SDK "13.1") # Keep in sync with Xcode -set(OBS_MACOS_MINIMUM_XCODE "14.2") # Keep in sync with SDK +# Ensure recent enough Xcode and platform SDK +set(_obs_macos_minimum_sdk 13.1) # Keep in sync with Xcode +set(_obs_macos_minimum_xcode 14.2) # Keep in sync with SDK message(DEBUG "macOS SDK Path: ${CMAKE_OSX_SYSROOT}") -string(REGEX MATCH ".+/MacOSX.platform/Developer/SDKs/MacOSX([0-9]+\.[0-9])+\.sdk$" _ ${CMAKE_OSX_SYSROOT}) -set(OBS_MACOS_CURRENT_SDK ${CMAKE_MATCH_1}) +string(REGEX MATCH ".+/MacOSX.platform/Developer/SDKs/MacOSX([0-9]+\\.[0-9])+\\.sdk$" _ ${CMAKE_OSX_SYSROOT}) +set(_obs_macos_current_sdk ${CMAKE_MATCH_1}) message(DEBUG "macOS SDK version: ${OBS_MACOS_CURRENT_SDK}") -if(OBS_MACOS_CURRENT_SDK VERSION_LESS OBS_MACOS_MINIMUM_SDK) +if(_obs_macos_current_sdk VERSION_LESS _obs_macos_minimum_sdk) message( - FATAL_ERROR - "Your macOS SDK version (${OBS_MACOS_CURRENT_SDK}) is too low. The macOS ${OBS_MACOS_MINIMUM_SDK} SDK (Xcode ${OBS_MACOS_MINIMUM_XCODE}) is required to build OBS." - ) + FATAL_ERROR "Your macOS SDK version (${OBS_MACOS_CURRENT_SDK}) is too low. " + "The macOS ${OBS_MACOS_MINIMUM_SDK} SDK (Xcode ${OBS_MACOS_MINIMUM_XCODE}) is required to build OBS.") endif() +unset(_obs_macos_current_sdk) +unset(_obs_macos_minimum_sdk) +unset(_obs_macos_minimum_xcode) -if(XCODE) - # Enable dSYM generator for release builds - string(APPEND CMAKE_C_FLAGS_RELEASE " -g") - string(APPEND CMAKE_CXX_FLAGS_RELEASE " -g") -else() - option(ENABLE_COMPILER_TRACE "Enable clang time-trace (requires Ninja)" OFF) - mark_as_advanced(ENABLE_COMPILER_TRACE) - - # clang options for ObjC - set(_obs_clang_objc_options - ${_obs_clang_common_options} - -Wno-implicit-atomic-properties - -Wno-objc-interface-ivars - -Warc-repeated-use-of-weak - -Wno-arc-maybe-repeated-use-of-weak - -Wimplicit-retain-self - -Wduplicate-method-match - -Wshadow - -Wfloat-conversion - -Wobjc-literal-conversion - -Wno-selector - -Wno-strict-selector-match - -Wundeclared-selector - -Wdeprecated-implementations - -Wprotocol - -Werror=block-capture-autoreleasing - -Wrange-loop-analysis) - - # clang options for ObjC++ - set(_obs_clang_objcxx_options ${_obs_clang_objc_options} -Wno-non-virtual-dtor) +# Enable dSYM generator for release builds +string(APPEND CMAKE_C_FLAGS_RELEASE " -g") +string(APPEND CMAKE_CXX_FLAGS_RELEASE " -g") +string(APPEND CMAKE_OBJC_FLAGS_RELEASE " -g") +string(APPEND CMAKE_OBJCXX_FLAGS_RELEASE " -g") - # cmake-format: off - add_compile_options( - "$<$:${_obs_clang_c_options}>" - "$<$:${_obs_clang_cxx_options}>" - "$<$:${_obs_clang_objc_options}>" - "$<$:${_obs_clang_objcxx_options}>") - # cmake-format: on +# Default ObjC compiler options used by Xcode: +# +# * -Wno-implicit-atomic-properties +# * -Wno-objc-interface-ivars +# * -Warc-repeated-use-of-weak +# * -Wno-arc-maybe-repeated-use-of-weak +# * -Wimplicit-retain-self +# * -Wduplicate-method-match +# * -Wshadow +# * -Wfloat-conversion +# * -Wobjc-literal-conversion +# * -Wno-selector +# * -Wno-strict-selector-match +# * -Wundeclared-selector +# * -Wdeprecated-implementations +# * -Wprotocol +# * -Werror=block-capture-autoreleasing +# * -Wrange-loop-analysis - # Enable stripping of dead symbols when not building for Debug configuration - set(_release_configs RelWithDebInfo Release MinSizeRel) - if(CMAKE_BUILD_TYPE IN_LIST _release_configs) - add_link_options(LINKER:-dead_strip) - endif() +# Default ObjC++ compiler options used by Xcode: +# +# * -Wno-non-virtual-dtor - # Enable color diagnostics for AppleClang - set(CMAKE_COLOR_DIAGNOSTICS ON) +add_compile_definitions( + $<$>:$<$:DEBUG>> + $<$>:$<$:_DEBUG>> $<$>:SIMDE_ENABLE_OPENMP>) - # Add time trace option to compiler, if enabled. - if(ENABLE_COMPILER_TRACE AND CMAKE_GENERATOR STREQUAL "Ninja") - add_compile_options($<$>:-ftime-trace>) - else() - set(ENABLE_COMPILER_TRACE - OFF - CACHE BOOL "Enable clang time-trace (requires Ninja)" FORCE) - endif() +if(ENABLE_COMPILER_TRACE) + add_compile_options( + $<$>:-ftime-trace> + "$<$:SHELL:-Xfrontend -debug-time-expression-type-checking>" + "$<$:SHELL:-Xfrontend -debug-time-function-bodies>") + add_link_options(LINKER:-print_statistics) endif() - -add_compile_definitions( - "$<$>:$<$:DEBUG>;$<$:_DEBUG>;SIMDE_ENABLE_OPENMP>") diff --git a/cmake/macos/defaults.cmake b/cmake/macos/defaults.cmake index 3f8a512be8c202..8bc947e16229b9 100644 --- a/cmake/macos/defaults.cmake +++ b/cmake/macos/defaults.cmake @@ -16,9 +16,7 @@ if(NOT OBS_CODESIGN_TEAM) endif() endif() -if(XCODE) - include(xcode) -endif() +include(xcode) include(buildspec) diff --git a/cmake/macos/helpers.cmake b/cmake/macos/helpers.cmake index 5fe0336306c42b..1088429c8db143 100644 --- a/cmake/macos/helpers.cmake +++ b/cmake/macos/helpers.cmake @@ -1,10 +1,11 @@ # OBS CMake macOS helper functions module # cmake-format: off +# cmake-lint: disable=C0301 # cmake-lint: disable=C0307 +# cmake-lint: disable=E1126 # cmake-lint: disable=R0912 # cmake-lint: disable=R0915 -# cmake-lint: disable=E1126 # cmake-format: on include_guard(GLOBAL) @@ -22,9 +23,7 @@ function(set_target_xcode_properties target) while(_STXP_PROPERTIES) list(POP_FRONT _STXP_PROPERTIES key value) - # cmake-format: off set_property(TARGET ${target} PROPERTY XCODE_ATTRIBUTE_${key} "${value}") - # cmake-format: on endwhile() endfunction() @@ -41,6 +40,7 @@ function(set_target_properties_obs target) list(POP_FRONT _STPO_PROPERTIES key value) set_property(TARGET ${target} PROPERTY ${key} "${value}") endwhile() + get_target_property(target_type ${target} TYPE) string(TIMESTAMP CURRENT_YEAR "%Y") @@ -80,10 +80,6 @@ function(set_target_properties_obs target) get_property(obs_dependencies GLOBAL PROPERTY _OBS_DEPENDENCIES) add_dependencies(${target} ${obs_dependencies}) - if(NOT XCODE) - return() - endif() - get_property(obs_frameworks GLOBAL PROPERTY _OBS_FRAMEWORKS) set_property( TARGET ${target} @@ -107,11 +103,8 @@ function(set_target_properties_obs target) get_property(obs_executables GLOBAL PROPERTY _OBS_EXECUTABLES) add_dependencies(${target} ${obs_executables}) foreach(executable IN LISTS obs_executables) - # cmake-format: off - set_target_xcode_properties( - ${executable} - PROPERTIES INSTALL_PATH "$(LOCAL_APPS_DIR)/$/Contents/MacOS") - # cmake-format: on + set_target_xcode_properties(${executable} PROPERTIES INSTALL_PATH + "$(LOCAL_APPS_DIR)/$/Contents/MacOS") add_custom_command( TARGET ${target} diff --git a/cmake/macos/xcode.cmake b/cmake/macos/xcode.cmake index f4148d86a800b3..708935c5d10364 100644 --- a/cmake/macos/xcode.cmake +++ b/cmake/macos/xcode.cmake @@ -91,9 +91,6 @@ set(CMAKE_XCODE_ATTRIBUTE_GCC_INLINES_ARE_PRIVATE_EXTERN YES) # Strip unused code set(CMAKE_XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING YES) -# Display mangled names in Debug configuration -set(CMAKE_XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES) - # Build active architecture only in Debug configuration set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] YES) @@ -120,9 +117,9 @@ set(CMAKE_XCODE_ATTRIBUTE_GCC_STRICT_ALIASING NO) # # set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD c++17) -# Enable support for module imports in ObjC +# Disable support for module imports in ObjC set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES NO) -# Enable automatic linking of imported modules in ObjC +# Disable automatic linking of imported modules in ObjC set(CMAKE_XCODE_ATTRIBUTE_CLANG_MODULES_AUTOLINK NO) # Enable strict msg_send rules for ObjC set(CMAKE_XCODE_ATTRIBUTE_ENABLE_STRICT_OBJC_MSGSEND YES) diff --git a/cmake/windows/compilerconfig.cmake b/cmake/windows/compilerconfig.cmake index 4342f74f9570bc..f836824ca40906 100644 --- a/cmake/windows/compilerconfig.cmake +++ b/cmake/windows/compilerconfig.cmake @@ -1,5 +1,9 @@ # OBS CMake Windows compiler configuration module +# cmake-format: off +# cmake-lint: disable=E1126 +# cmake-format: on + include_guard(GLOBAL) include(ccache) @@ -10,6 +14,7 @@ if(ENABLE_CCACHE AND CCACHE_PROGRAM) file(COPY_FILE ${CCACHE_PROGRAM} "${CMAKE_CURRENT_BINARY_DIR}/cl.exe") set(CMAKE_VS_GLOBALS "CLToolExe=cl.exe" "CLToolPath=${CMAKE_BINARY_DIR}" "TrackFileAccess=false" "UseMultiToolTask=true") + # Ccache does not support debug information stored in program database (PDB) files set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded) elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang") file(COPY_FILE ${CCACHE_PROGRAM} "${CMAKE_CURRENT_BINARY_DIR}/clang-cl.exe") @@ -42,9 +47,8 @@ if(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION VERSION_LESS 10.0.20348) "Please download and install the most recent Windows SDK.") endif() -set(_obs_msvc_c_options /Brepro /MP /permissive- /Zc:__cplusplus /Zc:preprocessor) - -set(_obs_msvc_cpp_options /Brepro /MP /permissive- /Zc:__cplusplus /Zc:preprocessor) +set(_obs_msvc_c_options /MP /Zc:__cplusplus /Zc:preprocessor) +set(_obs_msvc_cpp_options /MP /Zc:__cplusplus /Zc:preprocessor) if(CMAKE_CXX_STANDARD GREATER_EQUAL 20) list(APPEND _obs_msvc_cpp_options /Zc:char8_t-) @@ -53,6 +57,8 @@ endif() add_compile_options( /W3 /utf-8 + /Brepro + /permissive- "$<$:${_obs_msvc_c_options}>" "$<$:${_obs_msvc_cpp_options}>" "$<$:${_obs_clang_c_options}>" diff --git a/cmake/windows/helpers.cmake b/cmake/windows/helpers.cmake index acbf26a0d2f282..9472930d8b4723 100644 --- a/cmake/windows/helpers.cmake +++ b/cmake/windows/helpers.cmake @@ -1,7 +1,8 @@ # OBS CMake Windows helper functions module # cmake-format: off -# cmake-lint: disable=C0301 +# cmake-lint: disable=C0103 +# cmake-lint: disable=R0912 # cmake-lint: disable=R0915 # cmake-format: on @@ -98,10 +99,11 @@ function(set_target_properties_obs target) add_custom_command( TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E echo "Add obspython import module" COMMAND "${CMAKE_COMMAND}" -E make_directory "${OBS_OUTPUT_DIR}/$/${OBS_SCRIPT_PLUGIN_DESTINATION}/" COMMAND "${CMAKE_COMMAND}" -E copy_if_different "$/obspython.py" "${OBS_OUTPUT_DIR}/$/${OBS_SCRIPT_PLUGIN_DESTINATION}/" - COMMENT "Add obspython import module") + COMMENT "") install( FILES "$/obspython.py" @@ -118,6 +120,7 @@ function(set_target_properties_obs target) add_custom_command( TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E echo "Add Chromium Embedded Framework to library directory" COMMAND "${CMAKE_COMMAND}" -E make_directory "${OBS_OUTPUT_DIR}/$/${target_destination}" COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${imported_location}" "${cef_location}/chrome_elf.dll" @@ -129,7 +132,7 @@ function(set_target_properties_obs target) "${cef_root_location}/Resources/resources.pak" "${OBS_OUTPUT_DIR}/$/${target_destination}/" COMMAND "${CMAKE_COMMAND}" -E copy_directory "${cef_root_location}/Resources/locales" "${OBS_OUTPUT_DIR}/$/${target_destination}/locales" - COMMENT "Add Chromium Embedded Framework to library directory") + COMMENT "") install( FILES "${imported_location}" @@ -249,11 +252,12 @@ function(_target_install_obs target) add_custom_command( TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E echo "${comment}" COMMAND "${CMAKE_COMMAND}" -E make_directory "${OBS_OUTPUT_DIR}/$/${_TIO_DESTINATION}" COMMAND "${CMAKE_COMMAND}" -E copy ${target_file} "${OBS_OUTPUT_DIR}/$/${_TIO_DESTINATION}" COMMAND "${CMAKE_COMMAND}" -E $,copy,true> ${target_pdb_file} "${OBS_OUTPUT_DIR}/$/${_TIO_DESTINATION}" - COMMENT "${comment}" + COMMENT "" VERBATIM) install( @@ -309,17 +313,17 @@ function(target_install_resources target) add_custom_command( TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E echo "Copy ${target} resources to data directory" COMMAND "${CMAKE_COMMAND}" -E make_directory "${OBS_OUTPUT_DIR}/$/${target_destination}" COMMAND "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/data" "${OBS_OUTPUT_DIR}/$/${target_destination}" - COMMENT "Copy ${target} resources to data directory" + COMMENT "" VERBATIM) endif() endfunction() # Helper function to add a specific resource to a bundle function(target_add_resource target resource) - get_property(obs_module_list GLOBAL PROPERTY OBS_MODULES_ENABLED) if(ARGN) set(target_destination "${ARGN}") @@ -341,9 +345,10 @@ function(target_add_resource target resource) add_custom_command( TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E echo "Copy ${target} resource ${resource} to library directory" COMMAND "${CMAKE_COMMAND}" -E make_directory "${OBS_OUTPUT_DIR}/$/${target_destination}/" COMMAND "${CMAKE_COMMAND}" -E copy "${resource}" "${OBS_OUTPUT_DIR}/$/${target_destination}/" - COMMENT "Copy ${target} resource ${resource} to library directory" + COMMENT "" VERBATIM) source_group("Resources" FILES "${resource}") @@ -407,6 +412,7 @@ function(_bundle_dependencies target) add_custom_command( TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E echo "Copy dependencies to binary directory (${OBS_EXECUTABLE_DESTINATION})..." COMMAND "${CMAKE_COMMAND}" -E make_directory "${OBS_OUTPUT_DIR}/$/${OBS_EXECUTABLE_DESTINATION}" COMMAND "${CMAKE_COMMAND}" -E "$,copy_if_different,true>" "$<$:${library_paths_DEBUG}>" "${OBS_OUTPUT_DIR}/$/${OBS_EXECUTABLE_DESTINATION}" @@ -419,7 +425,7 @@ function(_bundle_dependencies target) COMMAND "${CMAKE_COMMAND}" -E "$,copy_if_different,true>" "$<$:${library_paths_MINSIZEREL}>" "${OBS_OUTPUT_DIR}/$/${OBS_EXECUTABLE_DESTINATION}" - COMMENT "Copy dependencies to binary directory (${OBS_EXECUTABLE_DESTINATION})..." + COMMENT "." VERBATIM COMMAND_EXPAND_LISTS) install( @@ -469,12 +475,14 @@ function(_bundle_dependencies target) add_custom_command( TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E echo + "Copy Qt plugins ${stem} to binary directory (${OBS_EXECUTABLE_DESTINATION}/${stem})" COMMAND "${CMAKE_COMMAND}" -E make_directory "${OBS_OUTPUT_DIR}/$/${OBS_EXECUTABLE_DESTINATION}/${stem}" COMMAND "${CMAKE_COMMAND}" -E "$,copy_if_different,true>" "${plugin_list_debug}" "${OBS_OUTPUT_DIR}/$/${OBS_EXECUTABLE_DESTINATION}/${stem}" COMMAND "${CMAKE_COMMAND}" -E "$,true,copy_if_different>" "${plugin_list}" "${OBS_OUTPUT_DIR}/$/${OBS_EXECUTABLE_DESTINATION}/${stem}" - COMMENT "Copy Qt plugins ${stem} to binary directory (${OBS_EXECUTABLE_DESTINATION}/${stem})" + COMMENT "" VERBATIM COMMAND_EXPAND_LISTS) install( diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index d093e29df0883f..a408eaa1e8a93c 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -1,16 +1,14 @@ if(OS_WINDOWS) - if(NOT MINGW) - add_subdirectory(w32-pthreads) - endif() add_subdirectory(ipc-util) + add_subdirectory(w32-pthreads) endif() add_subdirectory(blake2) +add_subdirectory(file-updater) add_subdirectory(glad) +add_subdirectory(happy-eyeballs) +add_subdirectory(libcaption) add_subdirectory(media-playback) -add_subdirectory(file-updater) add_subdirectory(obs-scripting) add_subdirectory(opts-parser) -add_subdirectory(libcaption) add_subdirectory(uthash) -add_subdirectory(happy-eyeballs) diff --git a/deps/blake2/CMakeLists.txt b/deps/blake2/CMakeLists.txt index b9fb338a82fc45..e39c1a8d4e9df1 100644 --- a/deps/blake2/CMakeLists.txt +++ b/deps/blake2/CMakeLists.txt @@ -1,18 +1,13 @@ cmake_minimum_required(VERSION 3.22...3.25) -add_library(blake2 STATIC EXCLUDE_FROM_ALL ) +add_library(blake2 OBJECT) add_library(OBS::blake2 ALIAS blake2) -target_sources(blake2 PRIVATE src/blake2b-ref.c src/blake2.h src/blake2-impl.h) +target_sources( + blake2 + PRIVATE src/blake2-impl.h src/blake2b-ref.c + PUBLIC src/blake2.h) target_include_directories(blake2 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") -set_source_files_properties( - src/blake2b-ref.c PROPERTIES COMPILE_OPTIONS - "$<$:-Wno-error=implicit-int-conversion>") - -if(OS_WINDOWS) - target_compile_options(blake2 PRIVATE $,/MTd,/MT> /Zl) - target_compile_definitions(blake2 PRIVATE inline=_inline restrict=__restrict) -endif() set_target_properties(blake2 PROPERTIES FOLDER deps) diff --git a/deps/file-updater/CMakeLists.txt b/deps/file-updater/CMakeLists.txt index e07cd2f0fa93a7..0151974972b74e 100644 --- a/deps/file-updater/CMakeLists.txt +++ b/deps/file-updater/CMakeLists.txt @@ -7,6 +7,6 @@ add_library(OBS::file-updater ALIAS file-updater) target_sources(file-updater INTERFACE file-updater/file-updater.c file-updater/file-updater.h) -target_link_libraries(file-updater INTERFACE CURL::libcurl $<$:OBS::w32-pthreads>) - target_include_directories(file-updater INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") + +target_link_libraries(file-updater INTERFACE CURL::libcurl $<$:OBS::w32-pthreads>) diff --git a/deps/glad/CMakeLists.txt b/deps/glad/CMakeLists.txt index 64b05a2ccb9ec7..fba3f3ff980cdb 100644 --- a/deps/glad/CMakeLists.txt +++ b/deps/glad/CMakeLists.txt @@ -2,29 +2,32 @@ cmake_minimum_required(VERSION 3.22...3.25) find_package(OpenGL REQUIRED) -add_library(obsglad STATIC EXCLUDE_FROM_ALL ) +add_library(obsglad OBJECT) add_library(OBS::glad ALIAS obsglad) if(OBS_CMAKE_VERSION VERSION_LESS 3.0.0) add_library(OBS::obsglad ALIAS obsglad) endif() -target_sources(obsglad PRIVATE src/glad.c include/glad/glad.h) +# cmake-format: off +target_sources( + obsglad + PRIVATE src/glad.c + $<$:src/glad_wgl.c> + $<$:src/glad_egl.c> + $<$:include/EGL/eglplatform.h> + PUBLIC include/glad/glad.h + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/include/glad/glad_wgl.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/include/glad/glad_egl.h>") +# cmake-format: on -target_include_directories(obsglad PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") - -target_link_libraries(obsglad PUBLIC OpenGL::GL) +target_compile_options(obsglad PRIVATE $<$:-Wno-strict-prototypes>) -if(OS_WINDOWS) - target_sources(obsglad PRIVATE src/glad_wgl.c include/glad/glad_wgl.h) -elseif(OS_MACOS) - target_compile_options(obsglad PRIVATE -Wno-strict-prototypes) -elseif(OS_LINUX OR OS_FREEBSD) - if(TARGET OpenGL::EGL) - target_sources(obsglad PRIVATE src/glad_egl.c include/EGL/eglplatform.h include/glad/glad_egl.h) +target_include_directories(obsglad PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") - target_link_libraries(obsglad PRIVATE OpenGL::EGL) - endif() -endif() +target_link_libraries( + obsglad + PRIVATE $<$>:${CMAKE_DL_LIBS}> + PUBLIC OpenGL::GL $<$:OpenGL::EGL>) set_target_properties(obsglad PROPERTIES FOLDER deps POSITION_INDEPENDENT_CODE TRUE) diff --git a/deps/happy-eyeballs/CMakeLists.txt b/deps/happy-eyeballs/CMakeLists.txt index b3a5692cd0eb8b..c6e143c8fc47d8 100644 --- a/deps/happy-eyeballs/CMakeLists.txt +++ b/deps/happy-eyeballs/CMakeLists.txt @@ -1,16 +1,15 @@ cmake_minimum_required(VERSION 3.22...3.25) -add_library(happy-eyeballs INTERFACE) +add_library(happy-eyeballs OBJECT) add_library(OBS::happy-eyeballs ALIAS happy-eyeballs) -target_sources(happy-eyeballs INTERFACE happy-eyeballs.c happy-eyeballs.h) +target_sources( + happy-eyeballs + PRIVATE happy-eyeballs.c + PUBLIC happy-eyeballs.h) -target_include_directories(happy-eyeballs INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) +target_include_directories(happy-eyeballs PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") -target_link_libraries(happy-eyeballs INTERFACE OBS::libobs) +target_link_libraries(happy-eyeballs PUBLIC OBS::libobs) -if(OS_WINDOWS) - target_link_libraries(happy-eyeballs INTERFACE OBS::w32-pthreads) -endif() - -set_target_properties(happy-eyeballs PROPERTIES FOLDER deps) +set_target_properties(happy-eyeballs PROPERTIES FOLDER deps POSITION_INDEPENDENT_CODE TRUE) diff --git a/deps/ipc-util/CMakeLists.txt b/deps/ipc-util/CMakeLists.txt index d750129ea79810..bda6f80a0d715f 100644 --- a/deps/ipc-util/CMakeLists.txt +++ b/deps/ipc-util/CMakeLists.txt @@ -1,14 +1,12 @@ cmake_minimum_required(VERSION 3.24...3.25) -# cmake-format: off -add_library(ipc-util STATIC EXCLUDE_FROM_ALL) -# cmake-format: on +add_library(ipc-util INTERFACE) add_library(OBS::ipc-util ALIAS ipc-util) -target_sources(ipc-util PRIVATE ipc-util/pipe.h) -target_include_directories(ipc-util PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") +target_sources( + ipc-util INTERFACE "$<$:${CMAKE_CURRENT_SOURCE_DIR}/ipc-util/pipe-windows.c>" ipc-util/pipe.h + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/ipc-util/pipe-windows.h>") -target_sources(ipc-util PRIVATE ipc-util/pipe-windows.c ipc-util/pipe-windows.h) -target_compile_options(ipc-util PRIVATE $,/MTd,/MT> /Zl) +target_include_directories(ipc-util INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") -set_target_properties(ipc-util PROPERTIES FOLDER deps POSITION_INDEPENDENT_CODE ON) +set_target_properties(ipc-util PROPERTIES FOLDER deps) diff --git a/deps/json11/CMakeLists.txt b/deps/json11/CMakeLists.txt index 78cb7c94adfed1..050e339d021f82 100644 --- a/deps/json11/CMakeLists.txt +++ b/deps/json11/CMakeLists.txt @@ -1,9 +1,17 @@ cmake_minimum_required(VERSION 3.22...3.25) -add_library(json11 INTERFACE) +add_library(json11 OBJECT) add_library(OBS::json11 ALIAS json11) -target_include_directories(json11 INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") -target_compile_options(json11 INTERFACE $<$:-Wno-unqualified-std-cast-call>) +target_sources( + json11 + PRIVATE json11.cpp + PUBLIC json11.hpp) -target_sources(json11 INTERFACE json11.cpp json11.hpp) +target_include_directories(json11 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") + +if(CMAKE_CXX_COMPILER_ID MATCHES "(AppleClang|Clang)" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 14) + target_compile_options(json11 PUBLIC -Wno-unqualified-std-cast-call) +endif() + +set_target_properties(json11 PROPERTIES FOLDER deps) diff --git a/deps/libcaption/CMakeLists.txt b/deps/libcaption/CMakeLists.txt index 53cd79196002ab..007cb3e876719a 100644 --- a/deps/libcaption/CMakeLists.txt +++ b/deps/libcaption/CMakeLists.txt @@ -5,33 +5,38 @@ add_library(OBS::caption ALIAS caption) target_sources( caption - PRIVATE src/caption.c + PRIVATE # cmake-format: sortable + caption/cea708.h + caption/eia608.h + caption/eia608_charmap.h + caption/mpeg.h + caption/scc.h + caption/utf8.h + src/caption.c src/cea708.c src/eia608.c src/eia608_charmap.c src/eia608_from_utf8.c src/mpeg.c - src/srt.c src/scc.c + src/srt.c src/utf8.c src/xds.c - caption/eia608.h - caption/eia608_charmap.h - caption/cea708.h - caption/mpeg.h - caption/scc.h - caption/utf8.h PUBLIC caption/caption.h) -target_compile_definitions(caption PRIVATE __STDC_CONSTANT_MACROS $<$:_CRT_SECURE_NO_WARNINGS>) - -target_compile_options( - caption - PRIVATE "$<$:-Wno-unused-but-set-parameter;-Wno-comma;-Wno-strict-prototypes>") - target_include_directories( caption PRIVATE caption PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") -set_target_properties(caption PROPERTIES FOLDER deps POSITION_INDEPENDENT_CODE ON) +target_compile_definitions(caption PRIVATE __STDC_CONSTANT_MACROS) + +# cmake-format: off +target_compile_options( + caption + PRIVATE $<$:-Wno-unused-but-set-parameter> + $<$:-Wno-strict-prototypes> + $<$:-Wno-comma>) +# cmake-format: on + +set_target_properties(caption PROPERTIES FOLDER deps POSITION_INDEPENDENT_CODE TRUE) diff --git a/deps/media-playback/CMakeLists.txt b/deps/media-playback/CMakeLists.txt index a84900e4756b9a..ab3a0fe7c809e9 100644 --- a/deps/media-playback/CMakeLists.txt +++ b/deps/media-playback/CMakeLists.txt @@ -1,24 +1,28 @@ cmake_minimum_required(VERSION 3.22...3.25) -find_package(FFmpeg REQUIRED COMPONENTS avcodec avdevice avutil avformat) +find_package(FFmpeg REQUIRED avcodec avdevice avutil avformat) add_library(media-playback INTERFACE) add_library(OBS::media-playback ALIAS media-playback) target_sources( media-playback - INTERFACE media-playback/media.c - media-playback/media.h + INTERFACE # cmake-format: sortable media-playback/cache.c media-playback/cache.h + media-playback/closest-format.h media-playback/decode.c media-playback/decode.h media-playback/media-playback.c media-playback/media-playback.h - media-playback/closest-format.h) + media-playback/media.c + media-playback/media.h) target_include_directories(media-playback INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") -target_compile_options(media-playback INTERFACE ${ARCH_SIMD_FLAGS}) -target_compile_definitions(media-playback INTERFACE ${ARCH_SIMD_DEFINES}) + +if(OBS_CMAKE_VERSION VERSION_LESS 3.0) + target_compile_options(media-playback INTERFACE ${ARCH_SIMD_FLAGS}) + target_compile_definitions(media-playback INTERFACE ${ARCH_SIMD_DEFINES}) +endif() target_link_libraries(media-playback INTERFACE FFmpeg::avcodec FFmpeg::avdevice FFmpeg::avutil FFmpeg::avformat) diff --git a/deps/obs-scripting/CMakeLists.txt b/deps/obs-scripting/CMakeLists.txt index 9096e4b27e0702..c47445028fcd1c 100644 --- a/deps/obs-scripting/CMakeLists.txt +++ b/deps/obs-scripting/CMakeLists.txt @@ -7,11 +7,7 @@ if(NOT ENABLE_SCRIPTING) return() endif() -add_library(obs-cstrcache INTERFACE) -add_library(OBS::cstrcache ALIAS obs-cstrcache) - -target_sources(obs-cstrcache INTERFACE cstrcache.cpp cstrcache.h) -target_include_directories(obs-cstrcache INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") +include(cmake/cstrcache.cmake) find_package(SWIG 4 REQUIRED) @@ -31,20 +27,28 @@ endif() target_sources( obs-scripting PUBLIC obs-scripting.h - PRIVATE obs-scripting.c obs-scripting-logging.c obs-scripting-callback.h - $<$:obs-scripting-python-frontend.c> $<$:obs-scripting-lua-frontend.c>) + PRIVATE obs-scripting-callback.h obs-scripting-logging.c obs-scripting.c) target_compile_definitions(obs-scripting PRIVATE SCRIPT_DIR="${OBS_SCRIPT_PLUGIN_PATH}" $<$:ENABLE_UI>) -target_compile_features(obs-scripting PRIVATE cxx_auto_type) -target_include_directories(obs-scripting PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(obs-scripting PRIVATE OBS::libobs OBS::cstrcache $<$:OBS::frontend-api> - $<$:OBS::w32-pthreads> $<$:objc>) +target_include_directories(obs-scripting PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") + +# cmake-format: off +target_link_libraries( + obs-scripting + PRIVATE OBS::libobs + OBS::cstrcache + $<$:OBS::frontend-api> + $<$:OBS::w32-pthreads> + $<$:objc>) +# cmake-format: on if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in obs-scripting.rc) target_sources(obs-scripting PRIVATE obs-scripting.rc) endif() +# cmake-format: off set_target_properties_obs(obs-scripting PROPERTIES FOLDER scripting PREFIX "") +# cmake-format: on diff --git a/deps/obs-scripting/cmake/cstrcache.cmake b/deps/obs-scripting/cmake/cstrcache.cmake new file mode 100644 index 00000000000000..543f9790d67207 --- /dev/null +++ b/deps/obs-scripting/cmake/cstrcache.cmake @@ -0,0 +1,5 @@ +add_library(obs-cstrcache INTERFACE) +add_library(OBS::cstrcache ALIAS obs-cstrcache) + +target_sources(obs-cstrcache INTERFACE cstrcache.cpp cstrcache.h) +target_include_directories(obs-cstrcache INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/deps/obs-scripting/cmake/lua.cmake b/deps/obs-scripting/cmake/lua.cmake index dd837409d7f70b..656cb1a697a403 100644 --- a/deps/obs-scripting/cmake/lua.cmake +++ b/deps/obs-scripting/cmake/lua.cmake @@ -4,26 +4,32 @@ option(ENABLE_SCRIPTING_LUA "Enable Lua scripting support" ON) if(ENABLE_SCRIPTING_LUA) add_subdirectory(obslua) + find_package(Luajit REQUIRED) -else() - target_disable_feature(obs-scripting "Lua scripting support") -endif() -target_sources(obs-scripting PRIVATE obs-scripting-lua.c obs-scripting-lua.h obs-scripting-lua-source.c) -target_compile_definitions(obs-scripting PUBLIC LUAJIT_FOUND) + add_custom_command( + OUTPUT swig/swigluarun.h + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory swig + COMMAND ${CMAKE_COMMAND} -E env "SWIG_LIB=${SWIG_DIR}" ${SWIG_EXECUTABLE} -lua -external-runtime swig/swigluarun.h + COMMENT "obs-scripting - generating Luajit SWIG interface headers") + + set_source_files_properties(swig/swigluarun.h PROPERTIES GENERATED TRUE) -add_custom_command( - OUTPUT swig/swigluarun.h - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory swig - COMMAND ${CMAKE_COMMAND} -E env "SWIG_LIB=${SWIG_DIR}" ${SWIG_EXECUTABLE} -lua -external-runtime swig/swigluarun.h - COMMENT "obs-scripting - generating Luajit SWIG interface headers") + target_sources( + obs-scripting + PRIVATE # cmake-format: sortable + $<$:obs-scripting-lua-frontend.c> obs-scripting-lua-source.c obs-scripting-lua.c + obs-scripting-lua.h swig/swigluarun.h) -target_sources(obs-scripting PRIVATE swig/swigluarun.h) -set_source_files_properties(swig/swigluarun.h PROPERTIES GENERATED ON) -set_source_files_properties( - obs-scripting-lua.c obs-scripting-lua-source.c - PROPERTIES COMPILE_OPTIONS "$<$:-Wno-error=shorten-64-to-32;-Wno-error=shadow>") + target_compile_definitions(obs-scripting PUBLIC LUAJIT_FOUND) -target_link_libraries(obs-scripting PRIVATE Luajit::Luajit) + set_source_files_properties( + obs-scripting-lua.c obs-scripting-lua-source.c + PROPERTIES COMPILE_OPTIONS $<$:-Wno-error=shorten-64-to-32>) + + target_link_libraries(obs-scripting PRIVATE Luajit::Luajit) +else() + target_disable_feature(obs-scripting "Lua scripting support") +endif() diff --git a/deps/obs-scripting/cmake/python.cmake b/deps/obs-scripting/cmake/python.cmake index 85fd20b930b406..0cf5170f84f4a2 100644 --- a/deps/obs-scripting/cmake/python.cmake +++ b/deps/obs-scripting/cmake/python.cmake @@ -4,46 +4,46 @@ option(ENABLE_SCRIPTING_PYTHON "Enable Python scripting support" ON) if(ENABLE_SCRIPTING_PYTHON) add_subdirectory(obspython) + if(OS_WINDOWS) find_package(Python 3.8...<3.11 REQUIRED Interpreter Development) else() find_package(Python 3.8...<3.12 REQUIRED Interpreter Development) endif() + + add_custom_command( + OUTPUT swig/swigpyrun.h + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory swig + COMMAND ${CMAKE_COMMAND} -E env "SWIG_LIB=${SWIG_DIR}" ${SWIG_EXECUTABLE} -python + $<$:-py3-stable-abi> -external-runtime swig/swigpyrun.h + COMMENT "obs-scripting - generating Python 3 SWIG interface headers") + + set_source_files_properties(swig/swigpyrun.h PROPERTIES GENERATED TRUE) + + target_sources( + obs-scripting + PRIVATE # cmake-format: sortable + $<$:obs-scripting-python-frontend.c> + $<$:obs-scripting-python-import.c> + obs-scripting-python-import.h + obs-scripting-python.c + obs-scripting-python.h + swig/swigpyrun.h) + + target_compile_definitions( + obs-scripting + PRIVATE ENABLE_SCRIPTING PYTHON_LIB="$" + PUBLIC Python_FOUND) + + target_include_directories( + obs-scripting + PRIVATE "$<$:$>") + + target_link_libraries(obs-scripting PRIVATE $<$:Python::Python>) + + target_link_options(obs-scripting PRIVATE $<$:LINKER:-undefined,dynamic_lookup>) else() target_disable_feature(obs-scripting "Python scripting support") endif() - -target_sources(obs-scripting PRIVATE obs-scripting-python.c obs-scripting-python.h obs-scripting-python-import.h) - -target_compile_definitions( - obs-scripting - PRIVATE ENABLE_SCRIPTING PYTHON_LIB="$" - PUBLIC Python_FOUND) - -add_custom_command( - OUTPUT swig/swigpyrun.h - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory swig - COMMAND ${CMAKE_COMMAND} -E env "SWIG_LIB=${SWIG_DIR}" ${SWIG_EXECUTABLE} -python - $,-py3,-py3-stable-abi> -external-runtime swig/swigpyrun.h - COMMENT "obs-scripting - generating Python 3 SWIG interface headers") - -target_sources(obs-scripting PRIVATE swig/swigpyrun.h) -set_source_files_properties(swig/swigpyrun.h PROPERTIES GENERATED ON) - -if(OS_WINDOWS) - target_sources(obs-scripting PRIVATE obs-scripting-python-import.c) - - get_target_property(_python_include_directory Python::Python INTERFACE_INCLUDE_DIRECTORIES) - target_include_directories(obs-scripting PRIVATE ${_python_include_directory}) -elseif(OS_MACOS) - target_sources(obs-scripting PRIVATE obs-scripting-python-import.c) - - get_target_property(_python_include_directory Python::Python INTERFACE_INCLUDE_DIRECTORIES) - target_include_directories(obs-scripting PRIVATE ${_python_include_directory}) - - target_link_options(obs-scripting PRIVATE LINKER:-undefined LINKER:dynamic_lookup) -elseif(OS_LINUX OR OS_FREEBSD) - target_link_libraries(obs-scripting PRIVATE Python::Python) -endif() diff --git a/deps/obs-scripting/obslua/CMakeLists.txt b/deps/obs-scripting/obslua/CMakeLists.txt index 98517ee7d60d61..204459aa817600 100644 --- a/deps/obs-scripting/obslua/CMakeLists.txt +++ b/deps/obs-scripting/obslua/CMakeLists.txt @@ -11,12 +11,12 @@ if(POLICY CMP0086) endif() find_package(Luajit REQUIRED) - find_package(SWIG 4 REQUIRED) include(UseSWIG) set_source_files_properties(obslua.i PROPERTIES USE_TARGET_INCLUDE_DIRECTORIES TRUE) + swig_add_library( obslua LANGUAGE lua @@ -25,21 +25,21 @@ swig_add_library( add_library(OBS::lua ALIAS obslua) -target_compile_options(obslua PRIVATE "$<$:-Wno-error=shorten-64-to-32>") +target_compile_options( + obslua + PRIVATE $<$:/wd4054> + $<$:/wd4197> + $<$:/wd4244> + $<$:/wd4267> + $<$:-Wno-shorten-64-to-32> + $<$:-Wno-unreachable-code> + $<$:-Wno-maybe-uninitialized>) + target_compile_definitions(obslua PRIVATE SWIG_TYPE_TABLE=obslua SWIG_LUA_INTERPRETER_NO_DEBUG $<$:ENABLE_UI>) -target_link_libraries(obslua PRIVATE OBS::scripting OBS::cstrcache OBS::libobs Luajit::Luajit - $<$:OBS::frontend-api>) - -if(OS_WINDOWS) - target_compile_options(obslua PRIVATE /wd4054 /wd4197 /wd4244 /wd4267) -elseif(OS_MACOS) - set_property(TARGET obslua PROPERTY XCODE_ATTRIBUTE_STRIP_STYLE non-global) - target_compile_options(obslua PRIVATE -Wno-unreachable-code) -elseif(OS_LINUX OR OS_FREEBSD) - target_compile_options(obslua PRIVATE -Wno-maybe-uninitialized) -endif() +target_link_libraries(obslua PRIVATE OBS::cstrcache OBS::libobs OBS::scripting Luajit::Luajit + $<$:OBS::frontend-api>) set_property( TARGET obslua @@ -47,4 +47,6 @@ set_property( PROPERTY SWIG_COMPILE_DEFINITIONS "SWIG_TYPE_TABLE=obslua" "SWIG_LUA_INTERPRETER_NO_DEBUG" "$<$:ENABLE_UI>") -set_target_properties_obs(obslua PROPERTIES FOLDER scripting) +# cmake-format: off +set_target_properties_obs(obslua PROPERTIES FOLDER scripting XCODE_ATTRIBUTE_STRIP_STYLE non-global) +# cmake-format: on diff --git a/deps/obs-scripting/obspython/CMakeLists.txt b/deps/obs-scripting/obspython/CMakeLists.txt index 64e022ce900fbf..935c550bd5103a 100644 --- a/deps/obs-scripting/obspython/CMakeLists.txt +++ b/deps/obs-scripting/obspython/CMakeLists.txt @@ -20,7 +20,7 @@ find_package(SWIG 4 REQUIRED) include(UseSWIG) set_source_files_properties(obspython.i PROPERTIES USE_TARGET_INCLUDE_DIRECTORIES TRUE - SWIG_FLAGS "$,-py3,-py3-stable-abi>") + SWIG_FLAGS $<$:-py3-stable-abi>) swig_add_library( obspython @@ -35,29 +35,26 @@ file( OUTPUT $<$:$/>obspython.h CONTENT "#pragma once\n\n#define PYTHON_LIB \"$\"\n") -target_include_directories(obspython PRIVATE "$<$:${CMAKE_CURRENT_BINARY_DIR}/$>") +target_include_directories( + obspython PRIVATE "$<$:${CMAKE_CURRENT_BINARY_DIR}/$>" + "$<$:$>") -list(APPEND _SWIG_DEFINITIONS "SWIG_TYPE_TABLE=obspython" "Py_ENABLE_SHARED=1" "SWIG_PYTHON_INTERPRETER_NO_DEBUG") +target_compile_options( + obspython + PRIVATE $<$:/wd4100> + $<$:/wd4197> + $<$:-Wno-unused-parameter> + $<$:-Wno-macro-redefined> + $<$:-Wno-unreachable-code>) target_compile_definitions(obspython PRIVATE SWIG_TYPE_TABLE=obspython Py_ENABLE_SHARED=1 SWIG_PYTHON_INTERPRETER_NO_DEBUG $<$:ENABLE_UI>) -target_link_libraries(obspython PRIVATE OBS::scripting OBS::cstrcache OBS::libobs - $<$:OBS::frontend-api>) - -if(OS_WINDOWS) - target_link_libraries(obspython PRIVATE Python::Python) - target_compile_options(obspython PRIVATE /wd4100 /wd4197) -elseif(OS_MACOS) - get_target_property(_python_include_directory Python::Python INTERFACE_INCLUDE_DIRECTORIES) - target_include_directories(obspython PRIVATE ${_python_include_directory}) - target_compile_options(obspython PRIVATE -Wno-unused-parameter -Wno-macro-redefined -Wno-unreachable-code) - target_link_options(obspython PUBLIC LINKER:-undefined,dynamic_lookup) - - set_property(TARGET obspython PROPERTY XCODE_ATTRIBUTE_STRIP_STYLE non-global) -elseif(OS_LINUX OR OS_FREEBSD) - target_link_libraries(obspython PRIVATE Python::Python) -endif() +target_link_libraries( + obspython PRIVATE OBS::cstrcache OBS::libobs OBS::scripting $<$:OBS::frontend-api> + $<$>:Python::Python>) + +target_link_options(obspython PRIVATE $<$:LINKER:-undefined,dynamic_lookup>) if(MSVC OR XCODE) add_custom_command( @@ -74,4 +71,6 @@ set_property( PROPERTY SWIG_COMPILE_DEFINITIONS "SWIG_TYPE_TABLE=obspython" "Py_ENABLE_SHARED=1" "SWIG_PYTHON_INTERPRETER_NO_DEBUG" "$<$:ENABLE_UI>" "$<$:MS_NO_COREDLL>") -set_target_properties_obs(obspython PROPERTIES FOLDER scripting PREFIX "_") +# cmake-format: off +set_target_properties_obs(obspython PROPERTIES FOLDER scripting PREFIX "_" XCODE_ATTRIBUTE_STRIP_STYLE non-global) +# cmake-format: on diff --git a/deps/opts-parser/CMakeLists.txt b/deps/opts-parser/CMakeLists.txt index a87ee641e7410b..4248de2cc53414 100644 --- a/deps/opts-parser/CMakeLists.txt +++ b/deps/opts-parser/CMakeLists.txt @@ -1,9 +1,15 @@ cmake_minimum_required(VERSION 3.22...3.25) -add_library(opts-parser INTERFACE) +add_library(opts-parser OBJECT) add_library(OBS::opts-parser ALIAS opts-parser) -target_sources(opts-parser INTERFACE opts-parser.c opts-parser.h) -target_include_directories(opts-parser INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") +target_sources( + opts-parser + PRIVATE opts-parser.c + PUBLIC opts-parser.h) -target_link_libraries(opts-parser INTERFACE OBS::libobs) +target_include_directories(opts-parser PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") + +target_link_libraries(opts-parser PUBLIC OBS::libobs) + +set_target_properties(opts-parser PROPERTIES FOLDER deps) diff --git a/deps/uthash/CMakeLists.txt b/deps/uthash/CMakeLists.txt index aecb0d74e49a58..c82ba4b5430363 100644 --- a/deps/uthash/CMakeLists.txt +++ b/deps/uthash/CMakeLists.txt @@ -5,4 +5,4 @@ add_library(OBS::uthash ALIAS uthash) target_sources(uthash INTERFACE uthash/uthash.h) -set_target_properties(uthash PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}") +target_include_directories(uthash INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/deps/w32-pthreads/CMakeLists.txt b/deps/w32-pthreads/CMakeLists.txt index 3b7e26fc47a7b6..d6ee0aa656f46a 100644 --- a/deps/w32-pthreads/CMakeLists.txt +++ b/deps/w32-pthreads/CMakeLists.txt @@ -5,8 +5,11 @@ legacy_check() add_library(w32-pthreads SHARED EXCLUDE_FROM_ALL ) add_library(OBS::w32-pthreads ALIAS w32-pthreads) -target_sources(w32-pthreads PRIVATE implement.h pthread.c pthread.h sched.h semaphore.h w32-pthreads.rc) +target_sources(w32-pthreads PRIVATE # cmake-format: sortable + implement.h pthread.c pthread.h sched.h semaphore.h w32-pthreads.rc) + target_compile_definitions(w32-pthreads PRIVATE __CLEANUP_C PTW32_BUILD) + target_include_directories(w32-pthreads PUBLIC "$") configure_file(cmake/windows/obs-module.rc.in w32-pthreads.rc) @@ -17,4 +20,5 @@ set_property( TARGET w32-pthreads APPEND PROPERTY PUBLIC_HEADER pthread.h sched.h) + target_export(w32-pthreads) diff --git a/libobs-d3d11/CMakeLists.txt b/libobs-d3d11/CMakeLists.txt index a5148cc122bcd7..a05dde6a769f0f 100644 --- a/libobs-d3d11/CMakeLists.txt +++ b/libobs-d3d11/CMakeLists.txt @@ -25,9 +25,9 @@ target_sources( configure_file(cmake/windows/obs-module.rc.in libobs-d3d11.rc) target_sources(libobs-d3d11 PRIVATE libobs-d3d11.rc) -target_compile_options(libobs-d3d11 PRIVATE /wd4595) + target_compile_definitions( - libobs-d3d11 PRIVATE "$<$:USE_GPU_PRIORITY>" + libobs-d3d11 PRIVATE $<$:USE_GPU_PRIORITY> "$,GPU_PRIORITY_VAL=${GPU_PRIORITY_VAL},GPU_PRIORITY_VAL=0>") target_link_libraries(libobs-d3d11 PRIVATE OBS::libobs d3d9 d3d11 d3dcompiler dxgi shcore) @@ -39,5 +39,6 @@ set_target_properties_obs( libobs-d3d11 PROPERTIES FOLDER core VERSION 0 - SOVERSION ${OBS_VERSION_MAJOR}) + SOVERSION ${OBS_VERSION_MAJOR} + COMPILE_WARNING_AS_ERROR FALSE) # cmake-format: on diff --git a/libobs-opengl/CMakeLists.txt b/libobs-opengl/CMakeLists.txt index 7ee9478ea21e6d..0bb838747d880a 100644 --- a/libobs-opengl/CMakeLists.txt +++ b/libobs-opengl/CMakeLists.txt @@ -9,9 +9,31 @@ if(NOT TARGET OBS::glad) add_subdirectory("${CMAKE_SOURCE_DIR}/deps/glad" "${CMAKE_BINARY_DIR}/deps/glad") endif() +if(OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) + find_package(X11 REQUIRED) + # cmake-format: off + find_package(xcb REQUIRED xcb) + # cmake-format: on + find_package(x11-xcb REQUIRED) + + if(ENABLE_WAYLAND) + find_package(OpenGL REQUIRED EGL) + find_package(Wayland REQUIRED) + endif() +endif() + target_sources( libobs-opengl - PRIVATE gl-helpers.c + PRIVATE # cmake-format: sortable + $<$,$>:gl-wayland-egl.c> + $<$:gl-cocoa.m> + $<$:gl-egl-common.c> + $<$:gl-nix.c> + $<$:gl-x11-egl.c> + $<$:gl-windows.c> + gl-helpers.c gl-helpers.h gl-indexbuffer.c gl-shader.c @@ -26,51 +48,33 @@ target_sources( gl-vertexbuffer.c gl-zstencil.c) -target_link_libraries(libobs-opengl PRIVATE OBS::libobs OBS::glad) - -if(OS_WINDOWS) - configure_file(cmake/windows/obs-module.rc.in libobs-opengl.rc) - - target_sources(libobs-opengl PRIVATE gl-windows.c libobs-opengl.rc) -elseif(OS_MACOS) - find_library(COCOA Cocoa) - find_library(IOSURF IOSurface) +target_compile_options(libobs-opengl PRIVATE $<$:-Wno-strict-prototypes>) - target_sources(libobs-opengl PRIVATE gl-cocoa.m) - target_compile_definitions(libobs-opengl PRIVATE GL_SILENCE_DEPRECATION) - target_compile_options(libobs-opengl PRIVATE -Wno-strict-prototypes) +target_compile_definitions(libobs-opengl PRIVATE $<$:GL_SILENCE_DEPRECATION>) - target_link_libraries(libobs-opengl PRIVATE ${COCOA} ${IOSURF}) -elseif(OS_LINUX OR OS_FREEBSD) - find_package(X11 REQUIRED) - find_package( - xcb - COMPONENTS xcb - REQUIRED) - find_package(x11-xcb REQUIRED) - - target_sources(libobs-opengl PRIVATE gl-egl-common.c gl-nix.c gl-x11-egl.c) - target_link_libraries(libobs-opengl PRIVATE xcb::xcb X11::x11-xcb) - - if(ENABLE_WAYLAND) - find_package( - OpenGL - COMPONENTS EGL - REQUIRED) - - find_package(Wayland REQUIRED) - - target_sources(libobs-opengl PRIVATE gl-wayland-egl.c) - target_link_libraries(libobs-opengl PRIVATE OpenGL::EGL Wayland::EGL) - endif() +target_link_libraries( + libobs-opengl + PRIVATE OBS::libobs + OBS::glad + "$<$:$>" + "$<$:$>" + $<$:xcb::xcb> + $<$:X11::x11-xcb> + $<$,$>:OpenGL::EGL> + $<$,$>:Wayland::EGL>) +if(OS_WINDOWS) + configure_file(cmake/windows/obs-module.rc.in libobs-opengl.rc) + target_sources(libobs-opengl PRIVATE libobs-opengl.rc) endif() target_enable_feature(libobs "OpenGL renderer") +# cmake-format: off set_target_properties_obs( libobs-opengl PROPERTIES FOLDER core VERSION 0 PREFIX "" SOVERSION "${OBS_VERSION_MAJOR}") +# cmake-format: on diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index 6e67966a72a744..d46a830c209171 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -2,28 +2,43 @@ cmake_minimum_required(VERSION 3.22...3.25) legacy_check() +include(cmake/obs-version.cmake) + +find_package(Threads REQUIRED) + # cmake-format: off -add_library(libobs-version STATIC EXCLUDE_FROM_ALL) -add_library(OBS::libobs-version ALIAS libobs-version) -# cmake-format: on -configure_file(obsversion.c.in obsversion.c @ONLY) -target_sources(libobs-version PRIVATE obsversion.c obsversion.h) -set_property(TARGET libobs-version PROPERTY FOLDER core) +if(OS_WINDOWS OR OS_MACOS) + set(ffmpeg_version 6) +else() + set(ffmpeg_version 4.4) +endif() -add_library(libobs SHARED) -add_library(OBS::libobs ALIAS libobs) +find_package( + FFmpeg ${ffmpeg_version} + REQUIRED avformat + avutil + swscale + swresample + OPTIONAL_COMPONENTS avcodec) +# cmake-format: on -find_package(Threads REQUIRED) -find_package(FFmpeg REQUIRED avformat avutil swscale swresample OPTIONAL_COMPONENTS avcodec) find_package(ZLIB REQUIRED) if(ENABLE_UI) - find_qt(COMPONENTS Core) + find_package(Qt6 REQUIRED Core) endif() find_package(jansson REQUIRED) -add_subdirectory("${CMAKE_SOURCE_DIR}/deps/libcaption" "${CMAKE_BINARY_DIR}/deps/libcaption") -add_subdirectory("${CMAKE_SOURCE_DIR}/deps/uthash" "${CMAKE_BINARY_DIR}/deps/uthash") +if(NOT TARGET OBS::caption) + add_subdirectory("${CMAKE_SOURCE_DIR}/deps/libcaption" "${CMAKE_BINARY_DIR}/deps/libcaption") +endif() + +if(NOT TARGET OBS::uthash) + add_subdirectory("${CMAKE_SOURCE_DIR}/deps/uthash" "${CMAKE_BINARY_DIR}/deps/uthash") +endif() + +add_library(libobs SHARED) +add_library(OBS::libobs ALIAS libobs) target_sources( libobs @@ -224,6 +239,7 @@ target_sources( graphics/vec4.h) target_compile_features(libobs PUBLIC cxx_std_17) + target_compile_definitions( libobs PRIVATE IS_LIBOBS @@ -250,13 +266,15 @@ elseif(OS_MACOS) include(cmake/os-macos.cmake) elseif(OS_LINUX) include(cmake/os-linux.cmake) -elseif(OS_FREEBSD) +elseif(OS_FREEBSD OR OS_OPENBSD) include(cmake/os-freebsd.cmake) endif() configure_file(obsconfig.h.in "${CMAKE_BINARY_DIR}/config/obsconfig.h" @ONLY) + target_include_directories(libobs PUBLIC "$" "$") + target_compile_definitions(libobs PUBLIC HAVE_OBSCONFIG_H) set(public_headers diff --git a/libobs/cmake/obs-version.cmake b/libobs/cmake/obs-version.cmake new file mode 100644 index 00000000000000..01a4d73cf986da --- /dev/null +++ b/libobs/cmake/obs-version.cmake @@ -0,0 +1,13 @@ +add_library(libobs-version OBJECT) +add_library(OBS::libobs-version ALIAS libobs-version) + +configure_file(obsversion.c.in obsversion.c @ONLY) + +target_sources( + libobs-version + PRIVATE obsversion.c + PUBLIC obsversion.h) + +target_include_directories(libobs-version PUBLIC "$") + +set_property(TARGET libobs-version PROPERTY FOLDER core) diff --git a/libobs/cmake/os-freebsd.cmake b/libobs/cmake/os-freebsd.cmake index b5c6cd259f2f7c..42d4e40bc2aecd 100644 --- a/libobs/cmake/os-freebsd.cmake +++ b/libobs/cmake/os-freebsd.cmake @@ -1,24 +1,28 @@ find_package(X11 REQUIRED) find_package(x11-xcb REQUIRED) # cmake-format: off -find_package(xcb OPTIONAL_COMPONENTS xcb-xinput QUIET) +find_package(xcb REQUIRED xcb OPTIONAL_COMPONENTS xcb-xinput) # cmake-format: on find_package(gio) find_package(Sysinfo REQUIRED) target_sources( libobs - PRIVATE obs-nix.c + PRIVATE # cmake-format: sortable obs-nix-platform.c obs-nix-platform.h obs-nix-x11.c + obs-nix.c util/pipe-posix.c util/platform-nix.c util/threading-posix.c util/threading-posix.h) -target_compile_definitions(libobs PRIVATE $<$,$>:ENABLE_DARRAY_TYPE_TEST>) + +target_compile_definitions(libobs PRIVATE $<$:ENABLE_DARRAY_TYPE_TEST> + $<$:ENABLE_DARRAY_TYPE_TEST>) target_link_libraries(libobs PRIVATE X11::x11-xcb xcb::xcb Sysinfo::Sysinfo) + if(TARGET xcb::xcb-xinput) target_link_libraries(libobs PRIVATE xcb::xcb-xinput) endif() @@ -28,8 +32,11 @@ if(ENABLE_PULSEAUDIO) target_sources( libobs - PRIVATE audio-monitoring/pulse/pulseaudio-enum-devices.c audio-monitoring/pulse/pulseaudio-monitoring-available.c - audio-monitoring/pulse/pulseaudio-output.c audio-monitoring/pulse/pulseaudio-wrapper.c + PRIVATE # cmake-format: sortable + audio-monitoring/pulse/pulseaudio-enum-devices.c + audio-monitoring/pulse/pulseaudio-monitoring-available.c + audio-monitoring/pulse/pulseaudio-output.c + audio-monitoring/pulse/pulseaudio-wrapper.c audio-monitoring/pulse/pulseaudio-wrapper.h) target_link_libraries(libobs PRIVATE PulseAudio::PulseAudio) diff --git a/libobs/cmake/os-linux.cmake b/libobs/cmake/os-linux.cmake index 9aa825f4c1b175..ab3d4f54838e1c 100644 --- a/libobs/cmake/os-linux.cmake +++ b/libobs/cmake/os-linux.cmake @@ -2,24 +2,27 @@ find_package(LibUUID REQUIRED) find_package(X11 REQUIRED) find_package(x11-xcb REQUIRED) # cmake-format: off -find_package(xcb COMPONENTS xcb OPTIONAL_COMPONENTS xcb-xinput QUIET) +find_package(xcb REQUIRED xcb OPTIONAL_COMPONENTS xcb-xinput) # cmake-format: on find_package(gio) target_sources( libobs - PRIVATE obs-nix.c + PRIVATE # cmake-format: sortable obs-nix-platform.c obs-nix-platform.h obs-nix-x11.c + obs-nix.c util/pipe-posix.c util/platform-nix.c util/threading-posix.c util/threading-posix.h) -target_compile_definitions(libobs PRIVATE USE_XDG $<$:ENABLE_DARRAY_TYPE_TEST>) +target_compile_definitions(libobs PRIVATE USE_XDG $<$:ENABLE_DARRAY_TYPE_TEST> + $<$:ENABLE_DARRAY_TYPE_TEST>) target_link_libraries(libobs PRIVATE X11::x11-xcb xcb::xcb LibUUID::LibUUID ${CMAKE_DL_LIBS}) + if(TARGET xcb::xcb-xinput) target_link_libraries(libobs PRIVATE xcb::xcb-xinput) endif() @@ -29,8 +32,11 @@ if(ENABLE_PULSEAUDIO) target_sources( libobs - PRIVATE audio-monitoring/pulse/pulseaudio-enum-devices.c audio-monitoring/pulse/pulseaudio-output.c - audio-monitoring/pulse/pulseaudio-monitoring-available.c audio-monitoring/pulse/pulseaudio-wrapper.c + PRIVATE # cmake-format: sortable + audio-monitoring/pulse/pulseaudio-enum-devices.c + audio-monitoring/pulse/pulseaudio-monitoring-available.c + audio-monitoring/pulse/pulseaudio-output.c + audio-monitoring/pulse/pulseaudio-wrapper.c audio-monitoring/pulse/pulseaudio-wrapper.h) target_link_libraries(libobs PRIVATE PulseAudio::PulseAudio) diff --git a/libobs/cmake/os-macos.cmake b/libobs/cmake/os-macos.cmake index ab8d559c658462..7877236c08debd 100644 --- a/libobs/cmake/os-macos.cmake +++ b/libobs/cmake/os-macos.cmake @@ -1,28 +1,30 @@ target_link_libraries( libobs - PRIVATE "$" - "$" + PRIVATE # cmake-format: sortable + "$" "$" "$" - "$" - "$" - "$") + "$" + "$" + "$" + "$") target_sources( libobs - PRIVATE obs-cocoa.m + PRIVATE # cmake-format: sortable audio-monitoring/osx/coreaudio-enum-devices.c audio-monitoring/osx/coreaudio-monitoring-available.c audio-monitoring/osx/coreaudio-output.c audio-monitoring/osx/mac-helpers.h + obs-cocoa.m + util/apple/cfstring-utils.h util/pipe-posix.c util/platform-cocoa.m util/platform-nix.c util/threading-posix.c - util/threading-posix.h - util/apple/cfstring-utils.h) + util/threading-posix.h) target_compile_options(libobs PUBLIC -Wno-strict-prototypes -Wno-shorten-64-to-32) -set_property(SOURCE util/platform-cocoa.m obs-cocoa.m PROPERTY COMPILE_FLAGS -fobjc-arc) +set_property(SOURCE obs-cocoa.m util/platform-cocoa.m PROPERTY COMPILE_FLAGS -fobjc-arc) set_property(TARGET libobs PROPERTY FRAMEWORK TRUE) diff --git a/libobs/cmake/os-windows.cmake b/libobs/cmake/os-windows.cmake index 04500d1b04cf8c..a46e68fd08ebcb 100644 --- a/libobs/cmake/os-windows.cmake +++ b/libobs/cmake/os-windows.cmake @@ -17,13 +17,14 @@ target_include_directories(obs-winhandle INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}" target_sources( libobs - PRIVATE libobs.rc - obs-win-crash-handler.c - obs-windows.c + PRIVATE # cmake-format: sortable audio-monitoring/win32/wasapi-enum-devices.c audio-monitoring/win32/wasapi-monitoring-available.c audio-monitoring/win32/wasapi-output.c audio-monitoring/win32/wasapi-output.h + libobs.rc + obs-win-crash-handler.c + obs-windows.c util/pipe-windows.c util/platform-windows.c util/threading-windows.c @@ -40,6 +41,7 @@ target_sources( util/windows/window-helpers.h) target_compile_options(libobs PRIVATE $<$:/EHc->) + set_source_files_properties(obs-win-crash-handler.c PROPERTIES COMPILE_DEFINITIONS OBS_VERSION="${OBS_VERSION_CANONICAL}") diff --git a/plugins/aja/CMakeLists.txt b/plugins/aja/CMakeLists.txt index 233ef23b579dea..1f427030c2100b 100644 --- a/plugins/aja/CMakeLists.txt +++ b/plugins/aja/CMakeLists.txt @@ -14,53 +14,68 @@ find_package(LibAJANTV2 REQUIRED) add_library(aja MODULE) add_library(OBS::aja ALIAS aja) +add_library(aja-support OBJECT) +add_library(OBS::aja-support ALIAS aja-support) + target_sources( - aja - PRIVATE main.cpp + aja-support + PRIVATE # cmake-format: sortable aja-card-manager.cpp aja-common.cpp - aja-common.hpp - aja-output.cpp - aja-enums.hpp - aja-output.hpp aja-presets.cpp - aja-presets.hpp aja-props.cpp - aja-props.hpp aja-routing.cpp - aja-routing.hpp - aja-source.cpp - aja-source.hpp aja-vpid-data.cpp - aja-vpid-data.hpp aja-widget-io.cpp - aja-widget-io.hpp - aja-card-manager.hpp - aja-ui-props.hpp + PUBLIC # cmake-format: sortable + aja-card-manager.hpp + aja-common.hpp + aja-enums.hpp + aja-presets.hpp + aja-props.hpp + aja-routing.hpp + aja-ui-props.hpp + aja-vpid-data.hpp + aja-widget-io.hpp) + +target_link_libraries(aja-support PUBLIC OBS::libobs AJA::LibAJANTV2) + +set_target_properties(aja-support PROPERTIES FOLDER plugins/aja POSITION_INDEPENDENT_CODE TRUE) + +target_sources( + aja + PRIVATE # cmake-format: sortable + aja-output.cpp + aja-output.hpp + aja-source.cpp + aja-source.hpp audio-repack.c audio-repack.h - audio-repack.hpp) + audio-repack.hpp + main.cpp) + +target_compile_options(aja-support PUBLIC $<$:-Wno-deprecated-declarations>) -target_link_libraries(aja PRIVATE OBS::libobs AJA::LibAJANTV2) +target_link_libraries( + aja + PRIVATE OBS::aja-support + $<$:netapi32.lib> + $<$:setupapi.lib> + $<$:shlwapi.lib> + $<$:winmm.lib> + $<$:ws2_32.lib> + "$<$:$>" + "$<$:$>" + "$<$:$>") + +target_link_options(aja PRIVATE $<$:/IGNORE:4099>) if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in win-aja.rc) target_sources(aja PRIVATE win-aja.rc) - - target_compile_options(aja PRIVATE /wd4996) - - target_link_libraries(aja PRIVATE ws2_32.lib setupapi.lib Winmm.lib netapi32.lib Shlwapi.lib) - target_link_options(aja PRIVATE /IGNORE:4099) - -elseif(OS_MACOS) - find_library(IOKIT IOKit) - find_library(COREFOUNDATION CoreFoundation) - find_library(APPKIT AppKit) - - target_link_libraries(aja PRIVATE ${IOKIT} ${COREFOUNDATION} ${APPKIT}) - target_compile_options(aja PRIVATE -Wno-deprecated-declarations -Wno-shorten-64-to-32) -elseif(OS_LINUX OR OS_FREEBSD) - target_compile_options(aja PRIVATE -Wno-deprecated-declarations) + set_property(TARGET aja PROPERTY COMPILE_WARNING_AS_ERROR FALSE) endif() -set_target_properties_obs(aja PROPERTIES FOLDER plugins PREFIX "") +# cmake-format: off +set_target_properties_obs(aja PROPERTIES FOLDER plugins/aja PREFIX "") +# cmake-format: on diff --git a/plugins/coreaudio-encoder/CMakeLists.txt b/plugins/coreaudio-encoder/CMakeLists.txt index 554b9d37b63032..fc2bc7c38b1364 100644 --- a/plugins/coreaudio-encoder/CMakeLists.txt +++ b/plugins/coreaudio-encoder/CMakeLists.txt @@ -13,20 +13,22 @@ endif() add_library(coreaudio-encoder MODULE) add_library(OBS::coreaudio-encoder ALIAS coreaudio-encoder) -target_sources(coreaudio-encoder PRIVATE encoder.cpp) -target_link_libraries(coreaudio-encoder PRIVATE OBS::libobs) +target_sources(coreaudio-encoder PRIVATE encoder.cpp $<$:windows-imports.h>) + +# cmake-format: off +target_link_libraries( + coreaudio-encoder + PRIVATE OBS::libobs + "$<$:$>" + "$<$:$>" + "$<$:$>") +# cmake-format: on if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in coreaudio-encoder.rc) - target_sources(coreaudio-encoder PRIVATE coreaudio-encoder.rc windows-imports.h) -elseif(OS_MACOS) - # cmake-format: off - target_link_libraries( - coreaudio-encoder - PRIVATE "$" - "$" - "$") - # cmake-format: on + target_sources(coreaudio-encoder PRIVATE coreaudio-encoder.rc) endif() +# cmake-format: off set_target_properties_obs(coreaudio-encoder PROPERTIES FOLDER plugins PREFIX "") +# cmake-format: on diff --git a/plugins/decklink/CMakeLists.txt b/plugins/decklink/CMakeLists.txt index e93c7c772262b4..9553319f7020a7 100644 --- a/plugins/decklink/CMakeLists.txt +++ b/plugins/decklink/CMakeLists.txt @@ -14,24 +14,50 @@ add_library(OBS::decklink ALIAS decklink) add_library(decklink-sdk INTERFACE) add_library(Decklink::SDK ALIAS decklink-sdk) +target_sources( + decklink-sdk + INTERFACE + # cmake-format: sortable + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPI.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIConfiguration.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIDeckControl.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIDiscovery.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIDispatch.cpp>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIModes.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIStreaming.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPITypes.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIVersion.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPI.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIConfiguration.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIDeckControl.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIDiscovery.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIDispatch.cpp>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIModes.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPITypes.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIVersion.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/LinuxCOM.h>" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/win/decklink-sdk/DeckLinkAPIVersion.h>") + target_sources( decklink - PRIVATE OBSVideoFrame.cpp - OBSVideoFrame.h + PRIVATE # cmake-format: sortable + $<$:mac/platform.cpp> + $<$:linux/platform.cpp> + $<$:win/platform.cpp> audio-repack.c audio-repack.h audio-repack.hpp const.h - decklink-device.cpp - decklink-device.hpp - decklink-devices.cpp - decklink-devices.hpp decklink-device-discovery.cpp decklink-device-discovery.hpp decklink-device-instance.cpp decklink-device-instance.hpp decklink-device-mode.cpp decklink-device-mode.hpp + decklink-device.cpp + decklink-device.hpp + decklink-devices.cpp + decklink-devices.hpp decklink-output.cpp decklink-source.cpp DecklinkBase.cpp @@ -40,56 +66,28 @@ target_sources( DecklinkInput.hpp DecklinkOutput.cpp DecklinkOutput.hpp + OBSVideoFrame.cpp + OBSVideoFrame.h platform.hpp plugin-main.cpp util.cpp util.hpp) -target_link_libraries(decklink PRIVATE OBS::libobs OBS::caption Decklink::SDK) +target_compile_definitions(decklink PRIVATE $<$:NOMINMAX>) + +target_link_libraries(decklink PRIVATE OBS::libobs OBS::caption Decklink::SDK + "$<$:$>") if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in win-decklink.rc) - target_compile_definitions(decklink PRIVATE NOMINMAX) - target_sources(decklink PRIVATE win/platform.cpp win-decklink.rc) + target_sources(decklink PRIVATE win-decklink.rc) include(idlfilehelper) target_add_idl_files(decklink win/decklink-sdk/DeckLinkAPI.idl) - + set_source_files_properties(win/decklink-sdk/DeckLinkAPIVersion.h PROPERTIES GENERATED TRUE) target_sources(decklink-sdk INTERFACE win/decklink-sdk/DeckLinkAPIVersion.h) - -elseif(OS_MACOS) - find_library(COREFOUNDATION CoreFoundation) - mark_as_advanced(COREFOUNDATION) - - target_sources(decklink PRIVATE mac/platform.cpp) - target_compile_options(decklink PRIVATE -Wno-shorten-64-to-32) - target_link_libraries(decklink PRIVATE ${COREFOUNDATION}) - - target_sources( - decklink-sdk - INTERFACE mac/decklink-sdk/DeckLinkAPIDispatch.cpp - mac/decklink-sdk/DeckLinkAPI.h - mac/decklink-sdk/DeckLinkAPIConfiguration.h - mac/decklink-sdk/DeckLinkAPIDeckControl.h - mac/decklink-sdk/DeckLinkAPIDiscovery.h - mac/decklink-sdk/DeckLinkAPIModes.h - mac/decklink-sdk/DeckLinkAPIStreaming.h - mac/decklink-sdk/DeckLinkAPITypes.h - mac/decklink-sdk/DeckLinkAPIVersion.h) -elseif(OS_LINUX OR OS_FREEBSD) - target_sources(decklink PRIVATE linux/platform.cpp) - - target_sources( - decklink-sdk - INTERFACE linux/decklink-sdk/DeckLinkAPIDispatch.cpp - linux/decklink-sdk/DeckLinkAPI.h - linux/decklink-sdk/DeckLinkAPIConfiguration.h - linux/decklink-sdk/DeckLinkAPIDeckControl.h - linux/decklink-sdk/DeckLinkAPIDiscovery.h - linux/decklink-sdk/DeckLinkAPIModes.h - linux/decklink-sdk/DeckLinkAPITypes.h - linux/decklink-sdk/DeckLinkAPIVersion.h - linux/decklink-sdk/LinuxCOM.h) endif() +# cmake-format: off set_target_properties_obs(decklink PROPERTIES FOLDER plugins/decklink PREFIX "") +# cmake-format: on diff --git a/plugins/image-source/CMakeLists.txt b/plugins/image-source/CMakeLists.txt index a7682454e41620..430952fbe77ca4 100644 --- a/plugins/image-source/CMakeLists.txt +++ b/plugins/image-source/CMakeLists.txt @@ -7,13 +7,13 @@ add_library(OBS::image-source ALIAS image-source) target_sources(image-source PRIVATE color-source.c image-source.c obs-slideshow.c) -target_link_libraries(image-source PRIVATE OBS::libobs) +target_link_libraries(image-source PRIVATE OBS::libobs $<$:OBS::w32-pthreads>) if(OS_WINDOWS) - target_link_libraries(image-source PRIVATE OBS::w32-pthreads) - configure_file(cmake/windows/obs-module.rc.in image-source.rc) target_sources(image-source PRIVATE image-source.rc) endif() +# cmake-format: off set_target_properties_obs(image-source PROPERTIES FOLDER plugins PREFIX "") +# cmake-format: on diff --git a/plugins/mac-avcapture/CMakeLists.txt b/plugins/mac-avcapture/CMakeLists.txt index edea3dc5f8acf1..472934273f526e 100644 --- a/plugins/mac-avcapture/CMakeLists.txt +++ b/plugins/mac-avcapture/CMakeLists.txt @@ -5,10 +5,6 @@ add_library(OBS::avcapture ALIAS mac-avcapture) target_sources(mac-avcapture PRIVATE av-capture.mm left-right.hpp scope-guard.hpp) -if(NOT XCODE) - set_source_files_properties(av-capture.mm PROPERTIES COMPILE_FLAGS -fobjc-arc) -endif() - target_link_libraries( mac-avcapture PRIVATE OBS::libobs @@ -19,6 +15,7 @@ target_link_libraries( "$" "$") +# cmake-format: off set_target_properties_obs( mac-avcapture PROPERTIES FOLDER plugins @@ -26,3 +23,4 @@ set_target_properties_obs( XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES XCODE_ATTRIBUTE_CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION YES XCODE_ATTRIBUTE_GCC_WARN_SHADOW YES) +# cmake-format: on diff --git a/plugins/mac-virtualcam/src/camera-extension/CMakeLists.txt b/plugins/mac-virtualcam/src/camera-extension/CMakeLists.txt index 4ff8f6a4a67719..a25dece634e178 100644 --- a/plugins/mac-virtualcam/src/camera-extension/CMakeLists.txt +++ b/plugins/mac-virtualcam/src/camera-extension/CMakeLists.txt @@ -13,7 +13,7 @@ foreach(_uuid IN ITEMS VIRTUALCAM_DEVICE_UUID VIRTUALCAM_SOURCE_UUID VIRTUALCAM_ endif() endforeach() -project(mac-camera-extension LANGUAGES Swift) +enable_language(Swift) set(CMAKE_OSX_DEPLOYMENT_TARGET 13.0) diff --git a/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt b/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt index 7b5306b9e2add8..5c9258d4308d43 100644 --- a/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt +++ b/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt @@ -5,27 +5,24 @@ add_library(OBS::dal-plugin ALIAS obs-dal-plugin) target_sources( obs-dal-plugin - PRIVATE OBSDALPlugIn.mm - OBSDALPlugIn.h - OBSDALPlugInMain.mm - OBSDALPlugInInterface.mm - OBSDALPlugInInterface.h - OBSDALObjectStore.mm - OBSDALObjectStore.h - OBSDALDevice.mm + PRIVATE # cmake-format: sortable + CMSampleBufferUtils.h + CMSampleBufferUtils.mm + Defines.h + Logging.h OBSDALDevice.h - OBSDALMachClient.mm + OBSDALDevice.mm OBSDALMachClient.h - CMSampleBufferUtils.mm - OBSDALStream.mm + OBSDALMachClient.mm + OBSDALObjectStore.h + OBSDALObjectStore.mm + OBSDALPlugIn.h + OBSDALPlugIn.mm + OBSDALPlugInInterface.h + OBSDALPlugInInterface.mm + OBSDALPlugInMain.mm OBSDALStream.h - CMSampleBufferUtils.h - Defines.h - Logging.h) - -if(NOT XCODE) - target_compile_options(obs-dal-plugin PRIVATE -fobjc-arc -fobjc-weak) -endif() + OBSDALStream.mm) set(_placeholder_location "${CMAKE_CURRENT_SOURCE_DIR}/../common/data/placeholder.png") diff --git a/plugins/mac-virtualcam/src/obs-plugin/CMakeLists.txt b/plugins/mac-virtualcam/src/obs-plugin/CMakeLists.txt index a17df8dc29d519..d6236fe3bb658f 100644 --- a/plugins/mac-virtualcam/src/obs-plugin/CMakeLists.txt +++ b/plugins/mac-virtualcam/src/obs-plugin/CMakeLists.txt @@ -6,10 +6,6 @@ add_library(OBS::virtualcam ALIAS mac-virtualcam) target_sources(mac-virtualcam PRIVATE Defines.h plugin-main.mm OBSDALMachServer.mm OBSDALMachServer.h) target_compile_options(mac-virtualcam PRIVATE -fmodules -fcxx-modules) -if(NOT XCODE) - target_compile_options(mac-virtualcam PRIVATE -fobjc-arc -fobjc-weak) -endif() - target_link_libraries(mac-virtualcam PRIVATE OBS::mach-protocol OBS::libobs OBS::frontend-api) # cmake-format: off diff --git a/plugins/obs-ffmpeg/CMakeLists.txt b/plugins/obs-ffmpeg/CMakeLists.txt index fa823dd09addb9..77c5ad8e4950bb 100644 --- a/plugins/obs-ffmpeg/CMakeLists.txt +++ b/plugins/obs-ffmpeg/CMakeLists.txt @@ -5,23 +5,7 @@ legacy_check() option(ENABLE_FFMPEG_LOGGING "Enables obs-ffmpeg logging" OFF) option(ENABLE_NEW_MPEGTS_OUTPUT "Use native SRT/RIST mpegts output" ON) -find_package( - FFmpeg REQUIRED - COMPONENTS avcodec - avfilter - avdevice - avutil - swscale - avformat - swresample) - -if(NOT TARGET OBS::media-playback) - add_subdirectory("${CMAKE_SOURCE_DIR}/deps/media-playback" "${CMAKE_BINARY_DIR}/deps/media-playback") -endif() - -if(NOT TARGET OBS::opts-parser) - add_subdirectory("${CMAKE_SOURCE_DIR}/deps/opts-parser" "${CMAKE_BINARY_DIR}/deps/opts-parser") -endif() +include(cmake/dependencies.cmake) add_library(obs-ffmpeg MODULE) add_library(OBS::ffmpeg ALIAS obs-ffmpeg) @@ -32,6 +16,18 @@ target_sources( obs-ffmpeg PRIVATE # cmake-format: sortable $<$:obs-ffmpeg-logging.c> + $<$:obs-ffmpeg-mpegts.c> + $<$:obs-ffmpeg-rist.h> + $<$:obs-ffmpeg-srt.h> + $<$:obs-ffmpeg-url.h> + $<$:obs-ffmpeg-vaapi.c> + $<$:vaapi-utils.c> + $<$:vaapi-utils.h> + $<$:obs-nvenc-helpers.c> + $<$:obs-nvenc.c> + $<$:obs-nvenc.h> + $<$:texture-amf-opts.hpp> + $<$:texture-amf.cpp> obs-ffmpeg-audio-encoders.c obs-ffmpeg-av1.c obs-ffmpeg-compat.h @@ -47,7 +43,8 @@ target_sources( obs-ffmpeg.c) target_compile_options(obs-ffmpeg PRIVATE $<$:-Wno-shorten-64-to-32>) -target_compile_definitions(obs-ffmpeg PRIVATE $<$:ENABLE_FFMPEG_LOGGING>) +target_compile_definitions(obs-ffmpeg PRIVATE $<$:ENABLE_FFMPEG_LOGGING> + $<$:NEW_MPEGTS_OUTPUT>) target_link_libraries( obs-ffmpeg @@ -60,55 +57,21 @@ target_link_libraries( FFmpeg::avdevice FFmpeg::avutil FFmpeg::swscale - FFmpeg::swresample) - -if(ENABLE_NEW_MPEGTS_OUTPUT) - find_package(Librist QUIET) - find_package(Libsrt QUIET) - - foreach(_output_lib IN ITEMS Librist Libsrt) - if(NOT TARGET ${_output_lib}::${_output_lib}) - list(APPEND _error_messages "MPEGTS output library ${_output_lib} not found.") - endif() - endforeach() - - if(_error_messages) - list(JOIN "\n" _error_string _error_string) - message( - FATAL_ERROR - "${_error_string}\n Disable this error by setting ENABLE_NEW_MPEGTS_OUTPUT to OFF or providing the build system with required SRT and Rist libraries." - ) - endif() - - target_sources(obs-ffmpeg PRIVATE obs-ffmpeg-mpegts.c obs-ffmpeg-srt.h obs-ffmpeg-rist.h obs-ffmpeg-url.h) - target_link_libraries(obs-ffmpeg PRIVATE Librist::Librist Libsrt::Libsrt) - target_compile_definitions(obs-ffmpeg PRIVATE NEW_MPEGTS_OUTPUT) -endif() + FFmpeg::swresample + $<$:OBS::obs-nvenc-version> + $<$:OBS::w32-pthreads> + $<$:AMF::AMF> + $<$:FFnvcodec::FFnvcodec> + $<$:ws2_32> + $<$:Libva::va> + $<$:Libva::drm> + $<$:Libpci::pci> + $<$:Librist::Librist> + $<$:Libsrt::Libsrt>) if(OS_WINDOWS) - find_package(AMF 1.4.29 REQUIRED) - find_package(FFnvcodec 12 REQUIRED) - - add_library(obs-nvenc-version INTERFACE) - add_library(OBS::obs-nvenc-version ALIAS obs-nvenc-version) - target_sources(obs-nvenc-version INTERFACE obs-nvenc-ver.h) - target_include_directories(obs-nvenc-version INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") - - add_subdirectory(obs-amf-test) - add_subdirectory(obs-nvenc-test) - - target_link_libraries(obs-ffmpeg PRIVATE OBS::obs-nvenc-version OBS::w32-pthreads AMF::AMF FFnvcodec::FFnvcodec - ws2_32) - configure_file(cmake/windows/obs-module.rc.in obs-ffmpeg.rc) - target_sources(obs-ffmpeg PRIVATE obs-nvenc-helpers.c obs-nvenc.c obs-nvenc.h obs-ffmpeg.rc texture-amf-opts.hpp - texture-amf.cpp) -elseif(OS_LINUX OR OS_FREEBSD) - find_package(Libva REQUIRED) - find_package(Libpci REQUIRED) - - target_sources(obs-ffmpeg PRIVATE obs-ffmpeg-vaapi.c vaapi-utils.c vaapi-utils.h) - target_link_libraries(obs-ffmpeg PRIVATE Libva::va Libva::drm Libpci::pci) + target_sources(obs-ffmpeg PRIVATE obs-ffmpeg.rc) endif() # cmake-format: off diff --git a/plugins/obs-ffmpeg/cmake/dependencies.cmake b/plugins/obs-ffmpeg/cmake/dependencies.cmake new file mode 100644 index 00000000000000..6dacf7a514ed06 --- /dev/null +++ b/plugins/obs-ffmpeg/cmake/dependencies.cmake @@ -0,0 +1,63 @@ +# cmake-format: off +if(OS_WINDOWS OR OS_MACOS) + set(ffmpeg_version 6) +else() + set(ffmpeg_version 4.4) +endif() + +find_package( + FFmpeg ${ffmpeg_version} + REQUIRED avcodec + avfilter + avdevice + avutil + swscale + avformat + swresample) +# cmake-format: on + +if(NOT TARGET OBS::media-playback) + add_subdirectory("${CMAKE_SOURCE_DIR}/deps/media-playback" "${CMAKE_BINARY_DIR}/deps/media-playback") +endif() + +if(NOT TARGET OBS::opts-parser) + add_subdirectory("${CMAKE_SOURCE_DIR}/deps/opts-parser" "${CMAKE_BINARY_DIR}/deps/opts-parser") +endif() + +if(OS_WINDOWS) + find_package(AMF 1.4.29 REQUIRED) + find_package(FFnvcodec 12 REQUIRED) + + add_library(obs-nvenc-version INTERFACE) + add_library(OBS::obs-nvenc-version ALIAS obs-nvenc-version) + target_sources(obs-nvenc-version INTERFACE obs-nvenc-ver.h) + target_include_directories(obs-nvenc-version INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") + + add_subdirectory(obs-amf-test) + add_subdirectory(obs-nvenc-test) +elseif( + OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) + find_package(Libva REQUIRED) + find_package(Libpci REQUIRED) +endif() + +if(ENABLE_NEW_MPEGTS_OUTPUT) + find_package(Librist QUIET) + find_package(Libsrt QUIET) + + foreach(_output_lib IN ITEMS Librist Libsrt) + if(NOT TARGET ${_output_lib}::${_output_lib}) + list(APPEND _error_messages "MPEGTS output library ${_output_lib} not found.") + endif() + endforeach() + + if(_error_messages) + list(JOIN "\n" _error_string _error_string) + message( + FATAL_ERROR + "${_error_string}\n Disable this error by setting ENABLE_NEW_MPEGTS_OUTPUT to OFF or providing the build system with required SRT and Rist libraries." + ) + endif() +endif() diff --git a/plugins/obs-filters/CMakeLists.txt b/plugins/obs-filters/CMakeLists.txt index 22d79388c73727..4dd653ae3ff43f 100644 --- a/plugins/obs-filters/CMakeLists.txt +++ b/plugins/obs-filters/CMakeLists.txt @@ -7,39 +7,40 @@ add_library(OBS::filters ALIAS obs-filters) target_sources( obs-filters - PRIVATE obs-filters.c - color-correction-filter.c + PRIVATE # cmake-format: sortable async-delay-filter.c - gpu-delay.c - hdr-tonemap-filter.c - crop-filter.c - scale-filter.c - scroll-filter.c chroma-key-filter.c - color-key-filter.c + color-correction-filter.c color-grade-filter.c - sharpness-filter.c + color-key-filter.c + compressor-filter.c + crop-filter.c eq-filter.c + expander-filter.c gain-filter.c - noise-gate-filter.c - mask-filter.c + gpu-delay.c + hdr-tonemap-filter.c invert-audio-polarity.c - compressor-filter.c limiter-filter.c - expander-filter.c - luma-key-filter.c) + luma-key-filter.c + mask-filter.c + noise-gate-filter.c + obs-filters.c + scale-filter.c + scroll-filter.c + sharpness-filter.c) -target_link_libraries(obs-filters PRIVATE OBS::libobs) +target_link_libraries(obs-filters PRIVATE OBS::libobs $<$:OBS::w32-pthreads>) include(cmake/speexdsp.cmake) include(cmake/rnnoise.cmake) include(cmake/nvidia.cmake) if(OS_WINDOWS) - target_link_libraries(obs-filters PRIVATE OBS::w32-pthreads) - configure_file(cmake/windows/obs-module.rc.in obs-filters.rc) target_sources(obs-filters PRIVATE obs-filters.rc) endif() +# cmake-format: off set_target_properties_obs(obs-filters PROPERTIES FOLDER plugins PREFIX "") +# cmake-format: on diff --git a/plugins/obs-filters/cmake/rnnoise.cmake b/plugins/obs-filters/cmake/rnnoise.cmake index 5f1bf29db89fdb..3f72937984b9e5 100644 --- a/plugins/obs-filters/cmake/rnnoise.cmake +++ b/plugins/obs-filters/cmake/rnnoise.cmake @@ -1,46 +1,48 @@ option(ENABLE_RNNOISE "Enable building with RNNoise noise supression filter" ON) if(ENABLE_RNNOISE) - if(OS_WINDOWS OR OS_MACOS) - find_package(Librnnoise REQUIRED) + if(NOT OS_WINDOWS AND NOT OS_MACOS) + add_library(obs-rnnoise OBJECT) - target_sources(obs-filters PRIVATE noise-suppress-filter.c) - elseif(OS_LINUX OR OS_FREEBSD) - add_library( + target_sources( obs-rnnoise - INTERFACE - rnnoise/src/arch.h - rnnoise/src/celt_lpc.c - rnnoise/src/celt_lpc.h - rnnoise/src/common.h - rnnoise/src/denoise.c - rnnoise/src/kiss_fft.c - rnnoise/src/kiss_fft.h - rnnoise/src/opus_types.h - rnnoise/src/pitch.c - rnnoise/src/pitch.h - rnnoise/src/rnn_data.c - rnnoise/src/rnn_data.h - rnnoise/src/rnn_reader.c - rnnoise/src/rnn.c - rnnoise/src/rnn.h - rnnoise/src/tansig_table.h - rnnoise/src/_kiss_fft_guts.h - rnnoise/include/rnnoise.h) + PRIVATE # cmake-format: sortable + rnnoise/src/_kiss_fft_guts.h + rnnoise/src/arch.h + rnnoise/src/celt_lpc.c + rnnoise/src/celt_lpc.h + rnnoise/src/common.h + rnnoise/src/denoise.c + rnnoise/src/kiss_fft.c + rnnoise/src/kiss_fft.h + rnnoise/src/opus_types.h + rnnoise/src/pitch.c + rnnoise/src/pitch.h + rnnoise/src/rnn.c + rnnoise/src/rnn.h + rnnoise/src/rnn_data.c + rnnoise/src/rnn_data.h + rnnoise/src/rnn_reader.c + rnnoise/src/tansig_table.h + PUBLIC rnnoise/include/rnnoise.h) add_library(Librnnoise::Librnnoise ALIAS obs-rnnoise) - target_include_directories(obs-rnnoise INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/rnnoise/include") + target_include_directories(obs-rnnoise PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/rnnoise/include") - target_compile_definitions(obs-rnnoise INTERFACE COMPILE_OPUS) + target_compile_definitions(obs-rnnoise PUBLIC COMPILE_OPUS) - set_target_properties(obs-rnnoise PROPERTIES FOLDER plugins/obs-filters/rnnoise) - endif() + target_compile_options(obs-rnnoise PRIVATE -Wno-newline-eof -Wno-error=null-dereference) - target_compile_definitions(obs-filters PRIVATE LIBRNNOISE_ENABLED) + set_target_properties(obs-rnnoise PROPERTIES FOLDER plugins/obs-filters/rnnoise POSITION_INDEPENDENT_CODE TRUE) + else() + find_package(Librnnoise REQUIRED) + + target_sources(obs-filters PRIVATE noise-suppress-filter.c) + endif() target_link_libraries(obs-filters PRIVATE Librnnoise::Librnnoise) - target_enable_feature(obs-filters "RNNoise noise suppression" LIBRRNOISE_ENABLED HAS_NOISEREDUCTION) + target_enable_feature(obs-filters "RNNoise noise suppression" LIBRNNOISE_ENABLED HAS_NOISEREDUCTION) else() target_disable_feature(obs-filters "RNNoise noise suppression") endif() diff --git a/plugins/obs-outputs/CMakeLists.txt b/plugins/obs-outputs/CMakeLists.txt index cedc77da0f6195..a7286117212377 100644 --- a/plugins/obs-outputs/CMakeLists.txt +++ b/plugins/obs-outputs/CMakeLists.txt @@ -5,26 +5,21 @@ legacy_check() find_package(MbedTLS REQUIRED) find_package(ZLIB REQUIRED) +if(NOT TARGET happy-eyeballs) + add_subdirectory("${CMAKE_SOURCE_DIR}/deps/happy-eyeballs" "${CMAKE_BINARY_DIR}/deps/happy-eyeballs") +endif() + add_library(obs-outputs MODULE) add_library(OBS::outputs ALIAS obs-outputs) target_sources( obs-outputs - PRIVATE obs-outputs.c - obs-output-ver.h + PRIVATE # cmake-format: sortable + $<$:rtmp-hevc.c> + $<$:rtmp-hevc.h> flv-mux.c flv-mux.h flv-output.c - net-if.c - net-if.h - null-output.c - rtmp-helpers.h - rtmp-stream.c - rtmp-stream.h - rtmp-windows.c - rtmp-av1.c - rtmp-av1.h - utils.h librtmp/amf.c librtmp/amf.h librtmp/bytes.h @@ -41,34 +36,50 @@ target_sources( librtmp/rtmp.c librtmp/rtmp.h librtmp/rtmp_sys.h - "$<$:rtmp-hevc.c>" - "$<$:rtmp-hevc.h>") + net-if.c + net-if.h + null-output.c + obs-output-ver.h + obs-outputs.c + rtmp-av1.c + rtmp-av1.h + rtmp-helpers.h + rtmp-stream.c + rtmp-stream.h + rtmp-windows.c + utils.h) -if(NOT TARGET happy-eyeballs) - add_subdirectory("${CMAKE_SOURCE_DIR}/deps/happy-eyeballs" "${CMAKE_BINARY_DIR}/deps/happy-eyeballs") -endif() +target_compile_definitions(obs-outputs PRIVATE USE_MBEDTLS CRYPTO) -target_link_libraries(obs-outputs PRIVATE OBS::libobs OBS::happy-eyeballs MbedTLS::MbedTLS ZLIB::ZLIB) +target_compile_options( + obs-outputs + PRIVATE $<$:-Wno-comma> + $<$,$>:-Wno-error=unreachable-code>) -target_compile_definitions(obs-outputs PRIVATE USE_MBEDTLS CRYPTO) +target_link_libraries( + obs-outputs + PRIVATE OBS::libobs + OBS::happy-eyeballs + MbedTLS::MbedTLS + ZLIB::ZLIB + $<$:OBS::w32-pthreads> + $<$:crypt32> + $<$:iphlpapi> + $<$:winmm> + $<$:ws2_32> + "$<$:$>" + "$<$:$>") -if(OS_WINDOWS) - target_link_libraries(obs-outputs PRIVATE OBS::w32-pthreads ws2_32 winmm Iphlpapi crypt32) - target_link_options(obs-outputs PRIVATE /IGNORE:4098 /IGNORE:4099) +# Remove once jansson has been fixed on obs-deps +target_link_options(obs-outputs PRIVATE $<$:/IGNORE:4098>) +if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in obs-outputs.rc) - target_sources(obs-outputs PRIVATE obs-outputs.rc) -elseif(OS_MACOS) - target_compile_options(obs-outputs PRIVATE -Wno-comma) - # cmake-format: off - target_link_libraries( - obs-outputs - PRIVATE "$" - "$") - # cmake-format: on endif() include(cmake/ftl.cmake) -set_target_properties_obs(obs-outputs PROPERTIES FOLDER plugins PREFIX "") +# cmake-format: off +set_target_properties_obs(obs-outputs PROPERTIES FOLDER plugins/obs-outputs PREFIX "") +# cmake-format: on diff --git a/plugins/obs-outputs/cmake/ftl.cmake b/plugins/obs-outputs/cmake/ftl.cmake index 8cd16dc553d244..deb945853744dc 100644 --- a/plugins/obs-outputs/cmake/ftl.cmake +++ b/plugins/obs-outputs/cmake/ftl.cmake @@ -1,77 +1,65 @@ find_package(CURL REQUIRED) find_package(jansson REQUIRED) -add_library(ftl-sdk INTERFACE) +add_library(ftl-sdk OBJECT) add_library(OBS::ftl-sdk ALIAS ftl-sdk) -target_compile_definitions(ftl-sdk INTERFACE FTL_STATIC_COMPILE FTL_FOUND) +target_compile_definitions(ftl-sdk PUBLIC FTL_FOUND FTL_STATIC_COMPILE) -target_link_libraries(ftl-sdk INTERFACE jansson::jansson CURL::libcurl) +target_link_libraries(ftl-sdk PRIVATE jansson::jansson CURL::libcurl) target_sources( ftl-sdk - INTERFACE # cmake-format: sortable - ftl-sdk/libftl/ftl-sdk.c - ftl-sdk/libftl/ftl.h - ftl-sdk/libftl/ftl_helpers.c - ftl-sdk/libftl/ftl_private.h - ftl-sdk/libftl/gettimeofday/gettimeofday.c - ftl-sdk/libftl/handshake.c - ftl-sdk/libftl/hmac/hmac.c - ftl-sdk/libftl/hmac/hmac.h - ftl-sdk/libftl/hmac/sha2.c - ftl-sdk/libftl/hmac/sha2.h - ftl-sdk/libftl/ingest.c - ftl-sdk/libftl/logging.c - ftl-sdk/libftl/media.c - ftl-stream.c) - -target_include_directories(ftl-sdk INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl") - -if(OS_WINDOWS) - target_sources( - ftl-sdk INTERFACE ftl-sdk/libftl/gettimeofday/gettimeofday.c ftl-sdk/libftl/gettimeofday/gettimeofday.h - ftl-sdk/libftl/win32/socket.c ftl-sdk/libftl/win32/threads.c ftl-sdk/libftl/win32/threads.h) - - target_include_directories(ftl-sdk INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/win32") -else() - target_sources(ftl-sdk INTERFACE ftl-sdk/libftl/posix/socket.c ftl-sdk/libftl/posix/threads.c - ftl-sdk/libftl/posix/threads.h) + PRIVATE # cmake-format: sortable + $<$>:ftl-sdk/libftl/posix/socket.c> + $<$>:ftl-sdk/libftl/posix/threads.c> + $<$>:ftl-sdk/libftl/posix/threads.h> + $<$:ftl-sdk/libftl/win32/socket.c> + $<$:ftl-sdk/libftl/win32/threads.c> + $<$:ftl-sdk/libftl/win32/threads.h> + ftl-sdk/libftl/ftl-sdk.c + ftl-sdk/libftl/ftl_helpers.c + ftl-sdk/libftl/ftl_private.h + ftl-sdk/libftl/gettimeofday/gettimeofday.c + ftl-sdk/libftl/gettimeofday/gettimeofday.h + ftl-sdk/libftl/handshake.c + ftl-sdk/libftl/hmac/hmac.c + ftl-sdk/libftl/hmac/hmac.h + ftl-sdk/libftl/hmac/sha2.c + ftl-sdk/libftl/hmac/sha2.h + ftl-sdk/libftl/ingest.c + ftl-sdk/libftl/logging.c + ftl-sdk/libftl/media.c + PUBLIC ftl-sdk/libftl/ftl.h) + +target_compile_options( + ftl-sdk + PRIVATE $<$:-Wno-unused-parameter> + $<$:-Wno-unused-variable> + $<$:-Wno-sign-compare> + $<$:-Wno-pointer-sign> + $<$:-Wno-int-conversion> + $<$:-Wno-incompatible-function-pointer-types> + $<$:-Wno-implicit-int-conversion> + $<$:-Wno-shorten-64-to-32> + $<$:-Wno-macro-redefined> + $<$:-Wno-enum-conversion> + $<$:-Wno-extra> + $<$:-Wno-incompatible-pointer-types> + $<$:-Wno-builtin-macro-redefined>) + +target_include_directories( + ftl-sdk + PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl" + "$<$:${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/win32>" + "$<$>:${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/posix>") - target_include_directories(ftl-sdk INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/posix") +if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10) + target_compile_options(ftl-sdk PRIVATE -Wno-error=enum-conversion) endif() +target_sources(obs-outputs PRIVATE ftl-stream.c) target_link_libraries(obs-outputs PRIVATE ftl-sdk) - target_enable_feature(obs-outputs "FTL protocol support") -get_target_property(target_sources ftl-sdk INTERFACE_SOURCES) - -if(NOT CMAKE_C_COMPILER_ID STREQUAL "MSVC") - set(silence_ftl -Wno-unused-parameter -Wno-unused-variable -Wno-sign-compare -Wno-pointer-sign -Wno-int-conversion) - - if(CMAKE_C_COMPILER_ID MATCHES "(Apple)?Clang") - list( - APPEND - silence_ftl - -Wno-incompatible-function-pointer-types - -Wno-implicit-int-conversion - -Wno-shorten-64-to-32 - -Wno-macro-redefined - -Wno-enum-conversion) - elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU") - list(APPEND silence_ftl -Wno-extra -Wno-incompatible-pointer-types -Wno-int-conversion -Wno-builtin-macro-redefined) - endif() - - if((NOT CMAKE_C_COMPILER_ID STREQUAL "GNU") OR CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10) - list(APPEND silence_ftl -Wno-error=enum-conversion) - endif() - set_source_files_properties(${target_sources} PROPERTIES COMPILE_OPTIONS "${silence_ftl}") -endif() - -set(target_headers ${target_sources}) -list(FILTER target_sources INCLUDE REGEX ".+ftl-sdk/.+\\.(m|c[cp]?p?|swift)") -list(FILTER target_headers INCLUDE REGEX ".+ftl-sdk/.+\\.h(pp)?") - -source_group("ftl-sdk\\Source Files" FILES ${target_sources}) -source_group("ftl-sdk\\Header Files" FILES ${target_headers}) +set_target_properties(ftl-sdk PROPERTIES FOLDER plugins/obs-outputs) diff --git a/plugins/obs-qsv11/CMakeLists.txt b/plugins/obs-qsv11/CMakeLists.txt index a06a3df4082f5f..7a6f5d831aaed7 100644 --- a/plugins/obs-qsv11/CMakeLists.txt +++ b/plugins/obs-qsv11/CMakeLists.txt @@ -14,9 +14,17 @@ add_library(OBS::qsv11 ALIAS obs-qsv11) find_package(VPL 2.6 REQUIRED) +if(OS_LINUX) + find_package(Libva REQUIRED) +endif() + target_sources( obs-qsv11 PRIVATE # cmake-format: sortable + $<$:common_utils_linux.cpp> + $<$:common_directx11.cpp> + $<$:common_directx11.h> + $<$:common_utils_windows.cpp> common_utils.cpp common_utils.h obs-qsv11-plugin-main.c @@ -26,29 +34,27 @@ target_sources( QSV_Encoder_Internal.cpp QSV_Encoder_Internal.h) -target_link_libraries(obs-qsv11 PRIVATE OBS::libobs VPL::VPL) +target_compile_definitions(obs-qsv11 PRIVATE $<$:DX11_D3D>) -# cmake-format: off -set_target_properties_obs(obs-qsv11 PROPERTIES FOLDER plugins/obs-qsv11 PREFIX "") -# cmake-format: on +target_link_libraries( + obs-qsv11 + PRIVATE OBS::libobs + VPL::VPL + $<$:Libva::va> + $<$:Libva::drm> + $<$:d3d11> + $<$:dxgi> + $<$:dxguid>) + +target_link_options(obs-qsv11 PRIVATE $<$:/IGNORE:4099>) if(OS_WINDOWS) add_subdirectory(obs-qsv-test) configure_file(cmake/windows/obs-module.rc.in obs-qsv11.rc) target_sources(obs-qsv11 PRIVATE obs-qsv11.rc) - - target_compile_definitions(obs-qsv11 PRIVATE DX11_D3D) - - target_sources(obs-qsv11 PRIVATE # cmake-format: sortable - common_directx11.cpp common_directx11.h common_utils_windows.cpp) - - target_link_libraries(obs-qsv11 PRIVATE d3d11 dxgi dxguid) - target_link_options(obs-qsv11 PRIVATE /IGNORE:4099) -elseif(OS_LINUX) - find_package(Libva REQUIRED) - - target_sources(obs-qsv11 PRIVATE common_utils_linux.cpp) - - target_link_libraries(obs-qsv11 PRIVATE Libva::va Libva::drm) endif() + +# cmake-format: off +set_target_properties_obs(obs-qsv11 PROPERTIES FOLDER plugins/obs-qsv11 PREFIX "") +# cmake-format: on diff --git a/plugins/obs-qsv11/obs-qsv-test/CMakeLists.txt b/plugins/obs-qsv11/obs-qsv-test/CMakeLists.txt index a92034fc71e7d5..0d582e6ccbacfa 100644 --- a/plugins/obs-qsv11/obs-qsv-test/CMakeLists.txt +++ b/plugins/obs-qsv11/obs-qsv-test/CMakeLists.txt @@ -7,8 +7,11 @@ add_executable(obs-qsv-test) find_package(VPL 2.6 REQUIRED) target_sources(obs-qsv-test PRIVATE obs-qsv-test.cpp) + target_compile_definitions(obs-qsv-test PRIVATE "$<$:ENABLE_HEVC>") + target_link_libraries(obs-qsv-test d3d11 dxgi dxguid VPL::VPL OBS::COMutils) + target_link_options(obs-qsv-test PRIVATE /IGNORE:4099) # cmake-format: off diff --git a/plugins/obs-transitions/CMakeLists.txt b/plugins/obs-transitions/CMakeLists.txt index 65e3b13ac10fb3..f6c29caefe2b1b 100644 --- a/plugins/obs-transitions/CMakeLists.txt +++ b/plugins/obs-transitions/CMakeLists.txt @@ -7,14 +7,15 @@ add_library(OBS::transition ALIAS obs-transitions) target_sources( obs-transitions - PRIVATE obs-transitions.c - transition-slide.c - transition-swipe.c - transition-fade.c + PRIVATE # cmake-format: sortable + obs-transitions.c transition-cut.c transition-fade-to-color.c + transition-fade.c transition-luma-wipe.c - transition-stinger.c) + transition-slide.c + transition-stinger.c + transition-swipe.c) target_link_libraries(obs-transitions PRIVATE OBS::libobs) @@ -23,4 +24,6 @@ if(OS_WINDOWS) target_sources(obs-transitions PRIVATE obs-transitions.rc) endif() +# cmake-format: off set_target_properties_obs(obs-transitions PROPERTIES FOLDER plugins PREFIX "") +# cmake-format: on diff --git a/plugins/obs-vst/CMakeLists.txt b/plugins/obs-vst/CMakeLists.txt index bb5c32a006c486..7149451d30af3d 100644 --- a/plugins/obs-vst/CMakeLists.txt +++ b/plugins/obs-vst/CMakeLists.txt @@ -12,42 +12,43 @@ endif() add_library(obs-vst MODULE) add_library(OBS::vst ALIAS obs-vst) -find_qt(COMPONENTS Widgets) +find_package(Qt6 REQUIRED Widgets) target_sources( obs-vst - PRIVATE obs-vst.cpp - VSTPlugin.cpp + PRIVATE # cmake-format: sortable + $<$:mac/EditorWidget-osx.mm> + $<$:mac/VSTPlugin-osx.mm> + $<$:linux/EditorWidget-linux.cpp> + $<$:linux/VSTPlugin-linux.cpp> + $<$:win/EditorWidget-win.cpp> + $<$:win/VSTPlugin-win.cpp> EditorWidget.cpp - headers/vst-plugin-callbacks.hpp headers/EditorWidget.h + headers/vst-plugin-callbacks.hpp headers/VSTPlugin.h - vst_header/aeffectx.h) + obs-vst.cpp + vst_header/aeffectx.h + VSTPlugin.cpp) target_include_directories(obs-vst PRIVATE vst_header) -target_link_libraries(obs-vst PRIVATE OBS::libobs Qt::Widgets) -if(OS_MACOS) - target_sources(obs-vst PRIVATE mac/EditorWidget-osx.mm mac/VSTPlugin-osx.mm) - - # cmake-format: off - target_link_libraries( - obs-vst - PRIVATE "$" - "$") - # cmake-format: on -elseif(OS_WINDOWS) - target_sources(obs-vst PRIVATE win/VSTPlugin-win.cpp win/EditorWidget-win.cpp) +# cmake-format: off +target_link_libraries( + obs-vst PRIVATE OBS::libobs + Qt::Widgets + "$<$:$>" + "$<$:$>") +# cmake-format: on +if(OS_WINDOWS) set_property( TARGET obs-vst APPEND PROPERTY AUTORCC_OPTIONS --format-version 1) - -elseif(OS_POSIX) - target_sources(obs-vst PRIVATE linux/VSTPlugin-linux.cpp linux/EditorWidget-linux.cpp) endif() +# cmake-format: off set_target_properties_obs( obs-vst PROPERTIES FOLDER plugins @@ -55,3 +56,4 @@ set_target_properties_obs( AUTOMOC ON AUTOUIC ON AUTORCC ON) +# cmake-format: on diff --git a/plugins/obs-webrtc/CMakeLists.txt b/plugins/obs-webrtc/CMakeLists.txt index de943062f16f3d..55f4b18fa7ff08 100644 --- a/plugins/obs-webrtc/CMakeLists.txt +++ b/plugins/obs-webrtc/CMakeLists.txt @@ -14,9 +14,12 @@ find_package(CURL REQUIRED) add_library(obs-webrtc MODULE) add_library(OBS::webrtc ALIAS obs-webrtc) -target_sources(obs-webrtc PRIVATE obs-webrtc.cpp whip-output.cpp whip-output.h whip-service.cpp whip-service.h - whip-utils.h) +target_sources( + obs-webrtc PRIVATE # cmake-format: sortable + obs-webrtc.cpp whip-output.cpp whip-output.h whip-service.cpp whip-service.h whip-utils.h) target_link_libraries(obs-webrtc PRIVATE OBS::libobs LibDataChannel::LibDataChannel CURL::libcurl) +# cmake-format: off set_target_properties_obs(obs-webrtc PROPERTIES FOLDER plugins PREFIX "") +# cmake-format: on diff --git a/plugins/obs-webrtc/cmake/macos/Info.plist.in b/plugins/obs-webrtc/cmake/macos/Info.plist.in deleted file mode 100644 index 1d4b65b5dd3ae2..00000000000000 --- a/plugins/obs-webrtc/cmake/macos/Info.plist.in +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleName - obs-webrtc - CFBundleIdentifier - com.obsproject.obs-webrtc - CFBundleVersion - ${MACOSX_BUNDLE_BUNDLE_VERSION} - CFBundleShortVersionString - ${MACOSX_BUNDLE_SHORT_VERSION_STRING} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleExecutable - obs-webrtc - CFBundlePackageType - BNDL - CFBundleSupportedPlatforms - - MacOSX - - LSMinimumSystemVersion - ${CMAKE_OSX_DEPLOYMENT_TARGET} - NSHumanReadableCopyright - (c) 2012-${CURRENT_YEAR} Lain Bailey - - diff --git a/plugins/obs-x264/CMakeLists.txt b/plugins/obs-x264/CMakeLists.txt index 4c293fb33e26b5..196c5ab7ae5396 100644 --- a/plugins/obs-x264/CMakeLists.txt +++ b/plugins/obs-x264/CMakeLists.txt @@ -12,13 +12,15 @@ add_library(obs-x264 MODULE) add_library(OBS::x264 ALIAS obs-x264) target_sources(obs-x264 PRIVATE obs-x264.c obs-x264-plugin-main.c) -target_link_libraries(obs-x264 PRIVATE Libx264::Libx264 OBS::opts-parser) +target_link_libraries(obs-x264 PRIVATE OBS::opts-parser Libx264::Libx264) if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in obs-x264.rc) target_sources(obs-x264 PRIVATE obs-x264.rc) endif() +# cmake-format: off set_target_properties_obs(obs-x264 PROPERTIES FOLDER plugins/obs-x264 PREFIX "") +# cmake-format: on include(cmake/x264-test.cmake) diff --git a/plugins/obs-x264/cmake/x264-test.cmake b/plugins/obs-x264/cmake/x264-test.cmake index 2fb0b41cb52961..9e275cd39bc0ed 100644 --- a/plugins/obs-x264/cmake/x264-test.cmake +++ b/plugins/obs-x264/cmake/x264-test.cmake @@ -1,12 +1,11 @@ add_executable(obs-x264-test) target_sources(obs-x264-test PRIVATE obs-x264-test.c) + +target_compile_options(obs-x264-test PRIVATE $<$:-Wno-strict-prototypes>) + target_link_libraries(obs-x264-test PRIVATE OBS::opts-parser) add_test(NAME obs-x264-test COMMAND obs-x264-test) set_target_properties(obs-x264-test PROPERTIES FOLDER plugins/obs-x264) - -if(OS_MACOS) - target_compile_options(obs-x264-test PRIVATE -Wno-strict-prototypes) -endif() diff --git a/plugins/rtmp-services/CMakeLists.txt b/plugins/rtmp-services/CMakeLists.txt index e8d304ae04816b..f2cf7555d258ee 100644 --- a/plugins/rtmp-services/CMakeLists.txt +++ b/plugins/rtmp-services/CMakeLists.txt @@ -20,30 +20,35 @@ add_library(OBS::rtmp-services ALIAS rtmp-services) target_sources( rtmp-services - PRIVATE service-specific/twitch.c - service-specific/twitch.h - service-specific/younow.c - service-specific/younow.h + PRIVATE # cmake-format: sortable + rtmp-common.c + rtmp-custom.c + rtmp-format-ver.h + rtmp-services-main.c + service-specific/dacast.c + service-specific/dacast.h service-specific/nimotv.c service-specific/nimotv.h service-specific/showroom.c service-specific/showroom.h - service-specific/dacast.c - service-specific/dacast.h - rtmp-common.c - rtmp-custom.c - rtmp-services-main.c - rtmp-format-ver.h) + service-specific/twitch.c + service-specific/twitch.h + service-specific/younow.c + service-specific/younow.h) target_compile_definitions(rtmp-services PRIVATE SERVICES_URL="${RTMP_SERVICES_URL}" $<$:ENABLE_SERVICE_UPDATES>) target_link_libraries(rtmp-services PRIVATE OBS::libobs OBS::file-updater jansson::jansson) +# Remove once jansson has been fixed on obs-deps +target_link_options(rtmp-services PRIVATE $<$:/IGNORE:4098>) + if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in rtmp-services.rc) target_sources(rtmp-services PRIVATE rtmp-services.rc) - target_link_options(rtmp-services PRIVATE /IGNORE:4098) endif() +# cmake-format: off set_target_properties_obs(rtmp-services PROPERTIES FOLDER plugins PREFIX "") +# cmake-format: on diff --git a/plugins/text-freetype2/CMakeLists.txt b/plugins/text-freetype2/CMakeLists.txt index bb30f99a7679de..6cc7ed55d94519 100644 --- a/plugins/text-freetype2/CMakeLists.txt +++ b/plugins/text-freetype2/CMakeLists.txt @@ -11,27 +11,51 @@ endif() find_package(Freetype REQUIRED) +if(OS_MACOS) + find_package(Iconv REQUIRED) +elseif( + OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) + find_package(Fontconfig REQUIRED) +endif() + add_library(text-freetype2 MODULE) add_library(OBS::text-freetype2 ALIAS text-freetype2) -target_sources(text-freetype2 PRIVATE find-font.h obs-convenience.c text-functionality.c text-freetype2.c - obs-convenience.h text-freetype2.h) -target_link_libraries(text-freetype2 PRIVATE OBS::libobs Freetype::Freetype) +target_sources( + text-freetype2 + PRIVATE # cmake-format: sortable + $<$:find-font-cocoa.m> + $<$:find-font-iconv.c> + $<$:find-font-unix.c> + $<$:find-font.c> + $<$:find-font-windows.c> + find-font.h + obs-convenience.c + obs-convenience.h + text-freetype2.c + text-freetype2.h + text-functionality.c) + +# cmake-format: off +target_link_libraries( + text-freetype2 + PRIVATE OBS::libobs + Freetype::Freetype + $<$:Iconv::Iconv> + "$<$:$>" + $<$:Fontconfig::Fontconfig>) +# cmake-format: on + +# FreeType is hard-coded with /DEFAULTLIB:MSVCRT +target_link_options(text-freetype2 PRIVATE $<$:/IGNORE:4098>) if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in text-freetype2.rc) - target_sources(text-freetype2 PRIVATE find-font.c find-font-windows.c text-freetype2.rc) - target_link_options(text-freetype2 PRIVATE /IGNORE:4098 /IGNORE:4099) -elseif(OS_MACOS) - find_package(Iconv REQUIRED) - - target_sources(text-freetype2 PRIVATE find-font.c find-font-cocoa.m find-font-iconv.c) - target_link_libraries(text-freetype2 PRIVATE Iconv::Iconv "$") -elseif(OS_LINUX OR OS_FREEBSD) - find_package(Fontconfig REQUIRED) - - target_sources(text-freetype2 PRIVATE find-font-unix.c) - target_link_libraries(text-freetype2 PRIVATE Fontconfig::Fontconfig) + target_sources(text-freetype2 PRIVATE text-freetype2.rc) endif() +# cmake-format: off set_target_properties_obs(text-freetype2 PROPERTIES FOLDER plugins PREFIX "") +# cmake-format: on diff --git a/plugins/vlc-video/CMakeLists.txt b/plugins/vlc-video/CMakeLists.txt index 0a35ae284c3fcf..072e0bfd3c841b 100644 --- a/plugins/vlc-video/CMakeLists.txt +++ b/plugins/vlc-video/CMakeLists.txt @@ -9,7 +9,10 @@ macro(check_vlc_path) endif() target_include_directories(vlc-video PRIVATE "${VLC_PATH}/include/vlc") - elseif(OS_LINUX OR OS_FREEBSD) + elseif( + OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) find_package(PkgConfig QUIET) if(PKG_CONFIG_FOUND) pkg_check_modules(PC_Libvlc QUIET libvlc) @@ -31,15 +34,18 @@ add_library(vlc-video MODULE) add_library(OBS::vlc-video ALIAS vlc-video) target_sources(vlc-video PRIVATE vlc-video-plugin.c vlc-video-plugin.h vlc-video-source.c) + target_compile_options(vlc-video PRIVATE $<$:-Wno-shorten-64-to-32>) -target_link_libraries(vlc-video PRIVATE OBS::libobs) + +target_link_libraries(vlc-video PRIVATE OBS::libobs $<$:OBS::w32-pthreads>) check_vlc_path() -if(OS_WINDOWS) - target_link_libraries(vlc-video PRIVATE OBS::w32-pthreads) +if(OS_WINDOWS) configure_file(cmake/windows/obs-module.rc.in vlc-video.rc) target_sources(vlc-video PRIVATE vlc-video.rc) endif() +# cmake-format: off set_target_properties_obs(vlc-video PROPERTIES FOLDER plugins PREFIX "") +# cmake-format: on diff --git a/plugins/win-capture/CMakeLists.txt b/plugins/win-capture/CMakeLists.txt index 336aebb92f2085..ae8bffaff50786 100644 --- a/plugins/win-capture/CMakeLists.txt +++ b/plugins/win-capture/CMakeLists.txt @@ -79,7 +79,8 @@ target_link_libraries( OBS::winrt-headers jansson::jansson) -target_link_options(win-capture PRIVATE /NODEFAULTLIB:msvcrtd.lib) +# Remove once jansson has been fixed on obs-deps +target_link_options(win-capture PRIVATE /IGNORE:4098) # cmake-format: off set_target_properties_obs(win-capture PROPERTIES FOLDER plugins/win-capture PREFIX "") diff --git a/plugins/win-capture/get-graphics-offsets/CMakeLists.txt b/plugins/win-capture/get-graphics-offsets/CMakeLists.txt index 3218e34468b9a6..1e4ee466817929 100644 --- a/plugins/win-capture/get-graphics-offsets/CMakeLists.txt +++ b/plugins/win-capture/get-graphics-offsets/CMakeLists.txt @@ -4,8 +4,6 @@ add_library(_get-graphics-offsets INTERFACE) target_sources(_get-graphics-offsets INTERFACE d3d8-offsets.cpp d3d9-offsets.cpp dxgi-offsets.cpp get-graphics-offsets.c get-graphics-offsets.h) -target_compile_options(_get-graphics-offsets INTERFACE $,/MTd,/MT>) - target_link_libraries(_get-graphics-offsets INTERFACE OBS::hook-config OBS::d3d8-api d3d9.lib dxgi.lib d3d11.lib) legacy_check() @@ -16,7 +14,7 @@ target_link_libraries(get-graphics-offsets PRIVATE _get-graphics-offsets) include(cmake/32bit.cmake) # cmake-format: off -set_target_properties_obs(get-graphics-offsets PROPERTIES FOLDER plugins/win-capture OUTPUT_NAME get-graphics-offsets64) +set_target_properties_obs(get-graphics-offsets PROPERTIES FOLDER plugins/win-capture OUTPUT_NAME get-graphics-offsets64 MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") # cmake-format: on add_dependencies(win-capture get-graphics-offsets) diff --git a/plugins/win-capture/graphics-hook/CMakeLists.txt b/plugins/win-capture/graphics-hook/CMakeLists.txt index 3070c33070eaa6..91378ba9cbe68f 100644 --- a/plugins/win-capture/graphics-hook/CMakeLists.txt +++ b/plugins/win-capture/graphics-hook/CMakeLists.txt @@ -15,12 +15,13 @@ add_library(_graphics-hook INTERFACE) target_sources( _graphics-hook - INTERFACE d3d8-capture.cpp - d3d9-capture.cpp - d3d9-patches.hpp + INTERFACE # cmake-format: sortable d3d10-capture.cpp d3d11-capture.cpp d3d12-capture.cpp + d3d8-capture.cpp + d3d9-capture.cpp + d3d9-patches.hpp dxgi-capture.cpp gl-capture.c gl-decs.h @@ -29,10 +30,10 @@ target_sources( graphics-hook.rc) target_compile_definitions(_graphics-hook INTERFACE COMPILE_D3D12_HOOK) -target_compile_options(_graphics-hook INTERFACE $,/MTd,/MT>) target_link_libraries(_graphics-hook INTERFACE OBS::d3d8-api OBS::hook-config OBS::ipc-util OBS::obfuscate Detours::Detours dxguid) + target_link_options(_graphics-hook INTERFACE /IGNORE:4099) if(TARGET Vulkan::Vulkan) @@ -51,7 +52,7 @@ target_link_libraries(graphics-hook PRIVATE _graphics-hook) include(cmake/32bit.cmake) # cmake-format: off -set_target_properties_obs(graphics-hook PROPERTIES FOLDER "plugins/win-capture" OUTPUT_NAME graphics-hook64) +set_target_properties_obs(graphics-hook PROPERTIES FOLDER "plugins/win-capture" OUTPUT_NAME graphics-hook64 MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") # cmake-format: on add_dependencies(win-capture graphics-hook) diff --git a/plugins/win-capture/inject-helper/CMakeLists.txt b/plugins/win-capture/inject-helper/CMakeLists.txt index 1b50dcdf8f8a8b..6f1c9417b66316 100644 --- a/plugins/win-capture/inject-helper/CMakeLists.txt +++ b/plugins/win-capture/inject-helper/CMakeLists.txt @@ -5,8 +5,9 @@ if(NOT TARGET OBS::obfuscate) endif() add_library(_inject-helper INTERFACE) + target_sources(_inject-helper INTERFACE inject-helper.c) -target_compile_options(_inject-helper INTERFACE $,/MTd,/MT>) + target_link_libraries(_inject-helper INTERFACE OBS::inject-library OBS::obfuscate) legacy_check() @@ -17,7 +18,7 @@ target_link_libraries(inject-helper PRIVATE _inject-helper) include(cmake/32bit.cmake) # cmake-format: off -set_target_properties_obs(inject-helper PROPERTIES FOLDER plugins/win-capture OUTPUT_NAME inject-helper64) +set_target_properties_obs(inject-helper PROPERTIES FOLDER plugins/win-capture OUTPUT_NAME inject-helper64 MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") # cmake-format: on add_dependencies(win-capture inject-helper) diff --git a/plugins/win-dshow/CMakeLists.txt b/plugins/win-dshow/CMakeLists.txt index eef67846f896fb..047774366f7057 100644 --- a/plugins/win-dshow/CMakeLists.txt +++ b/plugins/win-dshow/CMakeLists.txt @@ -19,8 +19,10 @@ find_package(FFmpeg REQUIRED avcodec avutil) add_library(win-dshow MODULE) add_library(OBS::dshow ALIAS win-dshow) -target_sources(win-dshow PRIVATE dshow-plugin.cpp encode-dstr.hpp ffmpeg-decode.c ffmpeg-decode.h win-dshow-encoder.cpp - win-dshow.cpp) +target_sources( + win-dshow + PRIVATE # cmake-format: sortable + dshow-plugin.cpp encode-dstr.hpp ffmpeg-decode.c ffmpeg-decode.h win-dshow-encoder.cpp win-dshow.cpp) configure_file(cmake/windows/obs-module.rc.in win-dshow.rc) target_sources(win-dshow PRIVATE win-dshow.rc) diff --git a/plugins/win-dshow/virtualcam-module/CMakeLists.txt b/plugins/win-dshow/virtualcam-module/CMakeLists.txt index 613c23778ad61b..4ff9c8638a1af3 100644 --- a/plugins/win-dshow/virtualcam-module/CMakeLists.txt +++ b/plugins/win-dshow/virtualcam-module/CMakeLists.txt @@ -57,11 +57,13 @@ if(OBS_CMAKE_VERSION VERSION_GREATER_EQUAL 3.0.0) add_library(_virtualcam INTERFACE) configure_file(cmake/windows/obs-module.rc.in virtualcam-module.rc) - target_sources(_virtualcam INTERFACE placeholder.cpp sleepto.c sleepto.h virtualcam-filter.cpp virtualcam-filter.hpp - virtualcam-module.cpp) + target_sources( + _virtualcam + INTERFACE # cmake-format: sortable + placeholder.cpp sleepto.c sleepto.h virtualcam-filter.cpp virtualcam-filter.hpp virtualcam-module.cpp) target_include_directories(_virtualcam INTERFACE "${CMAKE_CURRENT_BINARY_DIR}") target_compile_definitions(_virtualcam INTERFACE VIRTUALCAM_AVAILABLE) - target_compile_options(_virtualcam INTERFACE $,/MTd,/MT>) + set_property(TARGET _virtualcam PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") target_link_libraries( _virtualcam diff --git a/test/test-input/CMakeLists.txt b/test/test-input/CMakeLists.txt index 0a03319e030578..c364c88433e1b1 100644 --- a/test/test-input/CMakeLists.txt +++ b/test/test-input/CMakeLists.txt @@ -14,14 +14,15 @@ add_library(OBS::test-input ALIAS test-input) target_sources( test-input - PRIVATE test-filter.c - test-input.c - test-sinewave.c + PRIVATE # cmake-format: sortable sync-async-source.c sync-audio-buffering.c - sync-pair-vid.c sync-pair-aud.c - test-random.c) + sync-pair-vid.c + test-filter.c + test-input.c + test-random.c + test-sinewave.c) target_link_libraries(test-input PRIVATE OBS::libobs)