CMakeLists.txt 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  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. if(BROWSER_AVAILABLE_INTERNAL)
  10. add_definitions(-DBROWSER_AVAILABLE)
  11. endif()
  12. add_subdirectory(obs-frontend-api)
  13. # ----------------------------------------------------------------------------
  14. project(obs)
  15. set(DISABLE_UPDATE_MODULE TRUE CACHE BOOL "Disables building the update module")
  16. if(NOT DEFINED TWITCH_CLIENTID OR "${TWITCH_CLIENTID}" STREQUAL "" OR
  17. NOT DEFINED TWITCH_HASH OR "${TWITCH_HASH}" STREQUAL "" OR
  18. NOT BROWSER_AVAILABLE_INTERNAL)
  19. set(TWITCH_ENABLED FALSE)
  20. set(TWITCH_CLIENTID "")
  21. set(TWITCH_HASH "0")
  22. else()
  23. set(TWITCH_ENABLED TRUE)
  24. endif()
  25. if(NOT DEFINED RESTREAM_CLIENTID OR "${RESTREAM_CLIENTID}" STREQUAL "" OR
  26. NOT DEFINED RESTREAM_HASH OR "${RESTREAM_HASH}" STREQUAL "" OR
  27. NOT BROWSER_AVAILABLE_INTERNAL)
  28. set(RESTREAM_ENABLED FALSE)
  29. set(RESTREAM_CLIENTID "")
  30. set(RESTREAM_HASH "0")
  31. else()
  32. set(RESTREAM_ENABLED TRUE)
  33. endif()
  34. configure_file(
  35. "${CMAKE_CURRENT_SOURCE_DIR}/ui-config.h.in"
  36. "${CMAKE_CURRENT_BINARY_DIR}/ui-config.h")
  37. set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
  38. set(CMAKE_AUTOMOC TRUE)
  39. find_package(Qt5Network ${FIND_MODE})
  40. find_package(Qt5Widgets ${FIND_MODE})
  41. find_package(Qt5Svg ${FIND_MODE})
  42. find_package(Qt5Xml ${FIND_MODE})
  43. find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
  44. if(NOT Qt5Widgets_FOUND)
  45. if (ENABLE_UI)
  46. message(FATAL_ERROR "Failed to find Qt5")
  47. else()
  48. message(STATUS "Qt5 not found - UI disabled")
  49. return()
  50. endif()
  51. endif()
  52. include_directories(${FFMPEG_INCLUDE_DIRS})
  53. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  54. include_directories(SYSTEM "obs-frontend-api")
  55. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
  56. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/libff")
  57. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/json11")
  58. if(BROWSER_AVAILABLE_INTERNAL)
  59. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel")
  60. endif()
  61. find_package(Libcurl REQUIRED)
  62. include_directories(${LIBCURL_INCLUDE_DIRS})
  63. add_definitions(${LIBCURL_DEFINITIONS})
  64. if(WIN32)
  65. include_directories(${BLAKE2_INCLUDE_DIR})
  66. set(obs_PLATFORM_SOURCES
  67. platform-windows.cpp
  68. win-update/update-window.cpp
  69. win-update/win-update.cpp
  70. win-update/win-update-helpers.cpp
  71. ${obs-studio_BINARY_DIR}/obs.rc)
  72. set(obs_PLATFORM_HEADERS
  73. win-update/update-window.hpp
  74. win-update/win-update.hpp
  75. win-update/win-update-helpers.hpp)
  76. set(obs_PLATFORM_LIBRARIES
  77. crypt32
  78. blake2)
  79. if(CMAKE_SIZEOF_VOID_P EQUAL 4)
  80. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
  81. endif()
  82. elseif(APPLE)
  83. set(obs_PLATFORM_SOURCES
  84. platform-osx.mm)
  85. find_package(AppKit REQUIRED)
  86. set(obs_PLATFORM_LIBRARIES ${APPKIT_LIBRARIES})
  87. add_definitions(-fobjc-arc)
  88. option(ENABLE_SPARKLE_UPDATER "Enables updates via the Sparkle framework (don't forget to update the Info.plist for your .app)" OFF)
  89. if(ENABLE_SPARKLE_UPDATER)
  90. find_library(SPARKLE Sparkle)
  91. include_directories(${SPARKLE})
  92. set(obs_PLATFORM_SOURCES
  93. ${obs_PLATFORM_SOURCES}
  94. sparkle-updater.mm)
  95. set(obs_PLATFORM_LIBRARIES
  96. ${obs_PLATFORM_LIBRARIES}
  97. ${SPARKLE})
  98. add_definitions(-DUPDATE_SPARKLE=1)
  99. endif()
  100. elseif(UNIX)
  101. find_package(Qt5Gui REQUIRED)
  102. include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})
  103. set(obs_PLATFORM_SOURCES
  104. platform-x11.cpp)
  105. set(obs_PLATFORM_LIBRARIES
  106. ${obs_PLATFORM_LIBRARIES}
  107. Qt5::Gui
  108. Qt5::GuiPrivate)
  109. if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
  110. list(APPEND obs_PLATFORM_LIBRARIES
  111. procstat)
  112. endif()
  113. endif()
  114. if(BROWSER_AVAILABLE_INTERNAL)
  115. list(APPEND obs_PLATFORM_SOURCES
  116. obf.c
  117. window-dock-browser.cpp
  118. window-extra-browsers.cpp
  119. )
  120. list(APPEND obs_PLATFORM_HEADERS
  121. obf.h
  122. window-dock-browser.hpp
  123. window-extra-browsers.hpp
  124. )
  125. if(TWITCH_ENABLED)
  126. list(APPEND obs_PLATFORM_SOURCES
  127. auth-twitch.cpp
  128. )
  129. list(APPEND obs_PLATFORM_HEADERS
  130. auth-twitch.hpp
  131. )
  132. endif()
  133. if(RESTREAM_ENABLED)
  134. list(APPEND obs_PLATFORM_SOURCES
  135. auth-restream.cpp
  136. )
  137. list(APPEND obs_PLATFORM_HEADERS
  138. auth-restream.hpp
  139. )
  140. endif()
  141. endif()
  142. set(obs_libffutil_SOURCES
  143. ../deps/libff/libff/ff-util.c
  144. )
  145. set(obs_libffutil_HEADERS
  146. ../deps/libff/libff/ff-util.h
  147. )
  148. if(MSVC)
  149. set_source_files_properties(
  150. ../deps/libff/libff/ff-util.c
  151. PROPERTIES COMPILE_FLAGS -Dinline=__inline
  152. )
  153. set(obs_PLATFORM_LIBRARIES
  154. ${obs_PLATFORM_LIBRARIES}
  155. w32-pthreads)
  156. endif()
  157. set(obs_SOURCES
  158. ${obs_PLATFORM_SOURCES}
  159. ${obs_libffutil_SOURCES}
  160. ../deps/json11/json11.cpp
  161. obs-app.cpp
  162. window-dock.cpp
  163. api-interface.cpp
  164. window-basic-main.cpp
  165. window-basic-stats.cpp
  166. window-basic-filters.cpp
  167. window-basic-settings.cpp
  168. window-basic-interaction.cpp
  169. window-basic-properties.cpp
  170. window-basic-auto-config.cpp
  171. window-basic-main-outputs.cpp
  172. window-basic-source-select.cpp
  173. window-basic-settings-stream.cpp
  174. window-basic-main-screenshot.cpp
  175. window-basic-auto-config-test.cpp
  176. window-basic-main-scene-collections.cpp
  177. window-basic-main-transitions.cpp
  178. window-basic-main-dropfiles.cpp
  179. window-basic-main-profiles.cpp
  180. window-basic-main-browser.cpp
  181. window-basic-main-icons.cpp
  182. window-basic-status-bar.cpp
  183. window-basic-adv-audio.cpp
  184. window-basic-transform.cpp
  185. window-basic-preview.cpp
  186. window-basic-about.cpp
  187. window-importer.cpp
  188. media-controls.cpp
  189. window-namedialog.cpp
  190. window-log-reply.cpp
  191. window-projector.cpp
  192. window-remux.cpp
  193. window-missing-files.cpp
  194. auth-base.cpp
  195. auth-oauth.cpp
  196. auth-listener.cpp
  197. source-tree.cpp
  198. scene-tree.cpp
  199. properties-view.cpp
  200. focus-list.cpp
  201. menu-button.cpp
  202. double-slider.cpp
  203. slider-ignorewheel.cpp
  204. combobox-ignorewheel.cpp
  205. spinbox-ignorewheel.cpp
  206. record-button.cpp
  207. ui-validation.cpp
  208. url-push-button.cpp
  209. volume-control.cpp
  210. adv-audio-control.cpp
  211. item-widget-helpers.cpp
  212. context-bar-controls.cpp
  213. horizontal-scroll-area.cpp
  214. vertical-scroll-area.cpp
  215. visibility-item-widget.cpp
  216. slider-absoluteset-style.cpp
  217. qt-display.cpp
  218. crash-report.cpp
  219. hotkey-edit.cpp
  220. source-label.cpp
  221. remote-text.cpp
  222. audio-encoders.cpp
  223. qt-wrappers.cpp
  224. log-viewer.cpp
  225. obs-proxy-style.cpp
  226. locked-checkbox.cpp
  227. visibility-checkbox.cpp
  228. media-slider.cpp
  229. undo-stack-obs.cpp)
  230. set(obs_HEADERS
  231. ${obs_PLATFORM_HEADERS}
  232. ${obs_libffutil_HEADERS}
  233. ../deps/json11/json11.hpp
  234. obs-app.hpp
  235. platform.hpp
  236. window-dock.hpp
  237. window-main.hpp
  238. window-basic-main.hpp
  239. window-basic-stats.hpp
  240. window-basic-filters.hpp
  241. window-basic-settings.hpp
  242. window-basic-interaction.hpp
  243. window-basic-properties.hpp
  244. window-basic-auto-config.hpp
  245. window-basic-main-outputs.hpp
  246. window-basic-source-select.hpp
  247. window-basic-about.hpp
  248. window-basic-status-bar.hpp
  249. window-basic-adv-audio.hpp
  250. window-basic-transform.hpp
  251. window-basic-preview.hpp
  252. window-importer.hpp
  253. media-controls.hpp
  254. window-namedialog.hpp
  255. window-log-reply.hpp
  256. window-projector.hpp
  257. window-remux.hpp
  258. window-missing-files.hpp
  259. auth-base.hpp
  260. auth-oauth.hpp
  261. auth-listener.hpp
  262. source-tree.hpp
  263. scene-tree.hpp
  264. properties-view.hpp
  265. properties-view.moc.hpp
  266. display-helpers.hpp
  267. balance-slider.hpp
  268. double-slider.hpp
  269. slider-ignorewheel.hpp
  270. combobox-ignorewheel.hpp
  271. spinbox-ignorewheel.hpp
  272. focus-list.hpp
  273. menu-button.hpp
  274. mute-checkbox.hpp
  275. record-button.hpp
  276. ui-validation.hpp
  277. screenshot-obj.hpp
  278. url-push-button.hpp
  279. volume-control.hpp
  280. adv-audio-control.hpp
  281. item-widget-helpers.hpp
  282. visibility-checkbox.hpp
  283. context-bar-controls.hpp
  284. locked-checkbox.hpp
  285. horizontal-scroll-area.hpp
  286. expand-checkbox.hpp
  287. vertical-scroll-area.hpp
  288. visibility-item-widget.hpp
  289. slider-absoluteset-style.hpp
  290. qt-display.hpp
  291. crash-report.hpp
  292. hotkey-edit.hpp
  293. source-label.hpp
  294. remote-text.hpp
  295. audio-encoders.hpp
  296. qt-wrappers.hpp
  297. clickable-label.hpp
  298. log-viewer.hpp
  299. obs-proxy-style.hpp
  300. obs-proxy-style.hpp
  301. media-slider.hpp
  302. undo-stack-obs.hpp)
  303. set(obs_importers_HEADERS
  304. importers/importers.hpp)
  305. set(obs_importers_SOURCES
  306. importers/importers.cpp
  307. importers/classic.cpp
  308. importers/sl.cpp
  309. importers/studio.cpp
  310. importers/xsplit.cpp)
  311. source_group("importers\\Source Files" FILES ${obs_importers_SOURCES})
  312. source_group("importers\\Header Files" FILES ${obs_importers_HEADERS})
  313. set(obs_UI
  314. forms/source-toolbar/browser-source-toolbar.ui
  315. forms/source-toolbar/device-select-toolbar.ui
  316. forms/source-toolbar/game-capture-toolbar.ui
  317. forms/source-toolbar/image-source-toolbar.ui
  318. forms/source-toolbar/color-source-toolbar.ui
  319. forms/source-toolbar/text-source-toolbar.ui
  320. forms/source-toolbar/media-controls.ui
  321. forms/AutoConfigStartPage.ui
  322. forms/AutoConfigVideoPage.ui
  323. forms/AutoConfigStreamPage.ui
  324. forms/AutoConfigTestPage.ui
  325. forms/ColorSelect.ui
  326. forms/OBSLogReply.ui
  327. forms/OBSBasic.ui
  328. forms/OBSBasicTransform.ui
  329. forms/OBSBasicFilters.ui
  330. forms/OBSBasicSettings.ui
  331. forms/OBSBasicSourceSelect.ui
  332. forms/OBSBasicInteraction.ui
  333. forms/OBSExtraBrowsers.ui
  334. forms/OBSUpdate.ui
  335. forms/OBSRemux.ui
  336. forms/OBSImporter.ui
  337. forms/OBSMissingFiles.ui
  338. forms/OBSAbout.ui)
  339. set(obs_QRC
  340. forms/obs.qrc)
  341. qt5_wrap_ui(obs_UI_HEADERS ${obs_UI})
  342. qt5_add_resources(obs_QRC_SOURCES ${obs_QRC})
  343. add_executable(obs WIN32
  344. obs.manifest
  345. ${obs_SOURCES}
  346. ${obs_HEADERS}
  347. ${obs_importers_SOURCES}
  348. ${obs_importers_HEADERS}
  349. ${obs_UI_HEADERS}
  350. ${obs_QRC_SOURCES})
  351. if(WIN32)
  352. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  353. set(_output_suffix "64")
  354. else()
  355. set(_output_suffix "32")
  356. endif()
  357. set_target_properties(obs
  358. PROPERTIES
  359. OUTPUT_NAME "obs${_output_suffix}")
  360. endif()
  361. target_link_libraries(obs
  362. libobs
  363. Qt5::Network
  364. Qt5::Widgets
  365. Qt5::Svg
  366. Qt5::Xml
  367. obs-frontend-api
  368. ${FFMPEG_LIBRARIES}
  369. ${LIBCURL_LIBRARIES}
  370. ${obs_PLATFORM_LIBRARIES})
  371. set_target_properties(obs PROPERTIES FOLDER "frontend")
  372. define_graphic_modules(obs)
  373. install_obs_core(obs)
  374. install_obs_data(obs data obs-studio)
  375. install_obs_data_file(obs ../AUTHORS obs-studio/authors)
  376. if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
  377. add_subdirectory(xdg-data)
  378. endif()
  379. add_subdirectory(frontend-plugins)
  380. if(WIN32)
  381. add_subdirectory(win-update/updater)
  382. endif()