1
0

CMakeLists.txt 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. cmake_minimum_required(VERSION 3.28...3.30)
  2. add_subdirectory(api)
  3. option(ENABLE_FRONTEND "Enable building with UI frontend (requires Qt6)" ON)
  4. if(NOT ENABLE_FRONTEND)
  5. target_disable_feature(obs "User Interface")
  6. return()
  7. else()
  8. target_enable_feature(obs "User Interface")
  9. endif()
  10. find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
  11. find_package(CURL REQUIRED)
  12. if(NOT TARGET OBS::json11)
  13. add_subdirectory("${CMAKE_SOURCE_DIR}/deps/json11" json11)
  14. endif()
  15. if(NOT TARGET OBS::libobs)
  16. add_subdirectory("${CMAKE_SOURCE_DIR}/libobs" libobs)
  17. endif()
  18. if(NOT TARGET OBS::bpm)
  19. add_subdirectory("${CMAKE_SOURCE_DIR}/shared/bpm" bpm)
  20. endif()
  21. add_executable(obs-studio)
  22. add_executable(OBS::studio ALIAS obs-studio)
  23. target_link_libraries(
  24. obs-studio
  25. PRIVATE
  26. CURL::libcurl
  27. FFmpeg::avcodec
  28. FFmpeg::avutil
  29. FFmpeg::avformat
  30. OBS::libobs
  31. OBS::frontend-api
  32. OBS::json11
  33. OBS::bpm
  34. )
  35. include(cmake/ui-components.cmake)
  36. include(cmake/ui-dialogs.cmake)
  37. include(cmake/ui-docks.cmake)
  38. include(cmake/feature-importers.cmake)
  39. include(cmake/feature-plugin-manager.cmake)
  40. include(cmake/ui-models.cmake)
  41. include(cmake/ui-oauth.cmake)
  42. include(cmake/feature-browserpanels.cmake)
  43. include(cmake/ui-qt.cmake)
  44. include(cmake/ui-settings.cmake)
  45. include(cmake/ui-utility.cmake)
  46. include(cmake/ui-widgets.cmake)
  47. include(cmake/ui-wizards.cmake)
  48. if(NOT OAUTH_BASE_URL)
  49. set(OAUTH_BASE_URL "https://auth.obsproject.com/" CACHE STRING "Default OAuth base URL")
  50. mark_as_advanced(OAUTH_BASE_URL)
  51. endif()
  52. include(cmake/feature-twitch.cmake)
  53. include(cmake/feature-restream.cmake)
  54. include(cmake/feature-youtube.cmake)
  55. include(cmake/feature-whatsnew.cmake)
  56. include(cmake/feature-idian-playground.cmake)
  57. add_subdirectory(plugins)
  58. configure_file(cmake/templates/ui-config.h.in ui-config.h)
  59. target_sources(
  60. obs-studio
  61. PRIVATE obs-main.cpp OBSStudioAPI.cpp OBSStudioAPI.hpp OBSApp.cpp OBSApp.hpp OBSApp_Themes.cpp ui-config.h
  62. )
  63. if(OS_WINDOWS)
  64. include(cmake/os-windows.cmake)
  65. elseif(OS_MACOS)
  66. include(cmake/os-macos.cmake)
  67. elseif(OS_LINUX)
  68. include(cmake/os-linux.cmake)
  69. elseif(OS_FREEBSD OR OS_OPENBSD)
  70. include(cmake/os-freebsd.cmake)
  71. endif()
  72. foreach(graphics_library IN ITEMS opengl metal d3d11)
  73. string(TOUPPER ${graphics_library} graphics_library_U)
  74. if(TARGET OBS::libobs-${graphics_library})
  75. target_compile_definitions(
  76. obs-studio
  77. PRIVATE
  78. DL_${graphics_library_U}="$<$<IF:$<PLATFORM_ID:Windows>,TARGET_FILE_NAME,TARGET_SONAME_FILE_NAME>:OBS::libobs-${graphics_library}>"
  79. )
  80. else()
  81. target_compile_definitions(obs-studio PRIVATE DL_${graphics_library_U}="")
  82. endif()
  83. endforeach()
  84. get_property(obs_module_list GLOBAL PROPERTY OBS_MODULES_ENABLED)
  85. list(JOIN obs_module_list "|" SAFE_MODULES)
  86. target_compile_definitions(obs-studio PRIVATE "SAFE_MODULES=\"${SAFE_MODULES}\"")
  87. get_target_property(target_sources obs-studio SOURCES)
  88. set(target_cpp_sources ${target_sources})
  89. set(target_hpp_sources ${target_sources})
  90. set(target_qt_sources ${target_sources})
  91. list(FILTER target_cpp_sources INCLUDE REGEX ".+\\.(cpp|mm|c|m)")
  92. list(SORT target_cpp_sources COMPARE NATURAL CASE SENSITIVE ORDER ASCENDING)
  93. list(FILTER target_hpp_sources INCLUDE REGEX ".+\\.(hpp|h)")
  94. list(SORT target_hpp_sources COMPARE NATURAL CASE SENSITIVE ORDER ASCENDING)
  95. list(FILTER target_qt_sources INCLUDE REGEX ".+\\.(ui|qrc)")
  96. list(SORT target_qt_sources COMPARE NATURAL CASE SENSITIVE ORDER ASCENDING)
  97. source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Source Files" FILES ${target_cpp_sources})
  98. source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Header Files" FILES ${target_hpp_sources})
  99. source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Qt Files" FILES ${target_qt_sources})
  100. set_target_properties_obs(obs-studio PROPERTIES FOLDER frontend OUTPUT_NAME "$<IF:$<PLATFORM_ID:Windows>,obs64,obs>")