FindOpenCL.cmake 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #.rst:
  2. # FindOpenCL
  3. # ----------
  4. #
  5. # Try to find OpenCL
  6. #
  7. # Once done this will define::
  8. #
  9. # OpenCL_FOUND - True if OpenCL was found
  10. # OpenCL_INCLUDE_DIRS - include directories for OpenCL
  11. # OpenCL_LIBRARIES - link against this library to use OpenCL
  12. # OpenCL_VERSION_STRING - Highest supported OpenCL version (eg. 1.2)
  13. # OpenCL_VERSION_MAJOR - The major version of the OpenCL implementation
  14. # OpenCL_VERSION_MINOR - The minor version of the OpenCL implementation
  15. #
  16. # The module will also define two cache variables::
  17. #
  18. # OpenCL_INCLUDE_DIR - the OpenCL include directory
  19. # OpenCL_LIBRARY - the path to the OpenCL library
  20. #
  21. #=============================================================================
  22. # Copyright 2014 Matthaeus G. Chajdas
  23. #
  24. # Distributed under the OSI-approved BSD License (the "License");
  25. # see accompanying file Copyright.txt for details.
  26. #
  27. # This software is distributed WITHOUT ANY WARRANTY; without even the
  28. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  29. # See the License for more information.
  30. #=============================================================================
  31. # (To distribute this file outside of CMake, substitute the full
  32. # License text for the above reference.)
  33. function(_FIND_OPENCL_VERSION)
  34. include(CheckSymbolExists)
  35. include(CMakePushCheckState)
  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}/OpenCL/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 ENV
  67. "PROGRAMFILES(X86)"
  68. AMDAPPSDKROOT
  69. INTELOCLSDKROOT
  70. NVSDKCOMPUTE_ROOT
  71. CUDA_PATH
  72. ATISTREAMSDKROOT
  73. PATH_SUFFIXES
  74. OpenCL/common/inc
  75. "AMD APP/include")
  76. _FIND_OPENCL_VERSION()
  77. if(WIN32)
  78. if(CMAKE_SIZEOF_VOID_P EQUAL 4)
  79. find_library(OpenCL_LIBRARY
  80. NAMES OpenCL
  81. PATHS ENV
  82. "PROGRAMFILES(X86)"
  83. AMDAPPSDKROOT
  84. INTELOCLSDKROOT
  85. CUDA_PATH
  86. NVSDKCOMPUTE_ROOT
  87. ATISTREAMSDKROOT
  88. PATH_SUFFIXES
  89. "AMD APP/lib/x86"
  90. lib/x86
  91. lib/Win32
  92. OpenCL/common/lib/Win32)
  93. elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
  94. find_library(OpenCL_LIBRARY
  95. NAMES OpenCL
  96. PATHS ENV
  97. "PROGRAMFILES(X86)"
  98. AMDAPPSDKROOT
  99. INTELOCLSDKROOT
  100. CUDA_PATH
  101. NVSDKCOMPUTE_ROOT
  102. ATISTREAMSDKROOT
  103. PATH_SUFFIXES
  104. "AMD APP/lib/x86_64"
  105. lib/x86_64
  106. lib/x64
  107. OpenCL/common/lib/x64)
  108. endif()
  109. else()
  110. find_library(OpenCL_LIBRARY
  111. NAMES OpenCL)
  112. endif()
  113. set(OpenCL_LIBRARIES ${OpenCL_LIBRARY})
  114. set(OpenCL_INCLUDE_DIRS ${OpenCL_INCLUDE_DIR})
  115. include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  116. find_package_handle_standard_args(
  117. OpenCL
  118. FOUND_VAR OpenCL_FOUND
  119. REQUIRED_VARS OpenCL_LIBRARY OpenCL_INCLUDE_DIR
  120. VERSION_VAR OpenCL_VERSION_STRING)
  121. mark_as_advanced(
  122. OpenCL_INCLUDE_DIR
  123. OpenCL_LIBRARY)