FindOpenCL.cmake 4.5 KB

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