os-linux.cmake 2.7 KB

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