CMakeLists.txt 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. project(obs-outputs)
  2. if(NOT DEFINED ENABLE_RTMPS)
  3. set(ENABLE_RTMPS
  4. AUTO
  5. CACHE STRING "Enable RTMPS support with mbedTLS" FORCE)
  6. set_property(CACHE ENABLE_RTMPS PROPERTY STRINGS AUTO ON OFF)
  7. endif()
  8. option(ENABLE_STATIC_MBEDTLS "Enable statically linking mbedTLS into binary"
  9. OFF)
  10. mark_as_advanced(ENABLE_STATIC_MBEDTLS)
  11. add_library(obs-outputs MODULE)
  12. add_library(OBS::outputs ALIAS obs-outputs)
  13. target_sources(
  14. obs-outputs
  15. PRIVATE obs-outputs.c
  16. obs-output-ver.h
  17. flv-mux.c
  18. flv-mux.h
  19. flv-output.c
  20. net-if.c
  21. net-if.h
  22. null-output.c
  23. rtmp-helpers.h
  24. rtmp-stream.c
  25. rtmp-stream.h
  26. rtmp-windows.c)
  27. target_link_libraries(obs-outputs PRIVATE OBS::libobs)
  28. set_target_properties(obs-outputs PROPERTIES FOLDER "plugins" PREFIX "")
  29. if(OS_WINDOWS)
  30. set(MODULE_DESCRIPTION "OBS output module")
  31. configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in
  32. obs-outputs.rc)
  33. target_sources(obs-outputs PRIVATE obs-outputs.rc)
  34. if(MSVC)
  35. target_link_libraries(obs-outputs PRIVATE OBS::w32-pthreads)
  36. target_link_options(obs-outputs PRIVATE "LINKER:/IGNORE:4098"
  37. "LINKER:/IGNORE:4099")
  38. endif()
  39. target_link_libraries(obs-outputs PRIVATE ws2_32 winmm Iphlpapi)
  40. endif()
  41. if(ENABLE_RTMPS STREQUAL "AUTO" OR ENABLE_RTMPS STREQUAL "ON")
  42. find_package(MbedTLS)
  43. find_package(ZLIB)
  44. if(NOT MBEDTLS_FOUND OR NOT ZLIB_FOUND)
  45. if(ENABLE_RTMPS STREQUAL "ON")
  46. obs_status(FATAL_ERROR
  47. "mbedTLS or zlib not found, but required for RTMPS support.")
  48. return()
  49. else()
  50. obs_status(
  51. WARNING
  52. "mbedTLS or zlib was not found, RTMPS will be automatically disabled.")
  53. target_compile_definitions(obs-outputs PRIVATE NO_CRYPTO)
  54. endif()
  55. else()
  56. target_sources(
  57. obs-outputs
  58. PRIVATE librtmp/amf.c
  59. librtmp/amf.h
  60. librtmp/bytes.h
  61. librtmp/cencode.c
  62. librtmp/cencode.h
  63. librtmp/handshake.h
  64. librtmp/hashswf.c
  65. librtmp/http.h
  66. librtmp/log.c
  67. librtmp/log.h
  68. librtmp/md5.c
  69. librtmp/md5.h
  70. librtmp/parseurl.c
  71. librtmp/rtmp.c
  72. librtmp/rtmp.h
  73. librtmp/rtmp_sys.h)
  74. target_compile_definitions(obs-outputs PRIVATE USE_MBEDTLS CRYPTO)
  75. target_link_libraries(obs-outputs PRIVATE Mbedtls::Mbedtls ZLIB::ZLIB)
  76. if(OS_WINDOWS)
  77. target_link_libraries(obs-outputs PRIVATE crypt32)
  78. elseif(OS_MACOS)
  79. find_library(FOUNDATION_FRAMEWORK Foundation)
  80. find_library(SECURITY_FRAMEWORK Security)
  81. mark_as_advanced(FOUNDATION_FRAMEWORK SECURITY_FRAMEWORK)
  82. target_link_libraries(obs-outputs PRIVATE ${FOUNDATION_FRAMEWORK}
  83. ${SECURITY_FRAMEWORK})
  84. set_target_properties(obs-outputs PROPERTIES CXX_VISIBILITY_PRESET hidden)
  85. set_target_properties(obs-outputs PROPERTIES C_VISIBILITY_PRESET hidden)
  86. elseif(OS_POSIX)
  87. set_target_properties(obs-outputs PROPERTIES CXX_VISIBILITY_PRESET hidden)
  88. set_target_properties(obs-outputs PROPERTIES C_VISIBILITY_PRESET hidden)
  89. endif()
  90. endif()
  91. else()
  92. target_compile_definitions(obs-outputs PRIVATE NO_CRYPTO)
  93. endif()
  94. find_package(PkgConfig QUIET)
  95. if(PKG_CONFIG_FOUND)
  96. pkg_check_modules(FTL QUIET libftl)
  97. endif()
  98. if(FTL_FOUND)
  99. find_package(CURL REQUIRED)
  100. obs_status(ENABLED "ftl outputs (system ftl-sdk)")
  101. target_sources(obs-outputs PRIVATE ftl-stream.c)
  102. target_include_directories(obs-outputs PRIVATE ${FTL_INCLUDE_DIRS})
  103. target_link_libraries(obs-outputs PRIVATE ${FTL_LIBRARIES} CURL::libcurl)
  104. target_compile_features(obs-outputs PRIVATE c_std_11)
  105. target_compile_definitions(obs-outputs PRIVATE FTL_FOUND)
  106. elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/CMakeLists.txt")
  107. find_package(CURL REQUIRED)
  108. obs_status(ENABLED "ftl ouputs (bundled ftl-sdk)")
  109. target_compile_definitions(obs-outputs PRIVATE FTL_STATIC_COMPILE)
  110. target_compile_features(obs-outputs PRIVATE c_std_11)
  111. target_link_libraries(obs-outputs PRIVATE Jansson::Jansson CURL::libcurl)
  112. target_sources(
  113. obs-outputs
  114. PRIVATE ftl-stream.c
  115. ftl-sdk/libftl/ftl.h
  116. ftl-sdk/libftl/ftl_private.h
  117. ftl-sdk/libftl/hmac/hmac.c
  118. ftl-sdk/libftl/hmac/hmac.h
  119. ftl-sdk/libftl/hmac/sha2.c
  120. ftl-sdk/libftl/hmac/sha2.h
  121. ftl-sdk/libftl/ftl-sdk.c
  122. ftl-sdk/libftl/handshake.c
  123. ftl-sdk/libftl/ingest.c
  124. ftl-sdk/libftl/ftl_helpers.c
  125. ftl-sdk/libftl/media.c
  126. ftl-sdk/libftl/gettimeofday/gettimeofday.c
  127. ftl-sdk/libftl/logging.c)
  128. target_include_directories(obs-outputs
  129. PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl)
  130. if(OS_WINDOWS)
  131. target_sources(
  132. obs-outputs
  133. PRIVATE ftl-sdk/libftl/gettimeofday/gettimeofday.c
  134. ftl-sdk/libftl/gettimeofday/gettimeofday.h
  135. ftl-sdk/libftl/win32/socket.c
  136. ftl-sdk/libftl/win32/threads.c
  137. ftl-sdk/libftl/win32/threads.h)
  138. target_include_directories(
  139. obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/win32)
  140. elseif(OS_POSIX)
  141. target_sources(
  142. obs-outputs
  143. PRIVATE ftl-sdk/libftl/posix/socket.c ftl-sdk/libftl/posix/threads.c
  144. ftl-sdk/libftl/posix/threads.h)
  145. target_include_directories(
  146. obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/posix)
  147. endif()
  148. if(NOT MSVC)
  149. target_compile_options(
  150. obs-outputs
  151. PRIVATE
  152. -Wno-error=extra
  153. -Wno-error=sign-compare
  154. -Wno-error=incompatible-pointer-types
  155. -Wno-error=int-conversion
  156. -Wno-error=unused-parameter
  157. -Wno-error=deprecated-declarations
  158. "$<$<COMPILE_LANG_AND_ID:C,GNU>:-Wno-error=maybe-uninitialized>"
  159. "$<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-error=pointer-sign>")
  160. if((NOT CMAKE_C_COMPILER_ID STREQUAL "GNU") OR CMAKE_C_COMPILER_VERSION
  161. VERSION_GREATER_EQUAL "10")
  162. target_compile_options(obs-outputs PRIVATE -Wno-error=enum-conversion)
  163. endif()
  164. endif()
  165. target_compile_definitions(obs-outputs PRIVATE FTL_FOUND)
  166. endif()
  167. setup_plugin_target(obs-outputs)