CMakeLists.txt 7.3 KB

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