CMakeLists.txt 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. if(DISABLE_UI)
  2. message(STATUS "UI disabled")
  3. return()
  4. elseif(ENABLE_UI)
  5. set(FIND_MODE REQUIRED)
  6. else()
  7. set(FIND_MODE QUIET)
  8. endif()
  9. add_subdirectory(obs-frontend-api)
  10. # ----------------------------------------------------------------------------
  11. project(obs)
  12. set(DISABLE_UPDATE_MODULE TRUE CACHE BOOL "Disables building the update module")
  13. if(DEFINED QTDIR${_lib_suffix})
  14. list(APPEND CMAKE_PREFIX_PATH "${QTDIR${_lib_suffix}}")
  15. elseif(DEFINED QTDIR)
  16. list(APPEND CMAKE_PREFIX_PATH "${QTDIR}")
  17. elseif(DEFINED ENV{QTDIR${_lib_suffix}})
  18. list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR${_lib_suffix}}")
  19. elseif(DEFINED ENV{QTDIR})
  20. list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR}")
  21. endif()
  22. set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
  23. set(CMAKE_AUTOMOC TRUE)
  24. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  25. set(_lib_suffix 64)
  26. else()
  27. set(_lib_suffix 32)
  28. endif()
  29. find_package(Qt5Widgets ${FIND_MODE})
  30. find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
  31. if(APPLE)
  32. find_package(Qt5MacExtras REQUIRED)
  33. endif(APPLE)
  34. if(NOT Qt5Widgets_FOUND)
  35. if (ENABLE_UI)
  36. message(FATAL_ERROR "Failed to find Qt5")
  37. else()
  38. message(STATUS "Qt5 not found - UI disabled")
  39. return()
  40. endif()
  41. endif()
  42. include_directories(${FFMPEG_INCLUDE_DIRS})
  43. include_directories(SYSTEM "obs-frontend-api")
  44. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
  45. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/libff")
  46. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/json11")
  47. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel")
  48. find_package(Libcurl REQUIRED)
  49. include_directories(${LIBCURL_INCLUDE_DIRS})
  50. add_definitions(${LIBCURL_DEFINITIONS})
  51. if(WIN32)
  52. include_directories(${OBS_JANSSON_INCLUDE_DIRS})
  53. include_directories(${BLAKE2_INCLUDE_DIR})
  54. set(obs_PLATFORM_SOURCES
  55. platform-windows.cpp
  56. win-update/update-window.cpp
  57. win-update/win-update.cpp
  58. win-update/win-update-helpers.cpp
  59. obs.rc)
  60. set(obs_PLATFORM_HEADERS
  61. win-update/update-window.hpp
  62. win-update/win-update.hpp
  63. win-update/win-update-helpers.hpp)
  64. set(obs_PLATFORM_LIBRARIES
  65. crypt32
  66. blake2
  67. ${OBS_JANSSON_IMPORT})
  68. elseif(APPLE)
  69. set(obs_PLATFORM_SOURCES
  70. platform-osx.mm)
  71. find_package(AppKit REQUIRED)
  72. set(obs_PLATFORM_LIBRARIES ${APPKIT_LIBRARIES})
  73. add_definitions(-fobjc-arc)
  74. option(ENABLE_SPARKLE_UPDATER "Enables updates via the Sparkle framework (don't forget to update the Info.plist for your .app)" OFF)
  75. if(ENABLE_SPARKLE_UPDATER)
  76. find_library(SPARKLE Sparkle)
  77. include_directories(${SPARKLE})
  78. set(obs_PLATFORM_SOURCES
  79. ${obs_PLATFORM_SOURCES}
  80. sparkle-updater.mm)
  81. set(obs_PLATFORM_LIBRARIES
  82. ${obs_PLATFORM_LIBRARIES}
  83. ${SPARKLE})
  84. add_definitions(-DUPDATE_SPARKLE=1)
  85. endif()
  86. elseif(UNIX)
  87. find_package(Qt5X11Extras REQUIRED)
  88. set(obs_PLATFORM_SOURCES
  89. platform-x11.cpp)
  90. set(obs_PLATFORM_LIBRARIES
  91. Qt5::X11Extras)
  92. endif()
  93. set(obs_libffutil_SOURCES
  94. ../deps/libff/libff/ff-util.c
  95. )
  96. set(obs_libffutil_HEADERS
  97. ../deps/libff/libff/ff-util.h
  98. )
  99. if(MSVC)
  100. set_source_files_properties(
  101. ../deps/libff/libff/ff-util.c
  102. PROPERTIES COMPILE_FLAGS -Dinline=__inline
  103. )
  104. endif()
  105. set(obs_SOURCES
  106. ${obs_PLATFORM_SOURCES}
  107. ${obs_libffutil_SOURCES}
  108. ../deps/json11/json11.cpp
  109. obs-app.cpp
  110. api-interface.cpp
  111. window-basic-main.cpp
  112. window-basic-stats.cpp
  113. window-basic-filters.cpp
  114. window-basic-settings.cpp
  115. window-basic-interaction.cpp
  116. window-basic-properties.cpp
  117. window-basic-auto-config.cpp
  118. window-basic-main-outputs.cpp
  119. window-basic-source-select.cpp
  120. window-basic-auto-config-test.cpp
  121. window-basic-main-scene-collections.cpp
  122. window-basic-main-transitions.cpp
  123. window-basic-main-dropfiles.cpp
  124. window-basic-main-profiles.cpp
  125. window-license-agreement.cpp
  126. window-basic-status-bar.cpp
  127. window-basic-adv-audio.cpp
  128. window-basic-transform.cpp
  129. window-basic-preview.cpp
  130. window-namedialog.cpp
  131. window-log-reply.cpp
  132. window-projector.cpp
  133. window-remux.cpp
  134. source-tree.cpp
  135. properties-view.cpp
  136. focus-list.cpp
  137. menu-button.cpp
  138. double-slider.cpp
  139. volume-control.cpp
  140. adv-audio-control.cpp
  141. item-widget-helpers.cpp
  142. visibility-checkbox.cpp
  143. locked-checkbox.cpp
  144. horizontal-scroll-area.cpp
  145. vertical-scroll-area.cpp
  146. visibility-item-widget.cpp
  147. slider-absoluteset-style.cpp
  148. source-list-widget.cpp
  149. qt-display.cpp
  150. crash-report.cpp
  151. hotkey-edit.cpp
  152. source-label.cpp
  153. remote-text.cpp
  154. audio-encoders.cpp
  155. qt-wrappers.cpp)
  156. set(obs_HEADERS
  157. ${obs_PLATFORM_HEADERS}
  158. ${obs_libffutil_HEADERS}
  159. ../deps/json11/json11.hpp
  160. obs-app.hpp
  161. platform.hpp
  162. window-main.hpp
  163. window-basic-main.hpp
  164. window-basic-stats.hpp
  165. window-basic-filters.hpp
  166. window-basic-settings.hpp
  167. window-basic-interaction.hpp
  168. window-basic-properties.hpp
  169. window-basic-auto-config.hpp
  170. window-basic-main-outputs.hpp
  171. window-basic-source-select.hpp
  172. window-license-agreement.hpp
  173. window-basic-status-bar.hpp
  174. window-basic-adv-audio.hpp
  175. window-basic-transform.hpp
  176. window-basic-preview.hpp
  177. window-namedialog.hpp
  178. window-log-reply.hpp
  179. window-projector.hpp
  180. window-remux.hpp
  181. source-tree.hpp
  182. properties-view.hpp
  183. properties-view.moc.hpp
  184. display-helpers.hpp
  185. double-slider.hpp
  186. focus-list.hpp
  187. menu-button.hpp
  188. mute-checkbox.hpp
  189. volume-control.hpp
  190. adv-audio-control.hpp
  191. item-widget-helpers.hpp
  192. visibility-checkbox.hpp
  193. locked-checkbox.hpp
  194. horizontal-scroll-area.hpp
  195. expand-checkbox.hpp
  196. vertical-scroll-area.hpp
  197. visibility-item-widget.hpp
  198. slider-absoluteset-style.hpp
  199. source-list-widget.hpp
  200. qt-display.hpp
  201. crash-report.hpp
  202. hotkey-edit.hpp
  203. source-label.hpp
  204. remote-text.hpp
  205. audio-encoders.hpp
  206. qt-wrappers.hpp)
  207. set(obs_UI
  208. forms/NameDialog.ui
  209. forms/AutoConfigStartPage.ui
  210. forms/AutoConfigVideoPage.ui
  211. forms/AutoConfigStreamPage.ui
  212. forms/AutoConfigTestPage.ui
  213. forms/OBSLicenseAgreement.ui
  214. forms/OBSLogReply.ui
  215. forms/OBSBasic.ui
  216. forms/OBSBasicTransform.ui
  217. forms/OBSBasicFilters.ui
  218. forms/OBSBasicSettings.ui
  219. forms/OBSBasicSourceSelect.ui
  220. forms/OBSBasicInteraction.ui
  221. forms/OBSUpdate.ui
  222. forms/OBSRemux.ui)
  223. set(obs_QRC
  224. forms/obs.qrc)
  225. qt5_wrap_ui(obs_UI_HEADERS ${obs_UI})
  226. qt5_add_resources(obs_QRC_SOURCES ${obs_QRC})
  227. add_executable(obs WIN32
  228. ${obs_SOURCES}
  229. ${obs_HEADERS}
  230. ${obs_UI_HEADERS}
  231. ${obs_QRC_SOURCES})
  232. if(WIN32)
  233. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  234. set(_output_suffix "64")
  235. else()
  236. set(_output_suffix "32")
  237. endif()
  238. set_target_properties(obs
  239. PROPERTIES
  240. OUTPUT_NAME "obs${_output_suffix}")
  241. endif()
  242. target_link_libraries(obs
  243. libobs
  244. Qt5::Widgets
  245. obs-frontend-api
  246. ${FFMPEG_LIBRARIES}
  247. ${LIBCURL_LIBRARIES}
  248. ${obs_PLATFORM_LIBRARIES})
  249. if (APPLE)
  250. target_link_libraries(obs
  251. Qt5::MacExtras)
  252. set_target_properties(obs PROPERTIES LINK_FLAGS "-pagezero_size 10000 -image_base 100000000")
  253. set_property(
  254. TARGET obs
  255. APPEND
  256. PROPERTY INSTALL_RPATH
  257. "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/"
  258. "/Library/Frameworks/Python.framework/Versions/3.6/lib/"
  259. "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/"
  260. )
  261. endif()
  262. define_graphic_modules(obs)
  263. install_obs_core(obs)
  264. install_obs_data(obs data obs-studio)
  265. if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
  266. install(FILES dist/obs.desktop DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications)
  267. install(FILES forms/images/obs.png
  268. DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/icons/hicolor/256x256/apps)
  269. endif()
  270. add_subdirectory(frontend-plugins)
  271. if(WIN32)
  272. add_subdirectory(win-update/updater)
  273. endif()