Browse Source

plugins: Update CMake formatting with manual format choices

PatTheMav 2 years ago
parent
commit
eae5cc1e38

+ 13 - 11
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 $<$<PLATFORM_ID:Windows>:windows-imports.h>)
+
+# cmake-format: off
+target_link_libraries(
+  coreaudio-encoder
+  PRIVATE OBS::libobs
+          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,AudioToolbox.framework>>"
+          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,CoreAudio.framework>>"
+          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,CoreFoundation.framework>>")
+# 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 "$<LINK_LIBRARY:FRAMEWORK,CoreFoundation.framework>"
-            "$<LINK_LIBRARY:FRAMEWORK,CoreAudio.framework>"
-            "$<LINK_LIBRARY:FRAMEWORK,AudioToolbox.framework>")
-  # 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

+ 42 - 44
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
+    "$<$<PLATFORM_ID:Darwin>:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPI.h>"
+    "$<$<PLATFORM_ID:Darwin>:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIConfiguration.h>"
+    "$<$<PLATFORM_ID:Darwin>:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIDeckControl.h>"
+    "$<$<PLATFORM_ID:Darwin>:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIDiscovery.h>"
+    "$<$<PLATFORM_ID:Darwin>:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIDispatch.cpp>"
+    "$<$<PLATFORM_ID:Darwin>:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIModes.h>"
+    "$<$<PLATFORM_ID:Darwin>:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIStreaming.h>"
+    "$<$<PLATFORM_ID:Darwin>:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPITypes.h>"
+    "$<$<PLATFORM_ID:Darwin>:${CMAKE_CURRENT_SOURCE_DIR}/mac/decklink-sdk/DeckLinkAPIVersion.h>"
+    "$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPI.h>"
+    "$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIConfiguration.h>"
+    "$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIDeckControl.h>"
+    "$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIDiscovery.h>"
+    "$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIDispatch.cpp>"
+    "$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIModes.h>"
+    "$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPITypes.h>"
+    "$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/DeckLinkAPIVersion.h>"
+    "$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:${CMAKE_CURRENT_SOURCE_DIR}/linux/decklink-sdk/LinuxCOM.h>"
+    "$<$<PLATFORM_ID:Windows>:${CMAKE_CURRENT_SOURCE_DIR}/win/decklink-sdk/DeckLinkAPIVersion.h>")
+
 target_sources(
   decklink
-  PRIVATE OBSVideoFrame.cpp
-          OBSVideoFrame.h
+  PRIVATE # cmake-format: sortable
+          $<$<PLATFORM_ID:Darwin>:mac/platform.cpp>
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:linux/platform.cpp>
+          $<$<PLATFORM_ID:Windows>: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 $<$<PLATFORM_ID:Windows>:NOMINMAX>)
+
+target_link_libraries(decklink PRIVATE OBS::libobs OBS::caption Decklink::SDK
+                                       "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,CoreFoundation.framework>>")
 
 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

+ 3 - 3
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 $<$<PLATFORM_ID:Windows>: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

+ 2 - 0
plugins/mac-avcapture/CMakeLists.txt

@@ -19,6 +19,7 @@ target_link_libraries(
           "$<LINK_LIBRARY:FRAMEWORK,CoreVideo.framework>"
           "$<LINK_LIBRARY:FRAMEWORK,CoreMediaIO.framework>")
 
+# cmake-format: off
 set_target_properties_obs(
   mac-avcapture
   PROPERTIES FOLDER plugins
@@ -26,3 +27,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

+ 1 - 1
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)
 

+ 15 - 14
plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt

@@ -5,23 +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)
+          OBSDALStream.mm)
 
 if(NOT XCODE)
   target_compile_options(obs-dal-plugin PRIVATE -fobjc-arc -fobjc-weak)

+ 27 - 72
plugins/obs-ffmpeg/CMakeLists.txt

@@ -5,31 +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)
 
-# cmake-format: off
-if(OS_WINDOWS OR OS_MACOS)
-  set(ffmpeg_version 6)
-else()
-  set(ffmpeg_version 5.1)
-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()
+include(cmake/dependencies.cmake)
 
 add_library(obs-ffmpeg MODULE)
 add_library(OBS::ffmpeg ALIAS obs-ffmpeg)
