FindOpenCL.cmake 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. # file Copyright.txt or https://cmake.org/licensing for details.
  3. #.rst:
  4. # FindOpenCL
  5. # ----------
  6. #
  7. # Try to find OpenCL
  8. #
  9. # IMPORTED Targets
  10. # ^^^^^^^^^^^^^^^^
  11. #
  12. # This module defines :prop_tgt:`IMPORTED` target ``OpenCL::OpenCL``, if
  13. # OpenCL has been found.
  14. #
  15. # Result Variables
  16. # ^^^^^^^^^^^^^^^^
  17. #
  18. # This module defines the following variables::
  19. #
  20. # OpenCL_FOUND - True if OpenCL was found
  21. # OpenCL_INCLUDE_DIRS - include directories for OpenCL
  22. # OpenCL_LIBRARIES - link against this library to use OpenCL
  23. # OpenCL_VERSION_STRING - Highest supported OpenCL version (eg. 1.2)
  24. # OpenCL_VERSION_MAJOR - The major version of the OpenCL implementation
  25. # OpenCL_VERSION_MINOR - The minor version of the OpenCL implementation
  26. #
  27. # The module will also define two cache variables::
  28. #
  29. # OpenCL_INCLUDE_DIR - the OpenCL include directory
  30. # OpenCL_LIBRARY - the path to the OpenCL library
  31. #
  32. function(_FIND_OPENCL_VERSION)
  33. include(CheckSymbolExists)
  34. include(CMakePushCheckState)
  35. set(CMAKE_REQUIRED_QUIET ${OpenCL_FIND_QUIETLY})
  36. CMAKE_PUSH_CHECK_STATE()
  37. foreach(VERSION "2_2" "2_1" "2_0" "1_2" "1_1" "1_0")
  38. set(CMAKE_REQUIRED_INCLUDES "${OpenCL_INCLUDE_DIR}")
  39. if(APPLE)
  40. CHECK_SYMBOL_EXISTS(
  41. CL_VERSION_${VERSION}
  42. "${OpenCL_INCLUDE_DIR}/Headers/cl.h"
  43. OPENCL_VERSION_${VERSION})
  44. else()
  45. CHECK_SYMBOL_EXISTS(
  46. CL_VERSION_${VERSION}
  47. "${OpenCL_INCLUDE_DIR}/CL/cl.h"
  48. OPENCL_VERSION_${VERSION})
  49. endif()
  50. if(OPENCL_VERSION_${VERSION})
  51. string(REPLACE "_" "." VERSION "${VERSION}")
  52. set(OpenCL_VERSION_STRING ${VERSION} PARENT_SCOPE)
  53. string(REGEX MATCHALL "[0-9]+" version_components "${VERSION}")
  54. list(GET version_components 0 major_version)
  55. list(GET version_components 1 minor_version)
  56. set(OpenCL_VERSION_MAJOR ${major_version} PARENT_SCOPE)
  57. set(OpenCL_VERSION_MINOR ${minor_version} PARENT_SCOPE)
  58. break()
  59. endif()
  60. endforeach()
  61. CMAKE_POP_CHECK_STATE()
  62. endfunction()
  63. find_path(OpenCL_INCLUDE_DIR
  64. NAMES
  65. CL/cl.h OpenCL/cl.h
  66. PATHS
  67. ENV "PROGRAMFILES(X86)"
  68. ENV AMDAPPSDKROOT
  69. ENV INTELOCLSDKROOT
  70. ENV NVSDKCOMPUTE_ROOT
  71. ENV CUDA_PATH
  72. ENV ATISTREAMSDKROOT
  73. ENV OCL_ROOT
  74. PATH_SUFFIXES
  75. include
  76. OpenCL/common/inc
  77. "AMD APP/include")
  78. _FIND_OPENCL_VERSION()
  79. if(WIN32)
  80. if(CMAKE_SIZEOF_VOID_P EQUAL 4)
  81. find_library(OpenCL_LIBRARY
  82. NAMES OpenCL
  83. PATHS
  84. ENV "PROGRAMFILES(X86)"
  85. ENV AMDAPPSDKROOT
  86. ENV INTELOCLSDKROOT
  87. ENV CUDA_PATH
  88. ENV NVSDKCOMPUTE_ROOT
  89. ENV ATISTREAMSDKROOT
  90. ENV OCL_ROOT
  91. PATH_SUFFIXES
  92. "AMD APP/lib/x86"
  93. lib/x86
  94. lib/Win32
  95. OpenCL/common/lib/Win32)
  96. elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
  97. find_library(OpenCL_LIBRARY
  98. NAMES OpenCL
  99. PATHS
  100. ENV "PROGRAMFILES(X86)"
  101. ENV AMDAPPSDKROOT
  102. ENV INTELOCLSDKROOT
  103. ENV CUDA_PATH
  104. ENV NVSDKCOMPUTE_ROOT
  105. ENV ATISTREAMSDKROOT
  106. ENV OCL_ROOT
  107. PATH_SUFFIXES
  108. "AMD APP/lib/x86_64"
  109. lib/x86_64
  110. lib/x64
  111. OpenCL/common/lib/x64)
  112. endif()
  113. else()
  114. find_library(OpenCL_LIBRARY
  115. NAMES OpenCL
  116. PATHS
  117. ENV AMDAPPSDKROOT
  118. ENV CUDA_PATH
  119. PATH_SUFFIXES
  120. lib/x86_64
  121. lib/x64
  122. lib
  123. lib64)
  124. endif()
  125. set(OpenCL_LIBRARIES ${OpenCL_LIBRARY})
  126. set(OpenCL_INCLUDE_DIRS ${OpenCL_INCLUDE_DIR})
  127. include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  128. find_package_handle_standard_args(
  129. OpenCL
  130. FOUND_VAR OpenCL_FOUND
  131. REQUIRED_VARS OpenCL_LIBRARY OpenCL_INCLUDE_DIR
  132. VERSION_VAR OpenCL_VERSION_STRING)
  133. mark_as_advanced(
  134. OpenCL_INCLUDE_DIR
  135. OpenCL_LIBRARY)
  136. if(OpenCL_FOUND AND NOT TARGET OpenCL::OpenCL)
  137. if(OpenCL_LIBRARY MATCHES "/([^/]+)\\.framework$")
  138. add_library(OpenCL::OpenCL INTERFACE IMPORTED)
  139. set_target_properties(OpenCL::OpenCL PROPERTIES
  140. INTERFACE_LINK_LIBRARIES "${OpenCL_LIBRARY}")
  141. else()
  142. add_library(OpenCL::OpenCL UNKNOWN IMPORTED)
  143. set_target_properties(OpenCL::OpenCL PROPERTIES
  144. IMPORTED_LOCATION "${OpenCL_LIBRARY}")
  145. endif()
  146. set_target_properties(OpenCL::OpenCL PROPERTIES
  147. INTERFACE_INCLUDE_DIRECTORIES "${OpenCL_INCLUDE_DIRS}")
  148. endif()