plugins: Add Linux-specific plugins for CMake build framework 3.0

This commit is contained in:
PatTheMav
2024-04-13 23:48:38 -04:00
committed by Ryan Foster
parent eee912b8ba
commit 4ecfdb722f
18 changed files with 357 additions and 98 deletions
+8 -7
View File
@@ -1,8 +1,11 @@
project(linux-alsa)
cmake_minimum_required(VERSION 3.22...3.25)
legacy_check()
option(ENABLE_ALSA "Build OBS with ALSA support" ON)
if(NOT ENABLE_ALSA)
obs_status(DISABLED "linux-alsa")
target_disable(linux-alsa)
return()
endif()
@@ -11,10 +14,8 @@ find_package(ALSA REQUIRED)
add_library(linux-alsa MODULE)
add_library(OBS::alsa ALIAS linux-alsa)
target_sources(linux-alsa PRIVATE linux-alsa.c alsa-input.c)
target_sources(linux-alsa PRIVATE # cmake-format: sortable
alsa-input.c linux-alsa.c)
target_link_libraries(linux-alsa PRIVATE OBS::libobs ALSA::ALSA)
set_target_properties(linux-alsa PROPERTIES FOLDER "plugins")
setup_plugin_target(linux-alsa)
set_target_properties_obs(linux-alsa PROPERTIES FOLDER plugins PREFIX "")
+20
View File
@@ -0,0 +1,20 @@
project(linux-alsa)
option(ENABLE_ALSA "Build OBS with ALSA support" ON)
if(NOT ENABLE_ALSA)
obs_status(DISABLED "linux-alsa")
return()
endif()
find_package(ALSA REQUIRED)
add_library(linux-alsa MODULE)
add_library(OBS::alsa ALIAS linux-alsa)
target_sources(linux-alsa PRIVATE linux-alsa.c alsa-input.c)
target_link_libraries(linux-alsa PRIVATE OBS::libobs ALSA::ALSA)
set_target_properties(linux-alsa PROPERTIES FOLDER "plugins")
setup_plugin_target(linux-alsa)
+27 -19
View File
@@ -1,37 +1,45 @@
project(linux-capture)
cmake_minimum_required(VERSION 3.22...3.25)
legacy_check()
find_package(X11 REQUIRED)
find_package(XCB COMPONENTS XCB XFIXES RANDR SHM XINERAMA COMPOSITE)
if(NOT TARGET XCB::COMPOSITE)
obs_status(FATAL_ERROR "xcb composite library not found")
endif()
# cmake-format: off
find_package(Xcb REQUIRED xcb
xcb-xfixes
xcb-randr
xcb-shm
xcb-xinerama
xcb-composite)
# cmake-format: on
add_library(linux-capture MODULE)
add_library(OBS::capture ALIAS linux-capture)
target_sources(
linux-capture
PRIVATE linux-capture.c
PRIVATE # cmake-format: sortable
linux-capture.c
xcomposite-input.c
xcomposite-input.h
xcursor-xcb.c
xcursor-xcb.h
xhelpers.c
xhelpers.h
xshm-input.c
xcomposite-input.c
xcomposite-input.h)
xshm-input.c)
target_link_libraries(
linux-capture
PRIVATE OBS::libobs
OBS::obsglad
OBS::glad
X11::X11
XCB::XCB
XCB::XFIXES
XCB::RANDR
XCB::SHM
XCB::XINERAMA
XCB::COMPOSITE)
xcb::xcb
xcb::xcb-xfixes
xcb::xcb-randr
xcb::xcb-shm
xcb::xcb-xinerama
xcb::xcb-composite)
set_target_properties(linux-capture PROPERTIES FOLDER "plugins")
setup_plugin_target(linux-capture)
# cmake-format: off
set_target_properties_obs(linux-capture PROPERTIES FOLDER "plugins")
# cmake-format: on
+37
View File
@@ -0,0 +1,37 @@
project(linux-capture)
find_package(X11 REQUIRED)
find_package(XCB COMPONENTS XCB XFIXES RANDR SHM XINERAMA COMPOSITE)
if(NOT TARGET XCB::COMPOSITE)
obs_status(FATAL_ERROR "xcb composite library not found")
endif()
add_library(linux-capture MODULE)
add_library(OBS::capture ALIAS linux-capture)
target_sources(
linux-capture
PRIVATE linux-capture.c
xcursor-xcb.c
xcursor-xcb.h
xhelpers.c
xhelpers.h
xshm-input.c
xcomposite-input.c
xcomposite-input.h)
target_link_libraries(
linux-capture
PRIVATE OBS::libobs
OBS::obsglad
X11::X11
XCB::XCB
XCB::XFIXES
XCB::RANDR
XCB::SHM
XCB::XINERAMA
XCB::COMPOSITE)
set_target_properties(linux-capture PROPERTIES FOLDER "plugins")
setup_plugin_target(linux-capture)
+9 -6
View File
@@ -1,8 +1,10 @@
project(linux-jack)
cmake_minimum_required(VERSION 3.22...3.25)
legacy_check()
option(ENABLE_JACK "Build OBS with JACK support" OFF)
if(NOT ENABLE_JACK)
obs_status(DISABLED "linux-jack")
target_disable(linux-jack)
return()
endif()
@@ -11,10 +13,11 @@ find_package(Jack REQUIRED)
add_library(linux-jack MODULE)
add_library(OBS::jack ALIAS linux-jack)
target_sources(linux-jack PRIVATE linux-jack.c jack-wrapper.c jack-input.c)
target_sources(linux-jack PRIVATE # cmake-format: sortable
jack-input.c jack-wrapper.c linux-jack.c)
target_compile_options(linux-jack PRIVATE $<$<COMPILE_LANG_AND_ID:C,Clang>:-Wno-error=sign-compare>)
target_link_libraries(linux-jack PRIVATE OBS::libobs Jack::Jack)
set_target_properties(linux-jack PROPERTIES FOLDER "plugins" PROJECT_LABEL "JACK Audio")
setup_plugin_target(linux-jack)
set_target_properties_obs(linux-jack PROPERTIES FOLDER plugins PREFIX "" PROJECT_LABEL "JACK Audio")
+20
View File
@@ -0,0 +1,20 @@
project(linux-jack)
option(ENABLE_JACK "Build OBS with JACK support" OFF)
if(NOT ENABLE_JACK)
obs_status(DISABLED "linux-jack")
return()
endif()
find_package(Jack REQUIRED)
add_library(linux-jack MODULE)
add_library(OBS::jack ALIAS linux-jack)
target_sources(linux-jack PRIVATE linux-jack.c jack-wrapper.c jack-input.c)
target_link_libraries(linux-jack PRIVATE OBS::libobs Jack::Jack)
set_target_properties(linux-jack PROPERTIES FOLDER "plugins" PROJECT_LABEL "JACK Audio")
setup_plugin_target(linux-jack)
+21 -22
View File
@@ -1,29 +1,34 @@
project(linux-pipewire)
cmake_minimum_required(VERSION 3.22...3.25)
legacy_check()
option(ENABLE_PIPEWIRE "Enable PipeWire support" ON)
if(NOT ENABLE_PIPEWIRE)
obs_status(DISABLED "linux-pipewire")
target_disable(linux-pipewire)
return()
endif()
find_package(PipeWire 0.3.33 REQUIRED)
find_package(Gio QUIET)
find_package(Libdrm QUIET) # we require libdrm/drm_fourcc.h to build
if(NOT TARGET PipeWire::PipeWire)
obs_status(FATAL_ERROR "PipeWire library not found! Please install PipeWire or set ENABLE_PIPEWIRE=OFF.")
elseif(NOT TARGET GIO::GIO)
obs_status(FATAL_ERROR "Gio library not found! Please install GLib2 (or Gio) or set ENABLE_PIPEWIRE=OFF.")
elseif(NOT TARGET Libdrm::Libdrm)
obs_status(FATAL_ERROR "libdrm headers not found! Please install libdrm or set ENABLE_PIPEWIRE=OFF.")
endif()
find_package(Gio REQUIRED)
find_package(Libdrm REQUIRED)
get_target_property(libdrm_include_directories Libdrm::Libdrm INTERFACE_INCLUDE_DIRECTORIES)
add_library(linux-pipewire MODULE)
add_library(OBS::pipewire ALIAS linux-pipewire)
if(PipeWire_VERSION VERSION_GREATER_EQUAL 0.3.60)
target_enable_feature(linux-pipewire "PipeWire 0.3.60+ camera support")
set(_HAS_PIPEWIRE_CAMERA TRUE)
else()
set(_HAS_PIPEWIRE_CAMERA FALSE)
endif()
target_sources(
linux-pipewire
PRIVATE formats.c
PRIVATE # cmake-format: sortable
$<$<BOOL:${_HAS_PIPEWIRE_CAMERA}>:camera-portal.c>
$<$<BOOL:${_HAS_PIPEWIRE_CAMERA}>:camera-portal.h>
formats.c
formats.h
linux-pipewire.c
pipewire.c
@@ -33,14 +38,8 @@ target_sources(
screencast-portal.c
screencast-portal.h)
target_link_libraries(linux-pipewire PRIVATE OBS::libobs OBS::obsglad PipeWire::PipeWire GIO::GIO Libdrm::Libdrm)
target_include_directories(linux-pipewire PRIVATE ${libdrm_include_directories})
if(PIPEWIRE_VERSION VERSION_GREATER_EQUAL 0.3.60)
obs_status(STATUS "PipeWire 0.3.60+ found, enabling camera support")
target_link_libraries(linux-pipewire PRIVATE OBS::libobs OBS::glad PipeWire::PipeWire gio::gio)
target_sources(linux-pipewire PRIVATE camera-portal.c camera-portal.h)
endif()
set_target_properties(linux-pipewire PROPERTIES FOLDER "plugins")
setup_plugin_target(linux-pipewire)
set_target_properties_obs(linux-pipewire PROPERTIES FOLDER plugins PREFIX "")
+46
View File
@@ -0,0 +1,46 @@
project(linux-pipewire)
option(ENABLE_PIPEWIRE "Enable PipeWire support" ON)
if(NOT ENABLE_PIPEWIRE)
obs_status(DISABLED "linux-pipewire")
return()
endif()
find_package(PipeWire 0.3.33 REQUIRED)
find_package(Gio QUIET)
find_package(Libdrm QUIET) # we require libdrm/drm_fourcc.h to build
if(NOT TARGET PipeWire::PipeWire)
obs_status(FATAL_ERROR "PipeWire library not found! Please install PipeWire or set ENABLE_PIPEWIRE=OFF.")
elseif(NOT TARGET GIO::GIO)
obs_status(FATAL_ERROR "Gio library not found! Please install GLib2 (or Gio) or set ENABLE_PIPEWIRE=OFF.")
elseif(NOT TARGET Libdrm::Libdrm)
obs_status(FATAL_ERROR "libdrm headers not found! Please install libdrm or set ENABLE_PIPEWIRE=OFF.")
endif()
add_library(linux-pipewire MODULE)
add_library(OBS::pipewire ALIAS linux-pipewire)
target_sources(
linux-pipewire
PRIVATE formats.c
formats.h
linux-pipewire.c
pipewire.c
pipewire.h
portal.c
portal.h
screencast-portal.c
screencast-portal.h)
target_link_libraries(linux-pipewire PRIVATE OBS::libobs OBS::obsglad PipeWire::PipeWire GIO::GIO Libdrm::Libdrm)
if(PIPEWIRE_VERSION VERSION_GREATER_EQUAL 0.3.60)
obs_status(STATUS "PipeWire 0.3.60+ found, enabling camera support")
target_sources(linux-pipewire PRIVATE camera-portal.c camera-portal.h)
endif()
set_target_properties(linux-pipewire PROPERTIES FOLDER "plugins")
setup_plugin_target(linux-pipewire)
+8 -10
View File
@@ -1,7 +1,9 @@
project(linux-pulseaudio)
cmake_minimum_required(VERSION 3.22...3.25)
legacy_check()
if(NOT ENABLE_PULSEAUDIO)
obs_status(DISABLED "linux-pulseaudio")
target_disable(linux-pulseaudio)
return()
endif()
@@ -10,12 +12,8 @@ find_package(PulseAudio REQUIRED)
add_library(linux-pulseaudio MODULE)
add_library(OBS::pulseaudio ALIAS linux-pulseaudio)
target_sources(linux-pulseaudio PRIVATE linux-pulseaudio.c pulse-wrapper.c pulse-input.c)
target_sources(linux-pulseaudio PRIVATE # cmake-format: sortable
linux-pulseaudio.c pulse-input.c pulse-wrapper.c)
target_link_libraries(linux-pulseaudio PRIVATE OBS::libobs PulseAudio::PulseAudio)
target_include_directories(linux-pulseaudio PRIVATE ${PULSEAUDIO_INCLUDE_DIR})
target_link_libraries(linux-pulseaudio PRIVATE OBS::libobs ${PULSEAUDIO_LIBRARY})
set_target_properties(linux-pulseaudio PROPERTIES FOLDER "plugins")
setup_plugin_target(linux-pulseaudio)
set_target_properties_obs(linux-pulseaudio PROPERTIES FOLDER plugins PREFIX "")
@@ -0,0 +1,21 @@
project(linux-pulseaudio)
if(NOT ENABLE_PULSEAUDIO)
obs_status(DISABLED "linux-pulseaudio")
return()
endif()
find_package(PulseAudio REQUIRED)
add_library(linux-pulseaudio MODULE)
add_library(OBS::pulseaudio ALIAS linux-pulseaudio)
target_sources(linux-pulseaudio PRIVATE linux-pulseaudio.c pulse-wrapper.c pulse-input.c)
target_include_directories(linux-pulseaudio PRIVATE ${PULSEAUDIO_INCLUDE_DIR})
target_link_libraries(linux-pulseaudio PRIVATE OBS::libobs ${PULSEAUDIO_LIBRARY})
set_target_properties(linux-pulseaudio PROPERTIES FOLDER "plugins")
setup_plugin_target(linux-pulseaudio)
+23 -11
View File
@@ -1,31 +1,43 @@
project(linux-v4l2)
cmake_minimum_required(VERSION 3.22...3.25)
legacy_check()
option(ENABLE_V4L2 "Build OBS with v4l2 support" ON)
option(ENABLE_UDEV "Build linux-v4l2 with UDEV support" ON)
if(NOT ENABLE_V4L2)
obs_status(DISABLED "linux-v4l2")
target_disable(linux-v4l2)
return()
endif()
option(ENABLE_UDEV "Build linux-v4l2 with UDEV support" ON)
find_package(Libv4l2 REQUIRED)
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
if(OS_FREEBSD OR OS_OPENBSD)
set(CMAKE_REQUIRED_INCLUDES "/usr/local/include")
endif()
include(CheckCSourceCompiles)
set(V4L_TEST_SOURCE "#include<linux/videodev2.h>\nint main(){return 0;}")
check_c_source_compiles("${V4L_TEST_SOURCE}" HAVE_VIDEODEV2_HEADER)
if(NOT HAVE_VIDEODEV2_HEADER)
message(FATAL_ERROR "Required system header <linux/videodev2.h> not found.")
endif()
add_library(linux-v4l2 MODULE)
add_library(OBS::v4l2 ALIAS linux-v4l2)
target_sources(linux-v4l2 PRIVATE linux-v4l2.c v4l2-controls.c v4l2-input.c v4l2-helpers.c v4l2-output.c v4l2-decoder.c)
target_sources(linux-v4l2 PRIVATE # cmake-format: sortable
linux-v4l2.c v4l2-controls.c v4l2-decoder.c v4l2-helpers.c v4l2-input.c v4l2-output.c)
target_link_libraries(linux-v4l2 PRIVATE OBS::libobs LIB4L2::LIB4L2 FFmpeg::avcodec FFmpeg::avformat FFmpeg::avutil)
set_target_properties(linux-v4l2 PROPERTIES FOLDER "plugins")
target_link_libraries(linux-v4l2 PRIVATE OBS::libobs Libv4l2::Libv4l2 FFmpeg::avcodec FFmpeg::avformat FFmpeg::avutil)
if(ENABLE_UDEV)
find_package(Udev REQUIRED)
find_package(Libudev REQUIRED)
target_sources(linux-v4l2 PRIVATE v4l2-udev.c)
target_link_libraries(linux-v4l2 PRIVATE Udev::Udev)
target_link_libraries(linux-v4l2 PRIVATE Libudev::Libudev)
target_compile_definitions(linux-v4l2 PRIVATE HAVE_UDEV)
endif()
setup_plugin_target(linux-v4l2)
set_target_properties_obs(linux-v4l2 PROPERTIES FOLDER plugins PREFIX "")
+31
View File
@@ -0,0 +1,31 @@
project(linux-v4l2)
option(ENABLE_V4L2 "Build OBS with v4l2 support" ON)
if(NOT ENABLE_V4L2)
obs_status(DISABLED "linux-v4l2")
return()
endif()
option(ENABLE_UDEV "Build linux-v4l2 with UDEV support" ON)
find_package(Libv4l2 REQUIRED)
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
add_library(linux-v4l2 MODULE)
add_library(OBS::v4l2 ALIAS linux-v4l2)
target_sources(linux-v4l2 PRIVATE linux-v4l2.c v4l2-controls.c v4l2-input.c v4l2-helpers.c v4l2-output.c v4l2-decoder.c)
target_link_libraries(linux-v4l2 PRIVATE OBS::libobs LIB4L2::LIB4L2 FFmpeg::avcodec FFmpeg::avformat FFmpeg::avutil)
set_target_properties(linux-v4l2 PROPERTIES FOLDER "plugins")
if(ENABLE_UDEV)
find_package(Udev REQUIRED)
target_sources(linux-v4l2 PRIVATE v4l2-udev.c)
target_link_libraries(linux-v4l2 PRIVATE Udev::Udev)
target_compile_definitions(linux-v4l2 PRIVATE HAVE_UDEV)
endif()
setup_plugin_target(linux-v4l2)
+6 -7
View File
@@ -1,9 +1,10 @@
project(obs-libfdk)
cmake_minimum_required(VERSION 3.22...3.25)
legacy_check()
option(ENABLE_LIBFDK "Enable FDK AAC support" OFF)
if(NOT ENABLE_LIBFDK)
obs_status(DISABLED "obs-libfdk")
target_disable(obs-libfdk)
return()
endif()
@@ -14,8 +15,6 @@ add_library(OBS::libfdk ALIAS obs-libfdk)
target_sources(obs-libfdk PRIVATE obs-libfdk.c)
target_link_libraries(obs-libfdk PRIVATE OBS::libobs LibFDK::LibFDK)
target_link_libraries(obs-libfdk PRIVATE OBS::libobs Libfdk::Libfdk)
set_target_properties(obs-libfdk PROPERTIES FOLDER "plugins" PREFIX "")
setup_plugin_target(obs-libfdk)
set_target_properties_obs(obs-libfdk PROPERTIES FOLDER plugins PREFIX "")
+21
View File
@@ -0,0 +1,21 @@
project(obs-libfdk)
option(ENABLE_LIBFDK "Enable FDK AAC support" OFF)
if(NOT ENABLE_LIBFDK)
obs_status(DISABLED "obs-libfdk")
return()
endif()
find_package(Libfdk REQUIRED)
add_library(obs-libfdk MODULE)
add_library(OBS::libfdk ALIAS obs-libfdk)
target_sources(obs-libfdk PRIVATE obs-libfdk.c)
target_link_libraries(obs-libfdk PRIVATE OBS::libobs LibFDK::LibFDK)
set_target_properties(obs-libfdk PROPERTIES FOLDER "plugins" PREFIX "")
setup_plugin_target(obs-libfdk)
+5 -11
View File
@@ -1,9 +1,11 @@
project(oss-audio)
cmake_minimum_required(VERSION 3.22...3.25)
legacy_check()
option(ENABLE_OSS "Enable building with OSS audio support" ON)
if(NOT ENABLE_OSS)
obs_status(DISABLED "oss-audio")
target_disable(oss-audio)
return()
endif()
@@ -16,12 +18,4 @@ target_sources(oss-audio PRIVATE oss-audio.c oss-input.c)
target_link_libraries(oss-audio PRIVATE OBS::libobs OSS::OSS)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/oss-platform.h.in oss-platform.h)
target_include_directories(oss-audio PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_sources(oss-audio PRIVATE oss-platform.h)
set_target_properties(oss-audio PROPERTIES FOLDER "plugins")
setup_plugin_target(oss-audio)
set_target_properties_obs(oss-audio PROPERTIES FOLDER plugins PREFIX "")
+27
View File
@@ -0,0 +1,27 @@
project(oss-audio)
option(ENABLE_OSS "Enable building with OSS audio support" ON)
if(NOT ENABLE_OSS)
obs_status(DISABLED "oss-audio")
return()
endif()
find_package(OSS REQUIRED)
add_library(oss-audio MODULE)
add_library(OBS::oss-audio ALIAS oss-audio)
target_sources(oss-audio PRIVATE oss-audio.c oss-input.c)
target_link_libraries(oss-audio PRIVATE OBS::libobs OSS::OSS)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/oss-platform.h.in oss-platform.h)
target_include_directories(oss-audio PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_sources(oss-audio PRIVATE oss-platform.h)
set_target_properties(oss-audio PROPERTIES FOLDER "plugins")
setup_plugin_target(oss-audio)
+7 -5
View File
@@ -1,8 +1,10 @@
project(sndio)
cmake_minimum_required(VERSION 3.22...3.25)
legacy_check()
option(ENABLE_SNDIO "Build OBS with sndio support" OFF)
if(NOT ENABLE_SNDIO)
obs_status(DISABLED "sndio")
target_disable(sndio)
return()
endif()
@@ -13,8 +15,8 @@ add_library(OBS::sndio ALIAS sndio)
target_sources(sndio PRIVATE sndio.c sndio-input.c)
target_compile_options(sndio PRIVATE -Wno-error=vla)
target_link_libraries(sndio PRIVATE OBS::libobs Sndio::Sndio)
set_target_properties(sndio PROPERTIES FOLDER "plugins")
setup_plugin_target(sndio)
set_target_properties_obs(sndio PROPERTIES FOLDER plugins PREFIX "")
+20
View File
@@ -0,0 +1,20 @@
project(sndio)
option(ENABLE_SNDIO "Build OBS with sndio support" OFF)
if(NOT ENABLE_SNDIO)
obs_status(DISABLED "sndio")
return()
endif()
find_package(Sndio REQUIRED)
add_library(sndio MODULE)
add_library(OBS::sndio ALIAS sndio)
target_sources(sndio PRIVATE sndio.c sndio-input.c)
target_link_libraries(sndio PRIVATE OBS::libobs Sndio::Sndio)
set_target_properties(sndio PROPERTIES FOLDER "plugins")
setup_plugin_target(sndio)