@@ -40,6 +16,18 @@ target_sources(
   obs-ffmpeg
   PRIVATE # cmake-format: sortable
           $<$<BOOL:${ENABLE_FFMPEG_LOGGING}>:obs-ffmpeg-logging.c>
+          $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:obs-ffmpeg-mpegts.c>
+          $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:obs-ffmpeg-rist.h>
+          $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:obs-ffmpeg-srt.h>
+          $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:obs-ffmpeg-url.h>
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:obs-ffmpeg-vaapi.c>
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:vaapi-utils.c>
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:vaapi-utils.h>
+          $<$<PLATFORM_ID:Windows>:obs-nvenc-helpers.c>
+          $<$<PLATFORM_ID:Windows>:obs-nvenc.c>
+          $<$<PLATFORM_ID:Windows>:obs-nvenc.h>
+          $<$<PLATFORM_ID:Windows>:texture-amf-opts.hpp>
+          $<$<PLATFORM_ID:Windows>:texture-amf.cpp>
           obs-ffmpeg-audio-encoders.c
           obs-ffmpeg-av1.c
           obs-ffmpeg-compat.h
@@ -55,7 +43,8 @@ target_sources(
           obs-ffmpeg.c)
 
 target_compile_options(obs-ffmpeg PRIVATE $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-shorten-64-to-32>)
-target_compile_definitions(obs-ffmpeg PRIVATE $<$<BOOL:${ENABLE_FFMPEG_LOGGING}>:ENABLE_FFMPEG_LOGGING>)
+target_compile_definitions(obs-ffmpeg PRIVATE $<$<BOOL:${ENABLE_FFMPEG_LOGGING}>:ENABLE_FFMPEG_LOGGING>
+                                              $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:NEW_MPEGTS_OUTPUT>)
 
 target_link_libraries(
   obs-ffmpeg
@@ -68,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
+          $<$<PLATFORM_ID:Windows>:OBS::obs-nvenc-version>
+          $<$<PLATFORM_ID:Windows>:OBS::w32-pthreads>
+          $<$<PLATFORM_ID:Windows>:AMF::AMF>
+          $<$<PLATFORM_ID:Windows>:FFnvcodec::FFnvcodec>
+          $<$<PLATFORM_ID:Windows>:ws2_32>
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libva::va>
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libva::drm>
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libpci::pci>
+          $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:Librist::Librist>
+          $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>: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

+ 63 - 0
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()

+ 18 - 17
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 $<$<PLATFORM_ID:Windows>: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

+ 32 - 30
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()

+ 43 - 32
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
+          $<$<BOOL:${ENABLE_HEVC}>:rtmp-hevc.c>
+          $<$<BOOL:${ENABLE_HEVC}>: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
-          "$<$<BOOL:${ENABLE_HEVC}>:rtmp-hevc.c>"
-          "$<$<BOOL:${ENABLE_HEVC}>: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 $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-comma>
+          $<$<AND:$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>,$<COMPILE_LANG_AND_ID:C,Clang>>:-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
+          $<$<PLATFORM_ID:Windows>:OBS::w32-pthreads>
+          $<$<PLATFORM_ID:Windows>:crypt32>
+          $<$<PLATFORM_ID:Windows>:iphlpapi>
+          $<$<PLATFORM_ID:Windows>:winmm>
+          $<$<PLATFORM_ID:Windows>:ws2_32>
+          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,Foundation.framework>>"
+          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,Security.framework>>")
 
-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 $<$<PLATFORM_ID:Windows>:/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 "$<LINK_LIBRARY:FRAMEWORK,Foundation.framework>"
-            "$<LINK_LIBRARY:FRAMEWORK,Security.framework>")
-  # 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

+ 50 - 62
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
+          $<$<NOT:$<PLATFORM_ID:Windows>>:ftl-sdk/libftl/posix/socket.c>
+          $<$<NOT:$<PLATFORM_ID:Windows>>:ftl-sdk/libftl/posix/threads.c>
+          $<$<NOT:$<PLATFORM_ID:Windows>>:ftl-sdk/libftl/posix/threads.h>
+          $<$<PLATFORM_ID:Windows>:ftl-sdk/libftl/win32/socket.c>
+          $<$<PLATFORM_ID:Windows>:ftl-sdk/libftl/win32/threads.c>
+          $<$<PLATFORM_ID:Windows>: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 $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang,GNU>:-Wno-unused-parameter>
+          $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang,GNU>:-Wno-unused-variable>
+          $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang,GNU>:-Wno-sign-compare>
+          $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang,GNU>:-Wno-pointer-sign>
+          $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang,GNU>:-Wno-int-conversion>
+          $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-incompatible-function-pointer-types>
+          $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-implicit-int-conversion>
+          $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-shorten-64-to-32>
+          $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-macro-redefined>
+          $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-enum-conversion>
+          $<$<COMPILE_LANG_AND_ID:C,GNU>:-Wno-extra>
+          $<$<COMPILE_LANG_AND_ID:C,GNU>:-Wno-incompatible-pointer-types>
+          $<$<COMPILE_LANG_AND_ID:C,GNU>:-Wno-builtin-macro-redefined>)
+
+target_include_directories(
+  ftl-sdk
+  PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl"
+         "$<$<PLATFORM_ID:Windows>:${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/win32>"
+         "$<$<NOT:$<PLATFORM_ID:Windows>>:${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)

+ 24 - 18
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
+          $<$<PLATFORM_ID:Linux>:common_utils_linux.cpp>
+          $<$<PLATFORM_ID:Windows>:common_directx11.cpp>
+          $<$<PLATFORM_ID:Windows>:common_directx11.h>
+          $<$<PLATFORM_ID:Windows>: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 $<$<PLATFORM_ID:Windows>: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
+          $<$<PLATFORM_ID:Linux>:Libva::va>
+          $<$<PLATFORM_ID:Linux>:Libva::drm>
+          $<$<PLATFORM_ID:Windows>:d3d11>
+          $<$<PLATFORM_ID:Windows>:dxgi>
+          $<$<PLATFORM_ID:Windows>:dxguid>)
+
+target_link_options(obs-qsv11 PRIVATE $<$<PLATFORM_ID:Windows>:/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

+ 3 - 0
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 "$<$<BOOL:${ENABLE_HEVC}>: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

+ 8 - 5
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

+ 21 - 19
plugins/obs-vst/CMakeLists.txt

@@ -16,38 +16,39 @@ find_package(Qt6 REQUIRED Widgets)
 
 target_sources(
   obs-vst
-  PRIVATE obs-vst.cpp
-          VSTPlugin.cpp
+  PRIVATE # cmake-format: sortable
+          $<$<PLATFORM_ID:Darwin>:mac/EditorWidget-osx.mm>
+          $<$<PLATFORM_ID:Darwin>:mac/VSTPlugin-osx.mm>
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:linux/EditorWidget-linux.cpp>
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:linux/VSTPlugin-linux.cpp>
+          $<$<PLATFORM_ID:Windows>:win/EditorWidget-win.cpp>
+          $<$<PLATFORM_ID:Windows>: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 "$<LINK_LIBRARY:FRAMEWORK,Cocoa.framework>"
-            "$<LINK_LIBRARY:FRAMEWORK,Foundation.framework>")
-  # 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
+                  "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,Cocoa.framework>>"
+                  "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,Foundation.framework>>")
+# 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

