CMakeLists.txt 5.4 KB

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