CMakeLists.txt 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  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 AND WIN32)
  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 MIXER_CLIENTID OR "${MIXER_CLIENTID}" STREQUAL "" OR
  26. NOT DEFINED MIXER_HASH OR "${MIXER_HASH}" STREQUAL "" OR
  27. NOT BROWSER_AVAILABLE_INTERNAL)
  28. set(MIXER_ENABLED FALSE)
  29. set(MIXER_CLIENTID "")
  30. set(MIXER_HASH "0")
  31. else()
  32. set(MIXER_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(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
  40. if(APPLE)
  41. find_package(Qt5MacExtras REQUIRED)
  42. endif(APPLE)
  43. if(NOT Qt5Widgets_FOUND)
  44. if (ENABLE_UI)
  45. message(FATAL_ERROR "Failed to find Qt5")
  46. else()
  47. message(STATUS "Qt5 not found - UI disabled")
  48. return()
  49. endif()
  50. endif()
  51. include_directories(${FFMPEG_INCLUDE_DIRS})
  52. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  53. include_directories(SYSTEM "obs-frontend-api")
  54. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
  55. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/libff")
  56. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/json11")
  57. if(BROWSER_AVAILABLE_INTERNAL)
  58. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel")
  59. endif()
  60. find_package(Libcurl REQUIRED)
  61. include_directories(${LIBCURL_INCLUDE_DIRS})
  62. add_definitions(${LIBCURL_DEFINITIONS})
  63. if(WIN32)
  64. include_directories(${OBS_JANSSON_INCLUDE_DIRS})
  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.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. ${OBS_JANSSON_IMPORT})
  80. if(CMAKE_SIZEOF_VOID_P EQUAL 4)
  81. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
  82. endif()
  83. elseif(APPLE)
  84. set(obs_PLATFORM_SOURCES
  85. platform-osx.mm)
  86. find_package(AppKit REQUIRED)
  87. set(obs_PLATFORM_LIBRARIES ${APPKIT_LIBRARIES})
  88. add_definitions(-fobjc-arc)
  89. option(ENABLE_SPARKLE_UPDATER "Enables updates via the Sparkle framework (don't forget to update the Info.plist for your .app)" OFF)
  90. if(ENABLE_SPARKLE_UPDATER)
  91. find_library(SPARKLE Sparkle)
  92. include_directories(${SPARKLE})
  93. set(obs_PLATFORM_SOURCES
  94. ${obs_PLATFORM_SOURCES}
  95. sparkle-updater.mm)
  96. set(obs_PLATFORM_LIBRARIES
  97. ${obs_PLATFORM_LIBRARIES}
  98. ${SPARKLE})
  99. add_definitions(-DUPDATE_SPARKLE=1)
  100. endif()
  101. elseif(UNIX)
  102. find_package(Qt5X11Extras REQUIRED)
  103. set(obs_PLATFORM_SOURCES
  104. platform-x11.cpp)
  105. set(obs_PLATFORM_LIBRARIES
  106. Qt5::X11Extras)
  107. endif()
  108. if(BROWSER_AVAILABLE_INTERNAL)
  109. list(APPEND obs_PLATFORM_SOURCES
  110. obf.c
  111. auth-oauth.cpp
  112. )
  113. list(APPEND obs_PLATFORM_HEADERS
  114. obf.h
  115. auth-oauth.hpp
  116. )
  117. if(TWITCH_ENABLED)
  118. list(APPEND obs_PLATFORM_SOURCES
  119. auth-twitch.cpp
  120. )
  121. list(APPEND obs_PLATFORM_HEADERS
  122. auth-twitch.hpp
  123. )
  124. endif()
  125. if(MIXER_ENABLED)
  126. list(APPEND obs_PLATFORM_SOURCES
  127. auth-mixer.cpp
  128. )
  129. list(APPEND obs_PLATFORM_HEADERS
  130. auth-mixer.hpp
  131. )
  132. endif()
  133. endif()
  134. set(obs_libffutil_SOURCES
  135. ../deps/libff/libff/ff-util.c
  136. )
  137. set(obs_libffutil_HEADERS
  138. ../deps/libff/libff/ff-util.h
  139. )
  140. if(MSVC)
  141. set_source_files_properties(
  142. ../deps/libff/libff/ff-util.c
  143. PROPERTIES COMPILE_FLAGS -Dinline=__inline
  144. )
  145. endif()
  146. set(obs_SOURCES
  147. ${obs_PLATFORM_SOURCES}
  148. ${obs_libffutil_SOURCES}
  149. ../deps/json11/json11.cpp
  150. obs-app.cpp
  151. api-interface.cpp
  152. window-basic-main.cpp
  153. window-basic-stats.cpp
  154. window-basic-filters.cpp
  155. window-basic-settings.cpp
  156. window-basic-interaction.cpp
  157. window-basic-properties.cpp
  158. window-basic-auto-config.cpp
  159. window-basic-main-outputs.cpp
  160. window-basic-source-select.cpp
  161. window-basic-settings-stream.cpp
  162. window-basic-auto-config-test.cpp
  163. window-basic-main-scene-collections.cpp
  164. window-basic-main-transitions.cpp
  165. window-basic-main-dropfiles.cpp
  166. window-basic-main-profiles.cpp
  167. window-basic-main-browser.cpp
  168. window-basic-status-bar.cpp
  169. window-basic-adv-audio.cpp
  170. window-basic-transform.cpp
  171. window-basic-preview.cpp
  172. window-basic-about.cpp
  173. window-namedialog.cpp
  174. window-log-reply.cpp
  175. window-projector.cpp
  176. window-remux.cpp
  177. auth-base.cpp
  178. source-tree.cpp
  179. properties-view.cpp
  180. focus-list.cpp
  181. menu-button.cpp
  182. double-slider.cpp
  183. volume-control.cpp
  184. adv-audio-control.cpp
  185. item-widget-helpers.cpp
  186. visibility-checkbox.cpp
  187. locked-checkbox.cpp
  188. horizontal-scroll-area.cpp
  189. vertical-scroll-area.cpp
  190. visibility-item-widget.cpp
  191. slider-absoluteset-style.cpp
  192. source-list-widget.cpp
  193. qt-display.cpp
  194. crash-report.cpp
  195. hotkey-edit.cpp
  196. source-label.cpp
  197. remote-text.cpp
  198. audio-encoders.cpp
  199. qt-wrappers.cpp)
  200. set(obs_HEADERS
  201. ${obs_PLATFORM_HEADERS}
  202. ${obs_libffutil_HEADERS}
  203. ../deps/json11/json11.hpp
  204. obs-app.hpp
  205. platform.hpp
  206. window-main.hpp
  207. window-basic-main.hpp
  208. window-basic-stats.hpp
  209. window-basic-filters.hpp
  210. window-basic-settings.hpp
  211. window-basic-interaction.hpp
  212. window-basic-properties.hpp
  213. window-basic-auto-config.hpp
  214. window-basic-main-outputs.hpp
  215. window-basic-source-select.hpp
  216. window-basic-about.hpp
  217. window-basic-status-bar.hpp
  218. window-basic-adv-audio.hpp
  219. window-basic-transform.hpp
  220. window-basic-preview.hpp
  221. window-namedialog.hpp
  222. window-log-reply.hpp
  223. window-projector.hpp
  224. window-remux.hpp
  225. auth-base.hpp
  226. source-tree.hpp
  227. properties-view.hpp
  228. properties-view.moc.hpp
  229. display-helpers.hpp
  230. balance-slider.hpp
  231. double-slider.hpp
  232. focus-list.hpp
  233. menu-button.hpp
  234. mute-checkbox.hpp
  235. volume-control.hpp
  236. adv-audio-control.hpp
  237. item-widget-helpers.hpp
  238. visibility-checkbox.hpp
  239. locked-checkbox.hpp
  240. horizontal-scroll-area.hpp
  241. expand-checkbox.hpp
  242. vertical-scroll-area.hpp
  243. visibility-item-widget.hpp
  244. slider-absoluteset-style.hpp
  245. source-list-widget.hpp
  246. qt-display.hpp
  247. crash-report.hpp
  248. hotkey-edit.hpp
  249. source-label.hpp
  250. remote-text.hpp
  251. audio-encoders.hpp
  252. qt-wrappers.hpp
  253. clickable-label.hpp)
  254. set(obs_UI
  255. forms/NameDialog.ui
  256. forms/AutoConfigStartPage.ui
  257. forms/AutoConfigVideoPage.ui
  258. forms/AutoConfigStreamPage.ui
  259. forms/AutoConfigTestPage.ui
  260. forms/ColorSelect.ui
  261. forms/OBSLogReply.ui
  262. forms/OBSBasic.ui
  263. forms/OBSBasicTransform.ui
  264. forms/OBSBasicFilters.ui
  265. forms/OBSBasicSettings.ui
  266. forms/OBSBasicSourceSelect.ui
  267. forms/OBSBasicInteraction.ui
  268. forms/OBSUpdate.ui
  269. forms/OBSRemux.ui
  270. forms/OBSAbout.ui)
  271. set(obs_QRC
  272. forms/obs.qrc)
  273. qt5_wrap_ui(obs_UI_HEADERS ${obs_UI})
  274. qt5_add_resources(obs_QRC_SOURCES ${obs_QRC})
  275. add_executable(obs WIN32
  276. ${obs_SOURCES}
  277. ${obs_HEADERS}
  278. ${obs_UI_HEADERS}
  279. ${obs_QRC_SOURCES})
  280. if(WIN32)
  281. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  282. set(_output_suffix "64")
  283. else()
  284. set(_output_suffix "32")
  285. endif()
  286. set_target_properties(obs
  287. PROPERTIES
  288. OUTPUT_NAME "obs${_output_suffix}")
  289. endif()
  290. target_link_libraries(obs
  291. libobs
  292. Qt5::Widgets
  293. obs-frontend-api
  294. ${FFMPEG_LIBRARIES}
  295. ${LIBCURL_LIBRARIES}
  296. ${obs_PLATFORM_LIBRARIES})
  297. if (APPLE)
  298. target_link_libraries(obs
  299. Qt5::MacExtras)
  300. set_target_properties(obs PROPERTIES LINK_FLAGS "-pagezero_size 10000 -image_base 100000000")
  301. set_property(
  302. TARGET obs
  303. APPEND
  304. PROPERTY INSTALL_RPATH
  305. "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/"
  306. "/Library/Frameworks/Python.framework/Versions/3.6/lib/"
  307. "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/"
  308. )
  309. endif()
  310. define_graphic_modules(obs)
  311. install_obs_core(obs)
  312. install_obs_data(obs data obs-studio)
  313. install_obs_data_file(obs ../AUTHORS obs-studio/authors)
  314. if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
  315. install(FILES dist/obs.desktop DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications)
  316. install(FILES forms/images/obs.png
  317. DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/icons/hicolor/256x256/apps)
  318. endif()
  319. add_subdirectory(frontend-plugins)
  320. if(WIN32)
  321. add_subdirectory(win-update/updater)
  322. endif()