lib_tgvoip.cmake 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. # This file is part of Telegram Desktop,
  2. # the official desktop application for the Telegram messaging service.
  3. #
  4. # For license and copyright information please follow this link:
  5. # https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. add_library(lib_tgvoip INTERFACE IMPORTED GLOBAL)
  7. add_library(tdesktop::lib_tgvoip ALIAS lib_tgvoip)
  8. if (DESKTOP_APP_USE_PACKAGED)
  9. find_package(PkgConfig REQUIRED)
  10. pkg_check_modules(TGVOIP IMPORTED_TARGET tgvoip)
  11. if (TGVOIP_FOUND)
  12. target_link_libraries(lib_tgvoip INTERFACE PkgConfig::TGVOIP)
  13. return()
  14. endif()
  15. endif()
  16. include(CMakeDependentOption)
  17. add_library(lib_tgvoip_bundled STATIC)
  18. init_target(lib_tgvoip_bundled)
  19. cmake_dependent_option(LIBTGVOIP_DISABLE_ALSA "Disable libtgvoip's ALSA backend." OFF LINUX ON)
  20. cmake_dependent_option(LIBTGVOIP_DISABLE_PULSEAUDIO "Disable libtgvoip's PulseAudio backend." OFF LINUX ON)
  21. set(tgvoip_loc ${third_party_loc}/libtgvoip)
  22. nice_target_sources(lib_tgvoip_bundled ${tgvoip_loc}
  23. PRIVATE
  24. BlockingQueue.cpp
  25. BlockingQueue.h
  26. Buffers.cpp
  27. Buffers.h
  28. CongestionControl.cpp
  29. CongestionControl.h
  30. EchoCanceller.cpp
  31. EchoCanceller.h
  32. JitterBuffer.cpp
  33. JitterBuffer.h
  34. logging.cpp
  35. logging.h
  36. MediaStreamItf.cpp
  37. MediaStreamItf.h
  38. OpusDecoder.cpp
  39. OpusDecoder.h
  40. OpusEncoder.cpp
  41. OpusEncoder.h
  42. threading.h
  43. VoIPController.cpp
  44. VoIPGroupController.cpp
  45. VoIPController.h
  46. PrivateDefines.h
  47. VoIPServerConfig.cpp
  48. VoIPServerConfig.h
  49. audio/AudioInput.cpp
  50. audio/AudioInput.h
  51. audio/AudioOutput.cpp
  52. audio/AudioOutput.h
  53. audio/Resampler.cpp
  54. audio/Resampler.h
  55. NetworkSocket.cpp
  56. NetworkSocket.h
  57. PacketReassembler.cpp
  58. PacketReassembler.h
  59. MessageThread.cpp
  60. MessageThread.h
  61. audio/AudioIO.cpp
  62. audio/AudioIO.h
  63. video/ScreamCongestionController.cpp
  64. video/ScreamCongestionController.h
  65. video/VideoSource.cpp
  66. video/VideoSource.h
  67. video/VideoRenderer.cpp
  68. video/VideoRenderer.h
  69. json11.cpp
  70. json11.hpp
  71. # Windows
  72. os/windows/NetworkSocketWinsock.cpp
  73. os/windows/NetworkSocketWinsock.h
  74. os/windows/AudioInputWave.cpp
  75. os/windows/AudioInputWave.h
  76. os/windows/AudioOutputWave.cpp
  77. os/windows/AudioOutputWave.h
  78. os/windows/AudioOutputWASAPI.cpp
  79. os/windows/AudioOutputWASAPI.h
  80. os/windows/AudioInputWASAPI.cpp
  81. os/windows/AudioInputWASAPI.h
  82. os/windows/MinGWSupport.h
  83. os/windows/WindowsSpecific.cpp
  84. os/windows/WindowsSpecific.h
  85. # macOS
  86. os/darwin/AudioInputAudioUnit.cpp
  87. os/darwin/AudioInputAudioUnit.h
  88. os/darwin/AudioOutputAudioUnit.cpp
  89. os/darwin/AudioOutputAudioUnit.h
  90. os/darwin/AudioInputAudioUnitOSX.cpp
  91. os/darwin/AudioInputAudioUnitOSX.h
  92. os/darwin/AudioOutputAudioUnitOSX.cpp
  93. os/darwin/AudioOutputAudioUnitOSX.h
  94. os/darwin/AudioUnitIO.cpp
  95. os/darwin/AudioUnitIO.h
  96. os/darwin/DarwinSpecific.mm
  97. os/darwin/DarwinSpecific.h
  98. # Linux
  99. os/linux/AudioInputALSA.cpp
  100. os/linux/AudioInputALSA.h
  101. os/linux/AudioOutputALSA.cpp
  102. os/linux/AudioOutputALSA.h
  103. os/linux/AudioOutputPulse.cpp
  104. os/linux/AudioOutputPulse.h
  105. os/linux/AudioInputPulse.cpp
  106. os/linux/AudioInputPulse.h
  107. os/linux/AudioPulse.cpp
  108. os/linux/AudioPulse.h
  109. # POSIX
  110. os/posix/NetworkSocketPosix.cpp
  111. os/posix/NetworkSocketPosix.h
  112. )
  113. target_compile_definitions(lib_tgvoip_bundled
  114. PRIVATE
  115. TGVOIP_USE_DESKTOP_DSP
  116. )
  117. target_compile_options_if_exists(lib_tgvoip_bundled
  118. PRIVATE
  119. -Wno-unqualified-std-cast-call
  120. )
  121. if (WIN32)
  122. target_compile_options_if_exists(lib_tgvoip_bundled
  123. PRIVATE
  124. /wd4005 # 'identifier' : macro redefinition
  125. /wd4068 # unknown pragma
  126. /wd4996 # deprecated
  127. /wd5055 # operator '>' deprecated between enumerations and floating-point types
  128. )
  129. elseif (APPLE)
  130. target_compile_definitions(lib_tgvoip_bundled
  131. PUBLIC
  132. TARGET_OS_OSX
  133. TARGET_OSX
  134. )
  135. if (build_macstore)
  136. target_compile_definitions(lib_tgvoip_bundled
  137. PUBLIC
  138. TGVOIP_NO_OSX_PRIVATE_API
  139. )
  140. endif()
  141. else()
  142. add_library(lib_tgvoip_bundled_options INTERFACE)
  143. target_compile_options(lib_tgvoip_bundled_options
  144. INTERFACE
  145. -Wno-unused-variable
  146. -Wno-unknown-pragmas
  147. -Wno-error=sequence-point
  148. -Wno-error=unused-result
  149. )
  150. if (CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*")
  151. target_compile_options(lib_tgvoip_bundled_options INTERFACE -msse2)
  152. endif()
  153. target_link_libraries(lib_tgvoip_bundled
  154. PRIVATE
  155. lib_tgvoip_bundled_options
  156. )
  157. endif()
  158. target_include_directories(lib_tgvoip_bundled
  159. PUBLIC
  160. ${tgvoip_loc}
  161. )
  162. target_link_libraries(lib_tgvoip_bundled
  163. PRIVATE
  164. desktop-app::external_webrtc
  165. desktop-app::external_opus
  166. )
  167. if (LINUX)
  168. if (NOT LIBTGVOIP_DISABLE_ALSA)
  169. find_package(ALSA REQUIRED)
  170. target_include_directories(lib_tgvoip_bundled SYSTEM PRIVATE ${ALSA_INCLUDE_DIRS})
  171. else()
  172. remove_target_sources(lib_tgvoip_bundled ${tgvoip_loc}
  173. os/linux/AudioInputALSA.cpp
  174. os/linux/AudioInputALSA.h
  175. os/linux/AudioOutputALSA.cpp
  176. os/linux/AudioOutputALSA.h
  177. )
  178. target_compile_definitions(lib_tgvoip_bundled PRIVATE WITHOUT_ALSA)
  179. endif()
  180. if (NOT LIBTGVOIP_DISABLE_PULSEAUDIO)
  181. find_package(PkgConfig REQUIRED)
  182. pkg_check_modules(PULSE REQUIRED libpulse)
  183. target_include_directories(lib_tgvoip_bundled SYSTEM PRIVATE ${PULSE_INCLUDE_DIRS})
  184. else()
  185. remove_target_sources(lib_tgvoip_bundled ${tgvoip_loc}
  186. os/linux/AudioOutputPulse.cpp
  187. os/linux/AudioOutputPulse.h
  188. os/linux/AudioInputPulse.cpp
  189. os/linux/AudioInputPulse.h
  190. os/linux/AudioPulse.cpp
  191. os/linux/AudioPulse.h
  192. )
  193. target_compile_definitions(lib_tgvoip_bundled PRIVATE WITHOUT_PULSE)
  194. endif()
  195. endif()
  196. target_link_libraries(lib_tgvoip
  197. INTERFACE
  198. lib_tgvoip_bundled
  199. )