From a1757146244d90204b5135dec5eb2bf8e9f99b41 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 2 Sep 2023 17:00:37 +0200 Subject: [PATCH 01/13] cmake: Replace custom Qt discovery function with CMake default find_qt was necessary during the transitional period between Qt5 and Qt6. With Qt6 being the only supported Qt version (for open source) for the time being, code complexity can be reduced for easier maintenance. --- UI/cmake/ui-qt.cmake | 8 +++++++- UI/frontend-plugins/aja-output-ui/CMakeLists.txt | 8 +++++++- UI/frontend-plugins/decklink-captions/CMakeLists.txt | 4 +++- UI/frontend-plugins/decklink-output-ui/CMakeLists.txt | 7 ++++++- UI/frontend-plugins/frontend-tools/CMakeLists.txt | 7 ++++++- cmake/common/helpers_common.cmake | 4 ++-- libobs/CMakeLists.txt | 2 +- plugins/obs-vst/CMakeLists.txt | 2 +- 8 files changed, 33 insertions(+), 9 deletions(-) diff --git a/UI/cmake/ui-qt.cmake b/UI/cmake/ui-qt.cmake index 3107f2aaea3fd2..6219697708ef2d 100644 --- a/UI/cmake/ui-qt.cmake +++ b/UI/cmake/ui-qt.cmake @@ -1,4 +1,10 @@ -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(NOT OS_WINDOWS AND NOT OS_MACOS) + 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..317f00bafe2c99 100644 --- a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt +++ b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt @@ -8,7 +8,13 @@ if(NOT ENABLE_AJA) endif() find_package(LibAJANTV2 REQUIRED) -find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui) + +# cmake-format: off +find_package(Qt6 REQUIRED Widgets) +if(OS_LINUX) + find_package(Qt6 REQUIRED Gui) +endif() +# cmake-format: on add_library(aja-output-ui MODULE) add_library(OBS::aja-output-ui ALIAS aja-output-ui) diff --git a/UI/frontend-plugins/decklink-captions/CMakeLists.txt b/UI/frontend-plugins/decklink-captions/CMakeLists.txt index 3fc910b6c28a9d..b7119fb9108c0f 100644 --- a/UI/frontend-plugins/decklink-captions/CMakeLists.txt +++ b/UI/frontend-plugins/decklink-captions/CMakeLists.txt @@ -7,7 +7,9 @@ if(NOT ENABLE_DECKLINK) return() endif() -find_qt(COMPONENTS Widgets) +# cmake-format: off +find_package(Qt6 REQUIRED Widgets) +# cmake-format: on add_library(decklink-captions MODULE) add_library(OBS::decklink-captions ALIAS decklink-captions) diff --git a/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt b/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt index a5e697e8859ab6..ab8e600292515a 100644 --- a/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt +++ b/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt @@ -7,7 +7,12 @@ if(NOT ENABLE_DECKLINK) return() endif() -find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui) +# cmake-format: off +find_package(Qt6 REQUIRED Widgets) +if (OS_LINUX) + find_package(Qt6 REQUIRED Gui) +endif() +# cmake-format: on add_library(decklink-output-ui MODULE) add_library(OBS::decklink-output-ui ALIAS decklink-output-ui) diff --git a/UI/frontend-plugins/frontend-tools/CMakeLists.txt b/UI/frontend-plugins/frontend-tools/CMakeLists.txt index 5a0eeba451efbc..85e110d4415dae 100644 --- a/UI/frontend-plugins/frontend-tools/CMakeLists.txt +++ b/UI/frontend-plugins/frontend-tools/CMakeLists.txt @@ -2,7 +2,12 @@ cmake_minimum_required(VERSION 3.22...3.25) legacy_check() -find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui) +# cmake-format: off +find_package(Qt6 REQUIRED Widgets) +if (OS_LINUX) + find_package(Qt6 REQUIRED Gui) +endif() +# cmake-format: on add_library(frontend-tools MODULE) add_library(OBS::frontend-tools ALIAS frontend-tools) diff --git a/cmake/common/helpers_common.cmake b/cmake/common/helpers_common.cmake index 48c583264f3474..cefadde4e55b9f 100644 --- a/cmake/common/helpers_common.cmake +++ b/cmake/common/helpers_common.cmake @@ -263,8 +263,8 @@ 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( diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index 6e67966a72a744..4692637d87d342 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -18,7 +18,7 @@ find_package(FFmpeg REQUIRED avformat avutil swscale swresample OPTIONAL_COMPONE find_package(ZLIB REQUIRED) if(ENABLE_UI) - find_qt(COMPONENTS Core) + find_package(Qt6 REQUIRED Core) endif() find_package(jansson REQUIRED) diff --git a/plugins/obs-vst/CMakeLists.txt b/plugins/obs-vst/CMakeLists.txt index bb5c32a006c486..9a793838191bb9 100644 --- a/plugins/obs-vst/CMakeLists.txt +++ b/plugins/obs-vst/CMakeLists.txt @@ -12,7 +12,7 @@ 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 From ac7512b3faf88e3eb275a4723aa772eaaadc62c4 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 2 Sep 2023 17:00:37 +0200 Subject: [PATCH 02/13] cmake: Update FFmpeg find package to use explicit version --- libobs/CMakeLists.txt | 16 +++++++++++++++- plugins/obs-ffmpeg/CMakeLists.txt | 24 ++++++++++++++++-------- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index 4692637d87d342..8ad5ca30ce4391 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -14,7 +14,21 @@ add_library(libobs SHARED) add_library(OBS::libobs ALIAS libobs) find_package(Threads REQUIRED) -find_package(FFmpeg REQUIRED avformat avutil swscale swresample OPTIONAL_COMPONENTS avcodec) +# 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 avformat + avutil + swscale + swresample + OPTIONAL_COMPONENTS avcodec) +# cmake-format: on find_package(ZLIB REQUIRED) if(ENABLE_UI) diff --git a/plugins/obs-ffmpeg/CMakeLists.txt b/plugins/obs-ffmpeg/CMakeLists.txt index fa823dd09addb9..5560bcc58b8de2 100644 --- a/plugins/obs-ffmpeg/CMakeLists.txt +++ b/plugins/obs-ffmpeg/CMakeLists.txt @@ -5,15 +5,23 @@ 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 REQUIRED - COMPONENTS avcodec - avfilter - avdevice - avutil - swscale - avformat - swresample) + 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") From 7f5a0ec89cf26ca0fb3a2138affe4152100fa975 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Mon, 2 Oct 2023 22:41:59 +0200 Subject: [PATCH 03/13] deps: Update CMake target source lists with alphabetic sorting Also manually updates some CMake script files to make code more readable. --- deps/CMakeLists.txt | 10 ++- deps/blake2/CMakeLists.txt | 15 ++--- deps/file-updater/CMakeLists.txt | 4 +- deps/glad/CMakeLists.txt | 33 +++++----- deps/happy-eyeballs/CMakeLists.txt | 17 +++-- deps/ipc-util/CMakeLists.txt | 14 ++--- deps/json11/CMakeLists.txt | 16 +++-- deps/libcaption/CMakeLists.txt | 35 ++++++----- deps/media-playback/CMakeLists.txt | 16 +++-- deps/obs-scripting/CMakeLists.txt | 26 ++++---- deps/obs-scripting/cmake/cstrcache.cmake | 5 ++ deps/obs-scripting/cmake/lua.cmake | 42 +++++++------ deps/obs-scripting/cmake/python.cmake | 70 ++++++++++----------- deps/obs-scripting/obslua/CMakeLists.txt | 30 ++++----- deps/obs-scripting/obspython/CMakeLists.txt | 39 ++++++------ deps/opts-parser/CMakeLists.txt | 14 +++-- deps/uthash/CMakeLists.txt | 2 +- deps/w32-pthreads/CMakeLists.txt | 6 +- 18 files changed, 215 insertions(+), 179 deletions(-) create mode 100644 deps/obs-scripting/cmake/cstrcache.cmake 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) From 165c7b21cdc599184634a2a488c028aef42bdc8b Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 9 Sep 2023 00:06:53 +0200 Subject: [PATCH 04/13] libobs: Update CMake target source lists with alphabetic sorting --- libobs/CMakeLists.txt | 32 ++++++++++++++++++-------------- libobs/cmake/obs-version.cmake | 13 +++++++++++++ libobs/cmake/os-freebsd.cmake | 17 ++++++++++++----- libobs/cmake/os-linux.cmake | 16 +++++++++++----- libobs/cmake/os-macos.cmake | 20 +++++++++++--------- libobs/cmake/os-windows.cmake | 8 +++++--- 6 files changed, 70 insertions(+), 36 deletions(-) create mode 100644 libobs/cmake/obs-version.cmake diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index 8ad5ca30ce4391..d46a830c209171 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -2,23 +2,15 @@ cmake_minimum_required(VERSION 3.22...3.25) legacy_check() -# 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) - -add_library(libobs SHARED) -add_library(OBS::libobs ALIAS libobs) +include(cmake/obs-version.cmake) find_package(Threads REQUIRED) + # cmake-format: off if(OS_WINDOWS OR OS_MACOS) set(ffmpeg_version 6) else() - set(ffmpeg_version 5.1) + set(ffmpeg_version 4.4) endif() find_package( @@ -29,6 +21,7 @@ find_package( swresample OPTIONAL_COMPONENTS avcodec) # cmake-format: on + find_package(ZLIB REQUIRED) if(ENABLE_UI) @@ -36,8 +29,16 @@ if(ENABLE_UI) 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 @@ -238,6 +239,7 @@ target_sources( graphics/vec4.h) target_compile_features(libobs PUBLIC cxx_std_17) + target_compile_definitions( libobs PRIVATE IS_LIBOBS @@ -264,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}") From 24ade96bd9fbc929478452cda3b3f149573232ba Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 9 Sep 2023 00:07:37 +0200 Subject: [PATCH 05/13] libobs-opengl: Update CMake formatting with manual format choices --- libobs-opengl/CMakeLists.txt | 76 +++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 36 deletions(-) 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 From ad912e704f9373fced8d0122bbb6c354ad9ccd11 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 9 Sep 2023 00:11:41 +0200 Subject: [PATCH 06/13] plugins: Update CMake formatting with manual format choices --- plugins/coreaudio-encoder/CMakeLists.txt | 24 ++-- plugins/decklink/CMakeLists.txt | 86 +++++++------- plugins/image-source/CMakeLists.txt | 6 +- plugins/mac-avcapture/CMakeLists.txt | 2 + .../src/camera-extension/CMakeLists.txt | 2 +- .../src/dal-plugin/CMakeLists.txt | 29 ++--- plugins/obs-ffmpeg/CMakeLists.txt | 99 +++++----------- plugins/obs-ffmpeg/cmake/dependencies.cmake | 63 ++++++++++ plugins/obs-filters/CMakeLists.txt | 35 +++--- plugins/obs-filters/cmake/rnnoise.cmake | 62 +++++----- plugins/obs-outputs/CMakeLists.txt | 75 +++++++----- plugins/obs-outputs/cmake/ftl.cmake | 112 ++++++++---------- plugins/obs-qsv11/CMakeLists.txt | 42 ++++--- plugins/obs-qsv11/obs-qsv-test/CMakeLists.txt | 3 + plugins/obs-transitions/CMakeLists.txt | 13 +- plugins/obs-vst/CMakeLists.txt | 40 ++++--- plugins/obs-webrtc/CMakeLists.txt | 7 +- plugins/obs-webrtc/cmake/macos/Info.plist.in | 28 ----- plugins/obs-x264/CMakeLists.txt | 4 +- plugins/obs-x264/cmake/x264-test.cmake | 7 +- plugins/rtmp-services/CMakeLists.txt | 27 +++-- plugins/text-freetype2/CMakeLists.txt | 54 ++++++--- plugins/vlc-video/CMakeLists.txt | 14 ++- plugins/win-capture/CMakeLists.txt | 3 +- .../get-graphics-offsets/CMakeLists.txt | 4 +- .../win-capture/graphics-hook/CMakeLists.txt | 11 +- .../win-capture/inject-helper/CMakeLists.txt | 5 +- plugins/win-dshow/CMakeLists.txt | 6 +- .../virtualcam-module/CMakeLists.txt | 8 +- 29 files changed, 462 insertions(+), 409 deletions(-) create mode 100644 plugins/obs-ffmpeg/cmake/dependencies.cmake delete mode 100644 plugins/obs-webrtc/cmake/macos/Info.plist.in 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..14ed84bc284acd 100644 --- a/plugins/mac-avcapture/CMakeLists.txt +++ b/plugins/mac-avcapture/CMakeLists.txt @@ -19,6 +19,7 @@ target_link_libraries( "$" "$") +# 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 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..4cfbff67096a25 100644 --- a/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt +++ b/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) diff --git a/plugins/obs-ffmpeg/CMakeLists.txt b/plugins/obs-ffmpeg/CMakeLists.txt index 5560bcc58b8de2..77c5ad8e4950bb 100644 --- a/plugins/obs-ffmpeg/CMakeLists.txt +++ b/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 $<$: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 @@ -55,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 @@ -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 + $<$: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 9a793838191bb9..7149451d30af3d 100644 --- a/plugins/obs-vst/CMakeLists.txt +++ b/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 + $<$: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 From fc78c4070b79c5189e4c0f6928fcd58f1a2d9abe Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Fri, 8 Dec 2023 02:55:31 +0100 Subject: [PATCH 07/13] aja: Add shared interface library for plugin and frontend-plugin --- plugins/aja/CMakeLists.txt | 81 ++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 33 deletions(-) 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 From 11f8b9a16026f4c41d4c3976be1dbb560e48f046 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Fri, 8 Dec 2023 02:55:47 +0100 Subject: [PATCH 08/13] UI: Add UI support interface library with custom Qt elements Allows the customized UI elements used by OBS Studio to more cleanly be integrated into consumers of the same elements, mainly frontend plugins in the main source tree. --- .../aja-output-ui/CMakeLists.txt | 98 +++++++---------- .../decklink-captions/CMakeLists.txt | 32 +++--- .../decklink-output-ui/CMakeLists.txt | 60 ++++------- .../frontend-tools/CMakeLists.txt | 100 +++++++----------- 4 files changed, 122 insertions(+), 168 deletions(-) diff --git a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt index 317f00bafe2c99..3bed6ee56a3a22 100644 --- a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt +++ b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt @@ -9,84 +9,63 @@ endif() find_package(LibAJANTV2 REQUIRED) -# cmake-format: off find_package(Qt6 REQUIRED Widgets) -if(OS_LINUX) + +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() -# cmake-format: on 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 @@ -95,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 b7119fb9108c0f..7ea1c6ee0bcd3c 100644 --- a/UI/frontend-plugins/decklink-captions/CMakeLists.txt +++ b/UI/frontend-plugins/decklink-captions/CMakeLists.txt @@ -7,6 +7,13 @@ if(NOT ENABLE_DECKLINK) return() endif() +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 @@ -15,25 +22,25 @@ 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 @@ -42,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 ab8e600292515a..96e5ba2812fb24 100644 --- a/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt +++ b/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt @@ -7,59 +7,43 @@ if(NOT ENABLE_DECKLINK) return() endif() -# cmake-format: off find_package(Qt6 REQUIRED Widgets) -if (OS_LINUX) + +if(OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) find_package(Qt6 REQUIRED Gui) + + find_package(X11 REQUIRED) endif() -# cmake-format: on 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 85e110d4415dae..bdc6582ec73ebe 100644 --- a/UI/frontend-plugins/frontend-tools/CMakeLists.txt +++ b/UI/frontend-plugins/frontend-tools/CMakeLists.txt @@ -2,47 +2,54 @@ cmake_minimum_required(VERSION 3.22...3.25) legacy_check() -# cmake-format: off find_package(Qt6 REQUIRED Widgets) -if (OS_LINUX) + +if(OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) find_package(Qt6 REQUIRED Gui) + find_package(X11 REQUIRED) endif() -# cmake-format: on 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") @@ -54,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) + target_sources(frontend-tools PRIVATE frontend-tools.rc) - 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_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 @@ -96,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 From b47596860503f08cdce703dfd4190aa67b94b7bc Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Fri, 6 Oct 2023 00:40:36 +0200 Subject: [PATCH 09/13] UI: Update CMake target source lists with alphabetic sorting Also updates CMake formatting with manual format choices. --- UI/CMakeLists.txt | 4 +-- UI/cmake/feature-browserpanels.cmake | 6 ++-- UI/cmake/feature-importers.cmake | 7 +++-- UI/cmake/feature-whatsnew.cmake | 2 ++ UI/cmake/feature-youtube.cmake | 3 +- UI/cmake/os-macos.cmake | 4 +-- UI/cmake/os-windows.cmake | 17 +++++++---- UI/cmake/ui-elements.cmake | 45 ++++++++++++++++++---------- UI/cmake/ui-qt.cmake | 4 ++- UI/obs-frontend-api/CMakeLists.txt | 2 ++ UI/win-update/updater/CMakeLists.txt | 5 ++-- 11 files changed, 63 insertions(+), 36 deletions(-) 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..d67d82c013deb2 100644 --- a/UI/cmake/os-macos.cmake +++ b/UI/cmake/os-macos.cmake @@ -3,9 +3,7 @@ if(NOT XCODE) 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 6219697708ef2d..6108dfd81e052f 100644 --- a/UI/cmake/ui-qt.cmake +++ b/UI/cmake/ui-qt.cmake @@ -2,7 +2,9 @@ find_package(Qt6 REQUIRED Widgets Network Svg Xml) # cmake-format: on -if(NOT OS_WINDOWS AND NOT OS_MACOS) +if(OS_LINUX + OR OS_FREEBSD + OR OS_OPENBSD) find_package(Qt6 REQUIRED Gui) endif() 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) From 324817b784c6475a30a74b4c28975d5695643d06 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 9 Sep 2023 00:23:16 +0200 Subject: [PATCH 10/13] test: Update CMake target source lists with alphabetic sorting --- .gitignore | 2 +- test/test-input/CMakeLists.txt | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) 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/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) From bbc7e547671dcf1c874c76372ef12a2754b8e535 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 9 Sep 2023 00:23:44 +0200 Subject: [PATCH 11/13] cmake: Update CMake formatting with manual format choices --- cmake/32bit/projects.cmake | 7 + cmake/common/bootstrap.cmake | 45 ++----- cmake/common/buildspec_common.cmake | 36 +++-- cmake/common/ccache.cmake | 7 +- cmake/common/helpers_common.cmake | 202 ++++++++++++++++++---------- cmake/common/policies.cmake | 3 + cmake/common/versionconfig.cmake | 4 - cmake/macos/helpers.cmake | 13 +- cmake/windows/compilerconfig.cmake | 12 +- cmake/windows/helpers.cmake | 26 ++-- 10 files changed, 205 insertions(+), 150 deletions(-) create mode 100644 cmake/common/policies.cmake 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 cefadde4e55b9f..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 @@ -267,14 +298,9 @@ function(find_qt_plugins) 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/helpers.cmake b/cmake/macos/helpers.cmake index 5fe0336306c42b..a74c1525a0a0fa 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") @@ -107,11 +107,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/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( From 3f28453e1fc1ed90edd5448000db4bebbf84a399 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 5 Oct 2023 18:31:19 +0200 Subject: [PATCH 12/13] cmake: Remove support for generators besides Xcode on macOS --- UI/cmake/os-macos.cmake | 4 - cmake/macos/compilerconfig.cmake | 117 ++++++++---------- cmake/macos/defaults.cmake | 4 +- cmake/macos/helpers.cmake | 4 - cmake/macos/xcode.cmake | 7 +- plugins/mac-avcapture/CMakeLists.txt | 4 - .../src/dal-plugin/CMakeLists.txt | 4 - .../src/obs-plugin/CMakeLists.txt | 4 - 8 files changed, 56 insertions(+), 92 deletions(-) diff --git a/UI/cmake/os-macos.cmake b/UI/cmake/os-macos.cmake index d67d82c013deb2..0c74c683dcd2b4 100644 --- a/UI/cmake/os-macos.cmake +++ b/UI/cmake/os-macos.cmake @@ -1,7 +1,3 @@ -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-quoted-include-in-framework-header -Wno-comma) 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 a74c1525a0a0fa..1088429c8db143 100644 --- a/cmake/macos/helpers.cmake +++ b/cmake/macos/helpers.cmake @@ -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} 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/plugins/mac-avcapture/CMakeLists.txt b/plugins/mac-avcapture/CMakeLists.txt index 14ed84bc284acd..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 diff --git a/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt b/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt index 4cfbff67096a25..5c9258d4308d43 100644 --- a/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt +++ b/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt @@ -24,10 +24,6 @@ target_sources( OBSDALStream.h OBSDALStream.mm) -if(NOT XCODE) - target_compile_options(obs-dal-plugin PRIVATE -fobjc-arc -fobjc-weak) -endif() - set(_placeholder_location "${CMAKE_CURRENT_SOURCE_DIR}/../common/data/placeholder.png") set_property(SOURCE "${_placeholder_location}" PROPERTY MACOSX_PACKAGE_LOCATION "Resources") 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 From 9e7bddbd72fcdc056be2d35e0045ee959b9cd632 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 5 Oct 2023 18:58:52 +0200 Subject: [PATCH 13/13] libobs-d3d11: Remove unnecessary quoting of CMake generator expression --- libobs-d3d11/CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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