+ 5 - 2
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

+ 0 - 28
plugins/obs-webrtc/cmake/macos/Info.plist.in

@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleName</key>
-	<string>obs-webrtc</string>
-	<key>CFBundleIdentifier</key>
-	<string>com.obsproject.obs-webrtc</string>
-	<key>CFBundleVersion</key>
-	<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
-	<key>CFBundleShortVersionString</key>
-	<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleExecutable</key>
-	<string>obs-webrtc</string>
-	<key>CFBundlePackageType</key>
-	<string>BNDL</string>
-	<key>CFBundleSupportedPlatforms</key>
-	<array>
-		<string>MacOSX</string>
-	</array>
-	<key>LSMinimumSystemVersion</key>
-	<string>${CMAKE_OSX_DEPLOYMENT_TARGET}</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>(c) 2012-${CURRENT_YEAR} Lain Bailey</string>
-</dict>
-</plist>

+ 3 - 1
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)

+ 3 - 4
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 $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-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()

+ 16 - 11
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}"
                                                  $<$<BOOL:${ENABLE_SERVICE_UPDATES}>: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 $<$<PLATFORM_ID:Windows>:/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

+ 39 - 15
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
+          $<$<PLATFORM_ID:Darwin>:find-font-cocoa.m>
+          $<$<PLATFORM_ID:Darwin>:find-font-iconv.c>
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:find-font-unix.c>
+          $<$<PLATFORM_ID:Windows,Darwin>:find-font.c>
+          $<$<PLATFORM_ID:Windows>: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
+          $<$<PLATFORM_ID:Darwin>:Iconv::Iconv>
+          "$<$<PLATFORM_ID:Darwin>:$<LINK_LIBRARY:FRAMEWORK,Cocoa.framework>>"
+          $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Fontconfig::Fontconfig>)
+# cmake-format: on
+
+# FreeType is hard-coded with /DEFAULTLIB:MSVCRT
+target_link_options(text-freetype2 PRIVATE $<$<PLATFORM_ID:Windows>:/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 "$<LINK_LIBRARY:FRAMEWORK,Cocoa.framework>")
-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

+ 10 - 4
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 $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-shorten-64-to-32>)
-target_link_libraries(vlc-video PRIVATE OBS::libobs)
+
+target_link_libraries(vlc-video PRIVATE OBS::libobs $<$<PLATFORM_ID:Windows>: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

+ 2 - 1
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 "")

+ 1 - 3
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 $<IF:$<CONFIG:Debug>,/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$<$<CONFIG:Debug>:Debug>")
 # cmake-format: on
 
 add_dependencies(win-capture get-graphics-offsets)

+ 6 - 5
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 $<IF:$<CONFIG:Debug>,/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$<$<CONFIG:Debug>:Debug>")
 # cmake-format: on
 
 add_dependencies(win-capture graphics-hook)

+ 3 - 2
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 $<IF:$<CONFIG:Debug>,/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$<$<CONFIG:Debug>:Debug>")
 # cmake-format: on
 
 add_dependencies(win-capture inject-helper)

+ 4 - 2
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)

+ 5 - 3
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 $<IF:$<CONFIG:Debug>,/MTd,/MT>)
+  set_property(TARGET _virtualcam PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
 
   target_link_libraries(
     _virtualcam