CMakeLists.txt 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. cmake_minimum_required(VERSION 3.22...3.25)
  2. legacy_check()
  3. option(ENABLE_V4L2 "Build OBS with v4l2 support" ON)
  4. option(ENABLE_UDEV "Build linux-v4l2 with UDEV support" ON)
  5. if(NOT ENABLE_V4L2)
  6. target_disable(linux-v4l2)
  7. return()
  8. endif()
  9. find_package(Libv4l2 REQUIRED)
  10. find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
  11. if(OS_FREEBSD OR OS_OPENBSD)
  12. set(CMAKE_REQUIRED_INCLUDES "/usr/local/include")
  13. endif()
  14. include(CheckCSourceCompiles)
  15. set(V4L_TEST_SOURCE "#include<linux/videodev2.h>\nint main(){return 0;}")
  16. check_c_source_compiles("${V4L_TEST_SOURCE}" HAVE_VIDEODEV2_HEADER)
  17. if(NOT HAVE_VIDEODEV2_HEADER)
  18. message(FATAL_ERROR "Required system header <linux/videodev2.h> not found.")
  19. endif()
  20. add_library(linux-v4l2 MODULE)
  21. add_library(OBS::v4l2 ALIAS linux-v4l2)
  22. target_sources(
  23. linux-v4l2
  24. PRIVATE linux-v4l2.c v4l2-controls.c v4l2-decoder.c v4l2-helpers.c v4l2-input.c v4l2-output.c
  25. )
  26. target_link_libraries(
  27. linux-v4l2
  28. PRIVATE OBS::libobs Libv4l2::Libv4l2 FFmpeg::avcodec FFmpeg::avformat FFmpeg::avutil
  29. )
  30. if(ENABLE_UDEV)
  31. find_package(Libudev REQUIRED)
  32. target_sources(linux-v4l2 PRIVATE v4l2-udev.c)
  33. target_link_libraries(linux-v4l2 PRIVATE Libudev::Libudev)
  34. target_compile_definitions(linux-v4l2 PRIVATE HAVE_UDEV)
  35. endif()
  36. set_target_properties_obs(linux-v4l2 PROPERTIES FOLDER plugins PREFIX "")