FindVPL.cmake 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #[=======================================================================[.rst
  2. FindVPL
  3. -------
  4. FindModule for VPL and associated headers
  5. Imported Targets
  6. ^^^^^^^^^^^^^^^^
  7. .. versionadded:: 3.0
  8. This module defines the :prop_tgt:`IMPORTED` target ``VPL::VPL``.
  9. Result Variables
  10. ^^^^^^^^^^^^^^^^
  11. This module sets the following variables:
  12. ``VPL_FOUND``
  13. True, if headers were found.
  14. ``VPL_VERSION``
  15. Detected version of found VPL headers.
  16. ``VPL_LIBRARIES``
  17. Libraries needed to link to VPL.
  18. Cache variables
  19. ^^^^^^^^^^^^^^^
  20. The following cache variables may also be set:
  21. ``VPL_INCLUDE_DIR``
  22. Directory containing ``mfxdispatcher.h``.
  23. ``VPL_LIBRARY_RELEASE``
  24. Path to the library component of VPL in non-debug configuration.
  25. ``VPL_LIBRARY_DEBUG``
  26. Optional path to the library component of VPL in debug configuration.
  27. #]=======================================================================]
  28. # cmake-format: off
  29. # cmake-lint: disable=C0103
  30. # cmake-lint: disable=C0301
  31. # cmake-format: on
  32. find_package(PkgConfig QUIET)
  33. if(PKG_CONFIG_FOUND)
  34. pkg_search_module(_VPL QUIET vpl)
  35. endif()
  36. find_path(
  37. VPL_INCLUDE_DIR
  38. NAMES vpl/mfxstructures.h
  39. HINTS ${_VPL_INCLUDE_DIRS} ${_VPL_INCLUDE_DIRS}
  40. PATHS /usr/include /usr/local/include /opt/local/include /sw/include
  41. DOC "VPL include directory")
  42. find_library(
  43. VPL_LIBRARY_RELEASE
  44. NAMES ${_VPL_LIBRARIES} ${_VPL_LIBRARIES} vpl
  45. HINTS ${_VPL_LIBRARY_DIRS} ${_VPL_LIBRARY_DIRS}
  46. PATHS /usr/lib /usr/local/lib /opt/local/lib /sw/lib
  47. DOC "VPL library location")
  48. find_library(
  49. VPL_LIBRARY_DEBUG
  50. NAMES ${_VPL_LIBRARIES} ${_VPL_LIBRARIES} vpld
  51. HINTS ${_VPL_LIBRARY_DIRS} ${_VPL_LIBRARY_DIRS}
  52. PATHS /usr/lib /usr/local/lib /opt/local/lib /sw/lib
  53. DOC "VPL debug library location")
  54. include(SelectLibraryConfigurations)
  55. select_library_configurations(VPL)
  56. include(FindPackageHandleStandardArgs)
  57. find_package_handle_standard_args(
  58. VPL
  59. REQUIRED_VARS VPL_LIBRARY VPL_INCLUDE_DIR
  60. VERSION_VAR VPL_VERSION REASON_FAILURE_MESSAGE "${VPL_ERROR_REASON}")
  61. mark_as_advanced(VPL_INCLUDE_DIR VPL_LIBRARY)
  62. unset(VPL_ERROR_REASON)
  63. if(EXISTS "${VPL_INCLUDE_DIR}/vpl/mfxdefs.h")
  64. file(STRINGS "${VPL_INCLUDE_DIR}/vpl/mfxdefs.h" _version_string REGEX "^.*VERSION_(MAJOR|MINOR)[ \t]+[0-9]+[ \t]*$")
  65. string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" _version_major "${_version_string}")
  66. string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" _version_minor "${_version_string}")
  67. set(VPL_VERSION "${_version_major}.${_version_minor}")
  68. unset(_version_major)
  69. unset(_version_minor)
  70. else()
  71. if(NOT VPL_FIND_QUIETLY)
  72. message(AUTHOR_WARNING "Failed to find VPL version.")
  73. endif()
  74. set(VPL_VERSION 0.0.0)
  75. endif()
  76. if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows")
  77. set(VPL_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.")
  78. elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
  79. set(VPL_ERROR_REASON "Ensure VPL headers are available in local library paths.")
  80. endif()
  81. if(VPL_FOUND)
  82. set(VPL_INCLUDE_DIRS ${VPL_INCLUDE_DIR})
  83. set(VPL_LIBRARIES ${VPL_LIBRARY})
  84. if(NOT TARGET VPL::VPL)
  85. if(IS_ABSOLUTE "${VPL_LIBRARY_RELEASE}")
  86. add_library(VPL::VPL UNKNOWN IMPORTED)
  87. set_target_properties(VPL::VPL PROPERTIES IMPORTED_LOCATION "${VPL_LIBRARY_RELEASE}")
  88. else()
  89. add_library(VPL::VPL INTERFACE IMPORTED)
  90. set_target_properties(VPL::VPL PROPERTIES IMPORTED_LIBNAME "${VPL_LIBRARY_RELEASE}")
  91. endif()
  92. set_target_properties(
  93. VPL::VPL
  94. PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${VPL_INCLUDE_DIRS}"
  95. VERSION ${VPL_VERSION}
  96. IMPORTED_CONFIGURATIONS Release)
  97. if(VPL_LIBRARY_DEBUG)
  98. if(IS_ABSOLUTE "${VPL_LIBRARY_DEBUG}")
  99. set_target_properties(VPL::VPL PROPERTIES IMPORTED_LOCATION_DEBUG "${VPL_LIBRARY_DEBUG}")
  100. else()
  101. set_target_properties(VPL::VPL PROPERTIES IMPORTED_LIBNAME_DEBUG "${VPL_LIBRARY_DEBUG}")
  102. endif()
  103. set_property(
  104. TARGET VPL::VPL
  105. APPEND
  106. PROPERTY IMPORTED_CONFIGURATIONS Debug)
  107. endif()
  108. endif()
  109. endif()
  110. include(FeatureSummary)
  111. set_package_properties(
  112. VPL PROPERTIES
  113. URL "https://github.com/oneapi-src/oneVPL"
  114. DESCRIPTION
  115. "Intel® oneAPI Video Processing Library (oneVPL) supports AI visual inference, media delivery, cloud gaming, and virtual desktop infrastructure use cases by providing access to hardware accelerated video decode, encode, and frame processing capabilities on Intel® GPUs."
  116. )