FindOpenCL.cmake 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. # - Try to find OpenCL
  2. # This module tries to find an OpenCL implementation on your system. It supports
  3. # AMD / ATI, Apple and NVIDIA implementations, but shoudl work, too.
  4. #
  5. # Once done this will define
  6. # OPENCL_FOUND - system has OpenCL
  7. # OPENCL_INCLUDE_DIRS - the OpenCL include directory
  8. # OPENCL_LIBRARIES - link these to use OpenCL
  9. #
  10. # WIN32 should work, but is untested
  11. FIND_PACKAGE( PackageHandleStandardArgs )
  12. SET (OPENCL_VERSION_STRING "0.1.0")
  13. SET (OPENCL_VERSION_MAJOR 0)
  14. SET (OPENCL_VERSION_MINOR 1)
  15. SET (OPENCL_VERSION_PATCH 0)
  16. IF (APPLE)
  17. FIND_LIBRARY(OPENCL_LIBRARIES OpenCL DOC "OpenCL lib for OSX")
  18. FIND_PATH(OPENCL_INCLUDE_DIRS OpenCL/cl.h DOC "Include for OpenCL on OSX")
  19. FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS OpenCL/cl.hpp DOC "Include for OpenCL CPP bindings on OSX")
  20. ELSE (APPLE)
  21. IF (WIN32)
  22. FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h)
  23. FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp)
  24. # The AMD SDK currently installs both x86 and x86_64 libraries
  25. # This is only a hack to find out architecture
  26. IF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
  27. SET(OPENCL_LIB_DIR "$ENV{ATISTREAMSDKROOT}/lib/x86_64")
  28. ELSE (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
  29. SET(OPENCL_LIB_DIR "$ENV{ATISTREAMSDKROOT}/lib/x86")
  30. ENDIF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
  31. FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib ${OPENCL_LIB_DIR})
  32. GET_FILENAME_COMPONENT(_OPENCL_INC_CAND ${OPENCL_LIB_DIR}/../../include ABSOLUTE)
  33. # On Win32 search relative to the library
  34. FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "${_OPENCL_INC_CAND}")
  35. FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "${_OPENCL_INC_CAND}")
  36. ELSE (WIN32)
  37. # Unix style platforms
  38. FIND_LIBRARY(OPENCL_LIBRARIES OpenCL
  39. ENV LD_LIBRARY_PATH
  40. /usr/lib/nvidia-current
  41. /usr/lib64/nvidia
  42. /opt/nvidia-current
  43. /opt/AMDAPP/lib
  44. /opt/AMDAPP/lib/x86_64
  45. )
  46. GET_FILENAME_COMPONENT(OPENCL_LIB_DIR ${OPENCL_LIBRARIES} PATH)
  47. GET_FILENAME_COMPONENT(_OPENCL_INC_CAND ${OPENCL_LIB_DIR}/../../include ABSOLUTE)
  48. # The AMD SDK currently does not place its headers
  49. # in /usr/include, therefore also search relative
  50. # to the library
  51. FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS
  52. ${_OPENCL_INC_CAND}
  53. /usr/local/cuda/include
  54. /opt/cuda/include
  55. /opt/AMDAPP/include)
  56. FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS ${_OPENCL_INC_CAND})
  57. ENDIF (WIN32)
  58. ENDIF (APPLE)
  59. FIND_PACKAGE_HANDLE_STANDARD_ARGS( OpenCL DEFAULT_MSG OPENCL_LIBRARIES OPENCL_INCLUDE_DIRS )
  60. IF( _OPENCL_CPP_INCLUDE_DIRS )
  61. SET( OPENCL_HAS_CPP_BINDINGS TRUE )
  62. LIST( APPEND OPENCL_INCLUDE_DIRS ${_OPENCL_CPP_INCLUDE_DIRS} )
  63. # This is often the same, so clean up
  64. LIST( REMOVE_DUPLICATES OPENCL_INCLUDE_DIRS )
  65. ENDIF( _OPENCL_CPP_INCLUDE_DIRS )
  66. MARK_AS_ADVANCED(
  67. OPENCL_LIBRARIES
  68. OPENCL_INCLUDE_DIRS
  69. _OPENCL_CPP_INCLUDE_DIRS
  70. )