CMakeLists.txt 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. cmake_minimum_required(VERSION 3.16...3.25)
  2. legacy_check()
  3. add_subdirectory(obs-frontend-api)
  4. option(ENABLE_UI "Enable building with UI (requires Qt)" ON)
  5. if(NOT ENABLE_UI)
  6. target_disable_feature(obs "User Interface")
  7. return()
  8. else()
  9. target_enable_feature(obs "User Interface")
  10. endif()
  11. find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
  12. find_package(CURL REQUIRED)
  13. if(NOT TARGET OBS::libff-util)
  14. add_subdirectory("${CMAKE_SOURCE_DIR}/deps/libff" "${CMAKE_BINARY_DIR}/deps/libff")
  15. endif()
  16. if(NOT TARGET OBS::json11)
  17. add_subdirectory("${CMAKE_SOURCE_DIR}/deps/json11" "${CMAKE_BINARY_DIR}/deps/json11")
  18. endif()
  19. add_executable(obs-studio)
  20. add_executable(OBS::studio ALIAS obs-studio)
  21. target_link_libraries(
  22. obs-studio
  23. PRIVATE CURL::libcurl
  24. FFmpeg::avcodec
  25. FFmpeg::avutil
  26. FFmpeg::avformat
  27. OBS::libobs
  28. OBS::frontend-api
  29. OBS::libff-util
  30. OBS::json11)
  31. include(cmake/ui-qt.cmake)
  32. include(cmake/ui-elements.cmake)
  33. include(cmake/ui-windows.cmake)
  34. include(cmake/feature-importers.cmake)
  35. include(cmake/feature-browserpanels.cmake)
  36. if(NOT OAUTH_BASE_URL)
  37. set(OAUTH_BASE_URL
  38. "https://auth.obsproject.com/"
  39. CACHE STRING "Default OAuth base URL")
  40. mark_as_advanced(OAUTH_BASE_URL)
  41. endif()
  42. include(cmake/feature-twitch.cmake)
  43. include(cmake/feature-restream.cmake)
  44. include(cmake/feature-youtube.cmake)
  45. include(cmake/feature-sparkle.cmake)
  46. include(cmake/feature-whatsnew.cmake)
  47. add_subdirectory(frontend-plugins)
  48. configure_file(ui-config.h.in ui-config.h)
  49. target_sources(
  50. obs-studio
  51. PRIVATE # cmake-format: sortable
  52. api-interface.cpp
  53. auth-base.cpp
  54. auth-base.hpp
  55. auth-listener.cpp
  56. auth-listener.hpp
  57. auth-oauth.cpp
  58. auth-oauth.hpp
  59. display-helpers.hpp
  60. multiview.cpp
  61. multiview.hpp
  62. obf.c
  63. obf.h
  64. obs-app.cpp
  65. obs-app.hpp
  66. obs-proxy-style.cpp
  67. obs-proxy-style.hpp
  68. platform.hpp
  69. qt-display.cpp
  70. qt-display.hpp
  71. qt-wrappers.cpp
  72. qt-wrappers.hpp
  73. ui-config.h
  74. ui-validation.cpp
  75. ui-validation.hpp)
  76. if(OS_WINDOWS)
  77. include(cmake/os-windows.cmake)
  78. elseif(OS_MACOS)
  79. include(cmake/os-macos.cmake)
  80. elseif(OS_LINUX)
  81. include(cmake/os-linux.cmake)
  82. elseif(OS_FREEBSD)
  83. include(cmake/os-freebsd.cmake)
  84. endif()
  85. foreach(graphics_library IN ITEMS opengl metal d3d11)
  86. string(TOUPPER ${graphics_library} graphics_library_U)
  87. if(TARGET OBS::libobs-${graphics_library})
  88. target_compile_definitions(obs-studio
  89. PRIVATE DL_${graphics_library_U}="$<TARGET_FILE_NAME:OBS::libobs-${graphics_library}>")
  90. else()
  91. target_compile_definitions(obs-studio PRIVATE DL_${graphics_library_U}="")
  92. endif()
  93. endforeach()
  94. set_target_properties_obs(obs-studio PROPERTIES FOLDER frontend OUTPUT_NAME obs)