obs-studio/plugins/obs-outputs/CMakeLists.txt

186 lines
5.6 KiB
CMake

project(obs-outputs)
if(NOT DEFINED ENABLE_RTMPS)
set(ENABLE_RTMPS
AUTO
CACHE STRING "Enable RTMPS support with mbedTLS" FORCE)
set_property(CACHE ENABLE_RTMPS PROPERTY STRINGS AUTO ON OFF)
endif()
option(ENABLE_STATIC_MBEDTLS "Enable statically linking mbedTLS into binary"
OFF)
mark_as_advanced(ENABLE_STATIC_MBEDTLS)
add_library(obs-outputs MODULE)
add_library(OBS::outputs ALIAS obs-outputs)
target_sources(
obs-outputs
PRIVATE obs-outputs.c
obs-output-ver.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)
target_link_libraries(obs-outputs PRIVATE OBS::libobs)
set_target_properties(obs-outputs PROPERTIES FOLDER "plugins" PREFIX "")
if(OS_WINDOWS)
set(MODULE_DESCRIPTION "OBS output module")
configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in
obs-outputs.rc)
target_sources(obs-outputs PRIVATE obs-outputs.rc)
if(MSVC)
target_link_libraries(obs-outputs PRIVATE OBS::w32-pthreads)
target_link_options(obs-outputs PRIVATE "LINKER:/IGNORE:4098"
"LINKER:/IGNORE:4099")
endif()
target_link_libraries(obs-outputs PRIVATE ws2_32 winmm Iphlpapi)
endif()
if(ENABLE_RTMPS STREQUAL "AUTO" OR ENABLE_RTMPS STREQUAL "ON")
find_package(MbedTLS)
find_package(ZLIB)
if(NOT MBEDTLS_FOUND OR NOT ZLIB_FOUND)
if(ENABLE_RTMPS STREQUAL "ON")
obs_status(FATAL_ERROR
"mbedTLS or zlib not found, but required for RTMPS support.")
return()
else()
obs_status(
WARNING
"mbedTLS or zlib was not found, RTMPS will be automatically disabled.")
target_compile_definitions(obs-outputs PRIVATE NO_CRYPTO)
endif()
else()
target_sources(
obs-outputs
PRIVATE librtmp/amf.c
librtmp/amf.h
librtmp/bytes.h
librtmp/cencode.c
librtmp/cencode.h
librtmp/handshake.h
librtmp/hashswf.c
librtmp/http.h
librtmp/log.c
librtmp/log.h
librtmp/md5.c
librtmp/md5.h
librtmp/parseurl.c
librtmp/rtmp.c
librtmp/rtmp.h
librtmp/rtmp_sys.h)
target_compile_definitions(obs-outputs PRIVATE USE_MBEDTLS CRYPTO)
target_link_libraries(obs-outputs PRIVATE Mbedtls::Mbedtls ZLIB::ZLIB)
if(OS_WINDOWS)
target_link_libraries(obs-outputs PRIVATE crypt32)
elseif(OS_MACOS)
find_library(FOUNDATION_FRAMEWORK Foundation)
find_library(SECURITY_FRAMEWORK Security)
mark_as_advanced(FOUNDATION_FRAMEWORK SECURITY_FRAMEWORK)
target_link_libraries(obs-outputs PRIVATE ${FOUNDATION_FRAMEWORK}
${SECURITY_FRAMEWORK})
set_target_properties(obs-outputs PROPERTIES CXX_VISIBILITY_PRESET hidden)
set_target_properties(obs-outputs PROPERTIES C_VISIBILITY_PRESET hidden)
elseif(OS_POSIX)
set_target_properties(obs-outputs PROPERTIES CXX_VISIBILITY_PRESET hidden)
set_target_properties(obs-outputs PROPERTIES C_VISIBILITY_PRESET hidden)
endif()
endif()
else()
target_compile_definitions(obs-outputs PRIVATE NO_CRYPTO)
endif()
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(FTL QUIET libftl)
endif()
if(FTL_FOUND)
find_package(CURL REQUIRED)
obs_status(ENABLED "ftl outputs (system ftl-sdk)")
target_sources(obs-outputs PRIVATE ftl-stream.c)
target_include_directories(obs-outputs PRIVATE ${FTL_INCLUDE_DIRS})
target_link_libraries(obs-outputs PRIVATE ${FTL_LIBRARIES} CURL::libcurl)
target_compile_features(obs-outputs PRIVATE c_std_11)
target_compile_definitions(obs-outputs PRIVATE FTL_FOUND)
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/CMakeLists.txt")
find_package(CURL REQUIRED)
obs_status(ENABLED "ftl ouputs (bundled ftl-sdk)")
target_compile_definitions(obs-outputs PRIVATE FTL_STATIC_COMPILE)
target_compile_features(obs-outputs PRIVATE c_std_11)
target_link_libraries(obs-outputs PRIVATE Jansson::Jansson CURL::libcurl)
target_sources(
obs-outputs
PRIVATE ftl-stream.c
ftl-sdk/libftl/ftl.h
ftl-sdk/libftl/ftl_private.h
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/ftl-sdk.c
ftl-sdk/libftl/handshake.c
ftl-sdk/libftl/ingest.c
ftl-sdk/libftl/ftl_helpers.c
ftl-sdk/libftl/media.c
ftl-sdk/libftl/gettimeofday/gettimeofday.c
ftl-sdk/libftl/logging.c)
target_include_directories(obs-outputs
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl)
if(OS_WINDOWS)
target_sources(
obs-outputs
PRIVATE 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(
obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/win32)
elseif(OS_POSIX)
target_sources(
obs-outputs
PRIVATE ftl-sdk/libftl/posix/socket.c ftl-sdk/libftl/posix/threads.c
ftl-sdk/libftl/posix/threads.h)
target_include_directories(
obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/posix)
endif()
target_compile_definitions(obs-outputs PRIVATE FTL_FOUND)
endif()
setup_plugin_target(obs-outputs)