legacy.cmake 6.1 KB

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