CMakeLists.txt 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. elseif(OS_POSIX)
  84. set_target_properties(obs-outputs PROPERTIES CXX_VISIBILITY_PRESET hidden)
  85. endif()
  86. endif()
  87. else()
  88. target_compile_definitions(obs-outputs PRIVATE NO_CRYPTO)
  89. endif()
  90. find_package(PkgConfig QUIET)
  91. if(PKG_CONFIG_FOUND)
  92. pkg_check_modules(FTL QUIET libftl)
  93. endif()
  94. if(FTL_FOUND)
  95. find_package(CURL REQUIRED)
  96. obs_status(ENABLED "ftl outputs (system ftl-sdk)")
  97. target_sources(obs-outputs PRIVATE ftl-stream.c)
  98. target_include_directories(obs-outputs PRIVATE ${FTL_INCLUDE_DIRS})
  99. target_link_libraries(obs-outputs PRIVATE ${FTL_LIBRARIES} CURL::libcurl)
  100. target_compile_features(obs-outputs PRIVATE c_std_11)
  101. target_compile_definitions(obs-outputs PRIVATE FTL_FOUND)
  102. elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/CMakeLists.txt")
  103. find_package(CURL REQUIRED)
  104. obs_status(ENABLED "ftl ouputs (bundled ftl-sdk)")
  105. target_compile_definitions(obs-outputs PRIVATE FTL_STATIC_COMPILE)
  106. target_compile_features(obs-outputs PRIVATE c_std_11)
  107. target_link_libraries(obs-outputs PRIVATE Jansson::Jansson CURL::libcurl)
  108. target_sources(
  109. obs-outputs
  110. PRIVATE ftl-stream.c
  111. ftl-sdk/libftl/ftl.h
  112. ftl-sdk/libftl/ftl_private.h
  113. ftl-sdk/libftl/hmac/hmac.c
  114. ftl-sdk/libftl/hmac/hmac.h
  115. ftl-sdk/libftl/hmac/sha2.c
  116. ftl-sdk/libftl/hmac/sha2.h
  117. ftl-sdk/libftl/ftl-sdk.c
  118. ftl-sdk/libftl/handshake.c
  119. ftl-sdk/libftl/ingest.c
  120. ftl-sdk/libftl/ftl_helpers.c
  121. ftl-sdk/libftl/media.c
  122. ftl-sdk/libftl/gettimeofday/gettimeofday.c
  123. ftl-sdk/libftl/logging.c)
  124. target_include_directories(obs-outputs
  125. PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl)
  126. if(OS_WINDOWS)
  127. target_sources(
  128. obs-outputs
  129. PRIVATE ftl-sdk/libftl/gettimeofday/gettimeofday.c
  130. ftl-sdk/libftl/gettimeofday/gettimeofday.h
  131. ftl-sdk/libftl/win32/socket.c
  132. ftl-sdk/libftl/win32/threads.c
  133. ftl-sdk/libftl/win32/threads.h)
  134. target_include_directories(
  135. obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/win32)
  136. elseif(OS_POSIX)
  137. target_sources(
  138. obs-outputs
  139. PRIVATE ftl-sdk/libftl/posix/socket.c ftl-sdk/libftl/posix/threads.c
  140. ftl-sdk/libftl/posix/threads.h)
  141. target_include_directories(
  142. obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/posix)
  143. endif()
  144. target_compile_definitions(obs-outputs PRIVATE FTL_FOUND)
  145. endif()
  146. setup_plugin_target(obs-outputs)