FindVPL.cmake 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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 IMPORTED_TARGET QUIET vpl)
  35. if(_VPL_FOUND)
  36. add_library(VPL::VPL ALIAS PkgConfig::_VPL)
  37. return()
  38. endif()
  39. endif()
  40. find_path(
  41. VPL_INCLUDE_DIR
  42. NAMES vpl/mfxstructures.h
  43. HINTS ${_VPL_INCLUDE_DIRS} ${_VPL_INCLUDE_DIRS}
  44. PATHS /usr/include /usr/local/include /opt/local/include /sw/include
  45. DOC "VPL include directory")
  46. find_library(
  47. VPL_LIBRARY_RELEASE
  48. NAMES ${_VPL_LIBRARIES} ${_VPL_LIBRARIES} vpl
  49. HINTS ${_VPL_LIBRARY_DIRS} ${_VPL_LIBRARY_DIRS}
  50. PATHS /usr/lib /usr/local/lib /opt/local/lib /sw/lib
  51. DOC "VPL library location")
  52. find_library(
  53. VPL_LIBRARY_DEBUG
  54. NAMES ${_VPL_LIBRARIES} ${_VPL_LIBRARIES} vpld
  55. HINTS ${_VPL_LIBRARY_DIRS} ${_VPL_LIBRARY_DIRS}
  56. PATHS /usr/lib /usr/local/lib /opt/local/lib /sw/lib
  57. DOC "VPL debug library location")
  58. include(SelectLibraryConfigurations)
  59. select_library_configurations(VPL)
  60. include(FindPackageHandleStandardArgs)
  61. find_package_handle_standard_args(
  62. VPL
  63. REQUIRED_VARS VPL_LIBRARY VPL_INCLUDE_DIR
  64. VERSION_VAR VPL_VERSION REASON_FAILURE_MESSAGE "${VPL_ERROR_REASON}")
  65. mark_as_advanced(VPL_INCLUDE_DIR VPL_LIBRARY)
  66. unset(VPL_ERROR_REASON)
  67. if(EXISTS "${VPL_INCLUDE_DIR}/vpl/mfxdefs.h")
  68. file(STRINGS "${VPL_INCLUDE_DIR}/vpl/mfxdefs.h" _version_string REGEX "^.*VERSION_(MAJOR|MINOR)[ \t]+[0-9]+[ \t]*$")
  69. string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" _version_major "${_version_string}")
  70. string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" _version_minor "${_version_string}")
  71. set(VPL_VERSION "${_version_major}.${_version_minor}")
  72. unset(_version_major)
  73. unset(_version_minor)
  74. else()
  75. if(NOT VPL_FIND_QUIETLY)
  76. message(AUTHOR_WARNING "Failed to find VPL version.")
  77. endif()
  78. set(VPL_VERSION 0.0.0)
  79. endif()
  80. if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows")
  81. set(VPL_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.")
  82. elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
  83. set(VPL_ERROR_REASON "Ensure VPL headers are available in local library paths.")
  84. endif()
  85. if(VPL_FOUND)
  86. set(VPL_INCLUDE_DIRS ${VPL_INCLUDE_DIR})
  87. set(VPL_LIBRARIES ${VPL_LIBRARY})
  88. if(NOT TARGET VPL::VPL)
  89. if(IS_ABSOLUTE "${VPL_LIBRARY_RELEASE}")
  90. add_library(VPL::VPL UNKNOWN IMPORTED)
  91. set_target_properties(VPL::VPL PROPERTIES IMPORTED_LOCATION "${VPL_LIBRARY_RELEASE}")
  92. else()
  93. add_library(VPL::VPL INTERFACE IMPORTED)
  94. set_target_properties(VPL::VPL PROPERTIES IMPORTED_LIBNAME "${VPL_LIBRARY_RELEASE}")
  95. endif()
  96. set_target_properties(
  97. VPL::VPL
  98. PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${VPL_INCLUDE_DIRS}"
  99. VERSION ${VPL_VERSION}
  100. IMPORTED_CONFIGURATIONS Release)
  101. if(VPL_LIBRARY_DEBUG)
  102. if(IS_ABSOLUTE "${VPL_LIBRARY_DEBUG}")
  103. set_target_properties(VPL::VPL PROPERTIES IMPORTED_LOCATION_DEBUG "${VPL_LIBRARY_DEBUG}")
  104. else()
  105. set_target_properties(VPL::VPL PROPERTIES IMPORTED_LIBNAME_DEBUG "${VPL_LIBRARY_DEBUG}")
  106. endif()
  107. set_property(
  108. TARGET VPL::VPL
  109. APPEND
  110. PROPERTY IMPORTED_CONFIGURATIONS Debug)
  111. endif()
  112. endif()
  113. endif()
  114. include(FeatureSummary)
  115. set_package_properties(
  116. VPL PROPERTIES
  117. URL "https://github.com/oneapi-src/oneVPL"
  118. DESCRIPTION
  119. "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."
  120. )