os-linux.cmake 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. find_package(LibUUID REQUIRED)
  2. find_package(X11 REQUIRED)
  3. find_package(X11-xcb REQUIRED)
  4. # cmake-format: off
  5. find_package(Xcb REQUIRED xcb OPTIONAL_COMPONENTS xcb-xinput)
  6. # cmake-format: on
  7. find_package(Gio)
  8. target_sources(
  9. libobs
  10. PRIVATE # cmake-format: sortable
  11. obs-nix-platform.c
  12. obs-nix-platform.h
  13. obs-nix-x11.c
  14. obs-nix.c
  15. util/pipe-posix.c
  16. util/platform-nix.c
  17. util/threading-posix.c
  18. util/threading-posix.h)
  19. target_compile_definitions(
  20. libobs
  21. PRIVATE USE_XDG OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}" $<$<COMPILE_LANG_AND_ID:C,GNU>:ENABLE_DARRAY_TYPE_TEST>
  22. $<$<COMPILE_LANG_AND_ID:CXX,GNU>:ENABLE_DARRAY_TYPE_TEST>)
  23. if(CMAKE_C_COMPILER_ID STREQUAL GNU)
  24. # * Silence type-limits warning in line 292 of libobs/utils/utf8.c
  25. if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 12.3.0)
  26. target_compile_options(libobs PRIVATE -Wno-error=type-limits)
  27. endif()
  28. endif()
  29. set(CMAKE_M_LIBS "")
  30. include(CheckCSourceCompiles)
  31. set(LIBM_TEST_SOURCE "#include<math.h>\nfloat f; int main(){sqrt(f);return 0;}")
  32. check_c_source_compiles("${LIBM_TEST_SOURCE}" HAVE_MATH_IN_STD_LIB)
  33. set(UUID_TEST_SOURCE "#include<uuid/uuid.h>\nint main(){return 0;}")
  34. check_c_source_compiles("${UUID_TEST_SOURCE}" HAVE_UUID_HEADER)
  35. if(NOT HAVE_UUID_HEADER)
  36. message(FATAL_ERROR "Required system header <uuid/uuid.h> not found.")
  37. endif()
  38. target_link_libraries(
  39. libobs PRIVATE X11::x11-xcb xcb::xcb LibUUID::LibUUID ${CMAKE_DL_LIBS} $<$<NOT:$<BOOL:${HAVE_MATH_IN_STD_LIB}>>:m>
  40. $<$<TARGET_EXISTS:xcb::xcb-input>:xcb::xcb-input>)
  41. if(ENABLE_PULSEAUDIO)
  42. find_package(PulseAudio REQUIRED)
  43. target_sources(
  44. libobs
  45. PRIVATE # cmake-format: sortable
  46. audio-monitoring/pulse/pulseaudio-enum-devices.c
  47. audio-monitoring/pulse/pulseaudio-monitoring-available.c
  48. audio-monitoring/pulse/pulseaudio-output.c
  49. audio-monitoring/pulse/pulseaudio-wrapper.c
  50. audio-monitoring/pulse/pulseaudio-wrapper.h)
  51. target_link_libraries(libobs PRIVATE PulseAudio::PulseAudio)
  52. target_enable_feature(libobs "PulseAudio audio monitoring (Linux)")
  53. else()
  54. target_sources(libobs PRIVATE audio-monitoring/null/null-audio-monitoring.c)
  55. target_disable_feature(libobs "PulseAudio audio monitoring (Linux)")
  56. endif()
  57. if(TARGET gio::gio)
  58. target_sources(libobs PRIVATE util/platform-nix-dbus.c util/platform-nix-portal.c)
  59. target_link_libraries(libobs PRIVATE gio::gio)
  60. endif()
  61. if(ENABLE_WAYLAND)
  62. find_package(Wayland REQUIRED Client)
  63. find_package(Xkbcommon REQUIRED)
  64. target_sources(libobs PRIVATE obs-nix-wayland.c)
  65. target_link_libraries(libobs PRIVATE Wayland::Client xkbcommon::xkbcommon)
  66. target_enable_feature(libobs "Wayland compositor support (Linux)")
  67. else()
  68. target_disable_feature(libobs "Wayland compositor support (Linux)")
  69. endif()
  70. set_target_properties(libobs PROPERTIES OUTPUT_NAME obs)