FindOpenCL.cmake 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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_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. PATH_SUFFIXES
  74. include
  75. OpenCL/common/inc
  76. "AMD APP/include")
  77. _FIND_OPENCL_VERSION()
  78. if(WIN32)
  79. if(CMAKE_SIZEOF_VOID_P EQUAL 4)
  80. find_library(OpenCL_LIBRARY
  81. NAMES OpenCL
  82. PATHS
  83. ENV "PROGRAMFILES(X86)"
  84. ENV AMDAPPSDKROOT
  85. ENV INTELOCLSDKROOT
  86. ENV CUDA_PATH
  87. ENV NVSDKCOMPUTE_ROOT
  88. ENV ATISTREAMSDKROOT
  89. PATH_SUFFIXES
  90. "AMD APP/lib/x86"
  91. lib/x86
  92. lib/Win32
  93. OpenCL/common/lib/Win32)
  94. elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
  95. find_library(OpenCL_LIBRARY
  96. NAMES OpenCL
  97. PATHS
  98. ENV "PROGRAMFILES(X86)"
  99. ENV AMDAPPSDKROOT
  100. ENV INTELOCLSDKROOT
  101. ENV CUDA_PATH
  102. ENV NVSDKCOMPUTE_ROOT
  103. ENV ATISTREAMSDKROOT
  104. PATH_SUFFIXES
  105. "AMD APP/lib/x86_64"
  106. lib/x86_64
  107. lib/x64
  108. OpenCL/common/lib/x64)
  109. endif()
  110. else()
  111. find_library(OpenCL_LIBRARY
  112. NAMES OpenCL
  113. ENV AMDAPPSDKROOT
  114. PATH_SUFFIXES
  115. lib/x86_64
  116. lib/x64)
  117. endif()
  118. set(OpenCL_LIBRARIES ${OpenCL_LIBRARY})
  119. set(OpenCL_INCLUDE_DIRS ${OpenCL_INCLUDE_DIR})
  120. include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  121. find_package_handle_standard_args(
  122. OpenCL
  123. FOUND_VAR OpenCL_FOUND
  124. REQUIRED_VARS OpenCL_LIBRARY OpenCL_INCLUDE_DIR
  125. VERSION_VAR OpenCL_VERSION_STRING)
  126. mark_as_advanced(
  127. OpenCL_INCLUDE_DIR
  128. OpenCL_LIBRARY)
  129. if(OpenCL_FOUND AND NOT TARGET OpenCL::OpenCL)
  130. if(OpenCL_LIBRARY MATCHES "/([^/]+)\\.framework$")
  131. add_library(OpenCL::OpenCL INTERFACE IMPORTED)
  132. set_target_properties(OpenCL::OpenCL PROPERTIES
  133. INTERFACE_LINK_LIBRARIES "${OpenCL_LIBRARY}")
  134. else()
  135. add_library(OpenCL::OpenCL UNKNOWN IMPORTED)
  136. set_target_properties(OpenCL::OpenCL PROPERTIES
  137. IMPORTED_LOCATION "${OpenCL_LIBRARY}")
  138. endif()
  139. set_target_properties(OpenCL::OpenCL PROPERTIES
  140. INTERFACE_INCLUDE_DIRECTORIES "${OpenCL_INCLUDE_DIRS}")
  141. endif()