CMakeLists.txt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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. endif()
  37. target_link_libraries(obs-outputs PRIVATE ws2_32 winmm Iphlpapi)
  38. endif()
  39. if(ENABLE_RTMPS STREQUAL "AUTO" OR ENABLE_RTMPS STREQUAL "ON")
  40. find_package(MbedTLS)
  41. find_package(ZLIB)
  42. if(NOT MBEDTLS_FOUND OR NOT ZLIB_FOUND)
  43. if(ENABLE_RTMPS STREQUAL "ON")
  44. obs_status(FATAL_ERROR
  45. "mbedTLS or zlib not found, but required for RTMPS support.")
  46. return()
  47. else()
  48. obs_status(
  49. WARNING
  50. "mbedTLS or zlib was not found, RTMPS will be automatically disabled.")
  51. target_compile_definitions(obs-outputs PRIVATE NO_CRYPTO)
  52. endif()
  53. else()
  54. target_sources(
  55. obs-outputs
  56. PRIVATE librtmp/amf.c
  57. librtmp/amf.h
  58. librtmp/bytes.h
  59. librtmp/cencode.c
  60. librtmp/cencode.h
  61. librtmp/handshake.h
  62. librtmp/hashswf.c
  63. librtmp/http.h
  64. librtmp/log.c
  65. librtmp/log.h
  66. librtmp/md5.c
  67. librtmp/md5.h
  68. librtmp/parseurl.c
  69. librtmp/rtmp.c
  70. librtmp/rtmp.h
  71. librtmp/rtmp_sys.h)
  72. target_compile_definitions(obs-outputs PRIVATE USE_MBEDTLS CRYPTO)
  73. target_link_libraries(obs-outputs PRIVATE Mbedtls::Mbedtls ZLIB::ZLIB)
  74. if(OS_WINDOWS)
  75. target_link_libraries(obs-outputs PRIVATE crypt32)
  76. elseif(OS_MACOS)
  77. find_library(FOUNDATION_FRAMEWORK Foundation)
  78. find_library(SECURITY_FRAMEWORK Security)
  79. mark_as_advanced(FOUNDATION_FRAMEWORK SECURITY_FRAMEWORK)
  80. target_link_libraries(obs-outputs PRIVATE ${FOUNDATION_FRAMEWORK}
  81. ${SECURITY_FRAMEWORK})
  82. set_target_properties(obs-outputs PROPERTIES CXX_VISIBILITY_PRESET hidden)
  83. set_target_properties(obs-outputs PROPERTIES C_VISIBILITY_PRESET hidden)
  84. elseif(OS_POSIX)
  85. set_target_properties(obs-outputs PROPERTIES CXX_VISIBILITY_PRESET hidden)
  86. set_target_properties(obs-outputs PROPERTIES C_VISIBILITY_PRESET hidden)
  87. endif()
  88. endif()
  89. else()
  90. target_compile_definitions(obs-outputs PRIVATE NO_CRYPTO)
  91. endif()
  92. find_package(PkgConfig QUIET)
  93. if(PKG_CONFIG_FOUND)
  94. pkg_check_modules(FTL QUIET libftl)
  95. endif()
  96. if(FTL_FOUND)
  97. find_package(CURL REQUIRED)
  98. obs_status(ENABLED "ftl outputs (system ftl-sdk)")
  99. target_sources(obs-outputs PRIVATE ftl-stream.c)
  100. target_include_directories(obs-outputs PRIVATE ${FTL_INCLUDE_DIRS})
  101. target_link_libraries(obs-outputs PRIVATE ${FTL_LIBRARIES} CURL::libcurl)
  102. target_compile_features(obs-outputs PRIVATE c_std_11)
  103. target_compile_definitions(obs-outputs PRIVATE FTL_FOUND)
  104. elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/CMakeLists.txt")
  105. find_package(CURL REQUIRED)
  106. obs_status(ENABLED "ftl ouputs (bundled ftl-sdk)")
  107. target_compile_definitions(obs-outputs PRIVATE FTL_STATIC_COMPILE)
  108. target_compile_features(obs-outputs PRIVATE c_std_11)
  109. target_link_libraries(obs-outputs PRIVATE Jansson::Jansson CURL::libcurl)
  110. target_sources(
  111. obs-outputs
  112. PRIVATE ftl-stream.c
  113. ftl-sdk/libftl/ftl.h
  114. ftl-sdk/libftl/ftl_private.h
  115. ftl-sdk/libftl/hmac/hmac.c
  116. ftl-sdk/libftl/hmac/hmac.h
  117. ftl-sdk/libftl/hmac/sha2.c
  118. ftl-sdk/libftl/hmac/sha2.h
  119. ftl-sdk/libftl/ftl-sdk.c
  120. ftl-sdk/libftl/handshake.c
  121. ftl-sdk/libftl/ingest.c
  122. ftl-sdk/libftl/ftl_helpers.c
  123. ftl-sdk/libftl/media.c
  124. ftl-sdk/libftl/gettimeofday/gettimeofday.c
  125. ftl-sdk/libftl/logging.c)
  126. target_include_directories(obs-outputs
  127. PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl)
  128. if(OS_WINDOWS)
  129. target_sources(
  130. obs-outputs
  131. PRIVATE ftl-sdk/libftl/gettimeofday/gettimeofday.c
  132. ftl-sdk/libftl/gettimeofday/gettimeofday.h
  133. ftl-sdk/libftl/win32/socket.c
  134. ftl-sdk/libftl/win32/threads.c
  135. ftl-sdk/libftl/win32/threads.h)
  136. target_include_directories(
  137. obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/win32)
  138. elseif(OS_POSIX)
  139. target_sources(
  140. obs-outputs
  141. PRIVATE ftl-sdk/libftl/posix/socket.c ftl-sdk/libftl/posix/threads.c
  142. ftl-sdk/libftl/posix/threads.h)
  143. target_include_directories(
  144. obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/posix)
  145. endif()
  146. target_compile_definitions(obs-outputs PRIVATE FTL_FOUND)
  147. endif()
  148. setup_plugin_target(obs-outputs)