plugins: Update Linux slice of cross-platform plugins for CMake 3.0

Also silences acknowledged compile warnings introduced by the updated
compiler settings in the CMake update.
This commit is contained in:
PatTheMav
2024-04-13 20:01:19 +02:00
committed by Ryan Foster
parent 4ecfdb722f
commit 34f8abae1f
9 changed files with 102 additions and 79 deletions

View File

@@ -54,7 +54,9 @@ target_sources(
audio-repack.hpp
main.cpp)
target_compile_options(aja-support PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:-Wno-deprecated-declarations>)
target_compile_options(
aja-support PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang,GNU>:-Wno-deprecated-declarations>
$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:-Wno-unused-variable>)
target_link_libraries(
aja

View File

@@ -5,6 +5,10 @@ legacy_check()
option(ENABLE_FFMPEG_LOGGING "Enables obs-ffmpeg logging" OFF)
option(ENABLE_NEW_MPEGTS_OUTPUT "Use native SRT/RIST mpegts output" ON)
if(OS_LINUX)
option(ENABLE_NATIVE_NVENC "Use native NVENC implementation" ON)
endif()
include(cmake/dependencies.cmake)
add_library(obs-ffmpeg MODULE)
@@ -23,9 +27,6 @@ target_sources(
$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:obs-ffmpeg-vaapi.c>
$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:vaapi-utils.c>
$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:vaapi-utils.h>
$<$<PLATFORM_ID:Windows>:obs-nvenc-helpers.c>
$<$<PLATFORM_ID:Windows>:obs-nvenc.c>
$<$<PLATFORM_ID:Windows>:obs-nvenc.h>
$<$<PLATFORM_ID:Windows>:texture-amf-opts.hpp>
$<$<PLATFORM_ID:Windows>:texture-amf.cpp>
obs-ffmpeg-audio-encoders.c
@@ -58,10 +59,9 @@ target_link_libraries(
FFmpeg::avutil
FFmpeg::swscale
FFmpeg::swresample
$<$<PLATFORM_ID:Windows>:OBS::obs-nvenc-version>
$<TARGET_NAME_IF_EXISTS:OBS::obs-nvenc-native>
$<$<PLATFORM_ID:Windows>:OBS::w32-pthreads>
$<$<PLATFORM_ID:Windows>:AMF::AMF>
$<$<PLATFORM_ID:Windows>:FFnvcodec::FFnvcodec>
$<$<PLATFORM_ID:Windows>:ws2_32>
$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libva::va>
$<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libva::drm>

View File

@@ -26,15 +26,7 @@ endif()
if(OS_WINDOWS)
find_package(AMF 1.4.29 REQUIRED)
find_package(FFnvcodec 12.0.0.0...<12.2.0.0 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
@@ -43,6 +35,32 @@ elseif(
find_package(Libpci REQUIRED)
endif()
if(OS_WINDOWS OR (OS_LINUX AND ENABLE_NATIVE_NVENC))
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}")
find_package(FFnvcodec 12.0.0.0...<12.2.0.0 REQUIRED)
if(OS_LINUX AND NOT TARGET OBS::glad)
add_subdirectory("${CMAKE_SOURCE_DIR}/deps/glad" "${CMAKE_BINARY_DIR}/deps/glad")
endif()
add_library(obs-nvenc-native INTERFACE)
add_library(OBS::obs-nvenc-native ALIAS obs-nvenc-native)
target_sources(obs-nvenc-native INTERFACE obs-nvenc-helpers.c obs-nvenc.c obs-nvenc.h)
target_compile_definitions(obs-nvenc-native INTERFACE $<$<PLATFORM_ID:Linux>:NVCODEC_AVAILABLE>)
target_include_directories(obs-nvenc-native INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(obs-nvenc-native INTERFACE FFnvcodec::FFnvcodec OBS::obs-nvenc-version
$<$<PLATFORM_ID:Linux>:OBS::glad>)
if(OS_WINDOWS)
add_subdirectory(obs-nvenc-test)
endif()
endif()
if(ENABLE_NEW_MPEGTS_OUTPUT)
find_package(Librist QUIET)
find_package(Libsrt QUIET)

View File

@@ -34,9 +34,10 @@ target_link_libraries(obs-filters PRIVATE OBS::libobs $<$<PLATFORM_ID:Windows>:O
include(cmake/speexdsp.cmake)
include(cmake/rnnoise.cmake)
include(cmake/nvidia.cmake)
if(OS_WINDOWS)
include(cmake/nvidia.cmake)
configure_file(cmake/windows/obs-module.rc.in obs-filters.rc)
target_sources(obs-filters PRIVATE obs-filters.rc)
endif()

View File

@@ -1,7 +1,5 @@
if(OS_WINDOWS)
option(ENABLE_NVAFX "Enable building with NVIDIA Audio Effects SDK (requires redistributable to be installed)" ON)
option(ENABLE_NVVFX "Enable building with NVIDIA Video Effects SDK (requires redistributable to be installed)" ON)
endif()
option(ENABLE_NVAFX "Enable building with NVIDIA Audio Effects SDK (requires redistributable to be installed)" ON)
option(ENABLE_NVVFX "Enable building with NVIDIA Video Effects SDK (requires redistributable to be installed)" ON)
if(ENABLE_NVAFX)
target_enable_feature(obs-filters "NVIDIA Audio FX support" LIBNVAFX_ENABLED HAS_NOISEREDUCTION)

View File

@@ -1,47 +1,53 @@
option(ENABLE_RNNOISE "Enable building with RNNoise noise supression filter" ON)
if(ENABLE_RNNOISE)
if(NOT OS_WINDOWS AND NOT OS_MACOS)
add_library(obs-rnnoise OBJECT)
target_sources(
obs-rnnoise
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 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/rnnoise/include")
target_compile_definitions(obs-rnnoise PUBLIC COMPILE_OPUS)
target_compile_options(obs-rnnoise PRIVATE -Wno-newline-eof -Wno-error=null-dereference)
set_target_properties(obs-rnnoise PROPERTIES FOLDER plugins/obs-filters/rnnoise POSITION_INDEPENDENT_CODE TRUE)
else()
if(OS_WINDOWS OR OS_MACOS)
find_package(Librnnoise REQUIRED)
else()
find_package(Librnnoise)
target_sources(obs-filters PRIVATE noise-suppress-filter.c)
if(NOT TARGET Librnnoise::Librnnoise)
message(WARNING "No RNNoise library found. Using internal RNNoise version instead.")
add_library(obs-rnnoise OBJECT)
target_sources(
obs-rnnoise
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 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/rnnoise/include")
target_compile_definitions(obs-rnnoise PUBLIC COMPILE_OPUS)
target_compile_options(obs-rnnoise PRIVATE -Wno-newline-eof -Wno-error=null-dereference)
set_target_properties(obs-rnnoise PROPERTIES FOLDER plugins/obs-filters/rnnoise POSITION_INDEPENDENT_CODE TRUE)
endif()
endif()
target_sources(obs-filters PRIVATE noise-suppress-filter.c)
target_link_libraries(obs-filters PRIVATE Librnnoise::Librnnoise)
target_enable_feature(obs-filters "RNNoise noise suppression" LIBRNNOISE_ENABLED HAS_NOISEREDUCTION)
else()
target_disable_feature(obs-filters "RNNoise noise suppression")

View File

@@ -55,11 +55,11 @@ target_include_directories(
"$<$<NOT:$<PLATFORM_ID:Windows>>:${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)
target_compile_options(ftl-sdk PRIVATE -Wno-error=enum-conversion -Wno-error=maybe-uninitialized)
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")
set_target_properties(ftl-sdk PROPERTIES FOLDER plugins/obs-outputs)
set_target_properties(ftl-sdk PROPERTIES FOLDER plugins/obs-outputs POSITION_INDEPENDENT_CODE TRUE)

View File

@@ -3,24 +3,22 @@ cmake_minimum_required(VERSION 3.22...3.25)
legacy_check()
macro(check_vlc_path)
if(OS_WINDOWS OR OS_MACOS)
if(NOT EXISTS "${VLC_PATH}/include/vlc/libvlc.h")
message(FATAL_ERROR "Unable to find libvlc.h. Check if VLC_PATH set correctly.")
endif()
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_Libvlc QUIET libvlc)
endif()
target_include_directories(vlc-video PRIVATE "${VLC_PATH}/include/vlc")
elseif(
OS_LINUX
OR OS_FREEBSD
OR OS_OPENBSD)
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_Libvlc QUIET libvlc)
endif()
find_path(
LibVLC_INCLUDE_DIR
NAMES vlc/libvlc.h
HINTS ${PC_Libvlc_INCLUDEDIR} ${VLC_PATH}/include
PATHS /usr/include /usr/local/include
DOC "LibVLC include directory")
if(PC_Libvlc_INCLUDEDIR)
target_include_directories(vlc-video PRIVATE "${PC_Libvlc_INCLUDEDIR}/vlc")
endif()
if(LibVLC_INCLUDE_DIR)
target_include_directories(vlc-video PRIVATE "${LibVLC_INCLUDE_DIR}")
else()
message(FATAL_ERROR "Required system header <vlc/libvlc.h> not found.")
endif()
endmacro()

View File

@@ -1,16 +1,16 @@
#include <obs-module.h>
#include <libvlc.h>
#include <vlc/libvlc.h>
#ifdef _MSC_VER
#include <basetsd.h>
typedef SSIZE_T ssize_t;
#endif
#include <libvlc_media.h>
#include <libvlc_events.h>
#include <libvlc_media_list.h>
#include <libvlc_media_player.h>
#include <libvlc_media_list_player.h>
#include <vlc/libvlc_media.h>
#include <vlc/libvlc_events.h>
#include <vlc/libvlc_media_list.h>
#include <vlc/libvlc_media_player.h>
#include <vlc/libvlc_media_list_player.h>
extern libvlc_instance_t *libvlc;
extern uint64_t time_start;