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.
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
10
# WIN32 should work, but is untested
12
FIND_PACKAGE( PackageHandleStandardArgs )
14
SET (OPENCL_VERSION_STRING "0.1.0")
15
SET (OPENCL_VERSION_MAJOR 0)
16
SET (OPENCL_VERSION_MINOR 1)
17
SET (OPENCL_VERSION_PATCH 0)
19
SET(OPENCL_VENDOR "ANY" CACHE STRING "Choose OpenCL Vendor")
20
SET_PROPERTY(CACHE OPENCL_VENDOR PROPERTY STRINGS ANY NVIDIA ATI INTEL)
22
SET(OPENCL_VENDOR_INTERNAL "ANY" CACHE STRING "")
23
if (NOT OPENCL_VENDOR_INTERNAL MATCHES ${OPENCL_VENDOR})
24
SET(OPENCL_INCLUDE_DIRS NOTFOUND CACHE PATH "" FORCE)
25
SET(OPENCL_LIBRARIES NOTFOUND CACHE FILEPATH "" FORCE)
27
SET(OPENCL_VENDOR_INTERNAL ${OPENCL_VENDOR} CACHE STRING "" FORCE)
29
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
30
set(OPENCL_CUDA_ARCHEXT "64")
31
set(OPENCL_ATI_ARCHLIB "x86_64")
32
set(OPENCL_ATI_ARCHEXT "64")
33
else(CMAKE_SIZEOF_VOID_P EQUAL 8)
34
set(OPENCL_CUDA_ARCHEXT "")
35
set(OPENCL_ATI_ARCHLIB "x86")
36
set(OPENCL_ATI_ARCHEXT "32")
37
endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
42
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL DOC "OpenCL lib for OSX")
43
FIND_PATH(OPENCL_INCLUDE_DIRS OpenCL/cl.h DOC "Include for OpenCL on OSX")
44
FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS OpenCL/cl.hpp DOC "Include for OpenCL CPP bindings on OSX")
47
FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h)
48
FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp)
50
# The AMD SDK currently installs both x86 and x86_64 libraries
51
# This is only a hack to find out architecture
52
IF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
53
SET(OPENCL_LIB_DIR "$ENV{ATISTREAMSDKROOT}/lib/x86_64")
54
ELSE (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
55
SET(OPENCL_LIB_DIR "$ENV{ATISTREAMSDKROOT}/lib/x86")
56
ENDIF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
57
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib ${OPENCL_LIB_DIR})
59
GET_FILENAME_COMPONENT(_OPENCL_INC_CAND ${OPENCL_LIB_DIR}/../../include ABSOLUTE)
61
# On Win32 search relative to the library
62
FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "${_OPENCL_INC_CAND}")
63
FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "${_OPENCL_INC_CAND}")
66
# Unix style platforms
68
SET(OPENCL_CPU_SUPPORT FALSE)
69
SET(OPENCL_GPU_SUPPORT FALSE)
71
SET(OPENCL_INCLUDE_SEARCH_PATH)
72
SET(OPENCL_LIBRARY_SEARCH_PATH)
74
IF (NOT DISABLE_HWCHECK AND EXISTS /usr/sbin/lspci)
76
COMMAND /usr/sbin/lspci
77
RESULT_VARIABLE LSPCI_RESULT
78
OUTPUT_VARIABLE LSPCI_OUTPUT
84
IF ((OPENCL_VENDOR MATCHES "ANY") OR (OPENCL_VENDOR MATCHES "NVIDIA"))
85
IF (CUDA_FOUND AND CUDA_CUDART_LIBRARY)
86
SET(OPENCL_PLATFORMS ${OPENCL_PLATFORMS} CUDA)
88
if (LSPCI_RESULT EQUAL 0)
89
string(TOUPPER ${LSPCI_OUTPUT} LSPCI_OUTPUT_UC)
90
if (LSPCI_OUTPUT_UC MATCHES "(GEFORCE|TESLA|VGA.*NVIDIA)")
91
SET(OPENCL_GPU_SUPPORT TRUE)
95
SET(OPENCL_GPU_SUPPORT TRUE)
98
GET_FILENAME_COMPONENT(OPENCL_CUDA_LIB_DIR ${CUDA_CUDART_LIBRARY} PATH)
100
SET(OPENCL_LIBRARY_SEARCH_PATH
101
${OPENCL_LIBRARY_SEARCH_PATH}
102
${OPENCL_CUDA_LIB_DIR}
105
SET(OPENCL_INCLUDE_SEARCH_PATH
106
${OPENCL_INCLUDE_SEARCH_PATH}
107
${CUDA_TOOLKIT_ROOT_DIR}/include
112
IF ((OPENCL_VENDOR MATCHES "ANY") OR (OPENCL_VENDOR MATCHES "ATI"))
113
IF (ATI_TOOLKIT_FOUND AND ATI_TOOLKIT_LIBRARIES)
114
SET(OPENCL_PLATFORMS ${OPENCL_PLATFORMS} ATI)
116
SET(OPENCL_CPU_SUPPORT TRUE)
117
if (LSPCI_RESULT EQUAL 0)
118
if (LSPCI_OUTPUT MATCHES ATI)
119
SET(OPENCL_GPU_SUPPORT TRUE)
123
SET(OPENCL_GPU_SUPPORT TRUE)
126
GET_FILENAME_COMPONENT(OPENCL_ATI_LIB_DIR ${ATI_TOOLKIT_LIBRARIES} PATH)
128
SET(OPENCL_LIBRARY_SEARCH_PATH
129
${OPENCL_LIBRARY_SEARCH_PATH}
130
${OPENCL_ATI_LIB_DIR}
133
SET(OPENCL_INCLUDE_SEARCH_PATH
134
${OPENCL_INCLUDE_SEARCH_PATH}
135
${ATI_TOOLKIT_ROOT_DIR}/include
141
IF ((OPENCL_VENDOR MATCHES "ANY") OR (OPENCL_VENDOR MATCHES "INTEL"))
142
IF (INTEL_OPENCL_TOOLKIT_FOUND AND INTEL_OPENCL_TOOLKIT_LIBRARIES)
143
SET(OPENCL_PLATFORMS ${OPENCL_PLATFORMS} INTEL)
145
SET(OPENCL_CPU_SUPPORT TRUE)
147
GET_FILENAME_COMPONENT(OPENCL_INTEL_LIB_DIR ${INTEL_OPENCL_TOOLKIT_LIBRARIES} PATH)
149
SET(OPENCL_LIBRARY_SEARCH_PATH
150
${OPENCL_LIBRARY_SEARCH_PATH}
151
${OPENCL_INTEL_LIB_DIR}
154
SET(OPENCL_INCLUDE_SEARCH_PATH
155
${OPENCL_INCLUDE_SEARCH_PATH}
156
${INTEL_OPENCL_TOOLKIT_ROOT_DIR}/include
161
if (OPENCL_VENDOR MATCHES "ANY")
162
SET(OPENCL_LIBRARY_SEARCH_PATH
163
${OPENCL_LIBRARY_SEARCH_PATH}
166
SET(OPENCL_INCLUDE_SEARCH_PATH
167
${OPENCL_INCLUDE_SEARCH_PATH}
173
FIND_LIBRARY(OPENCL_LIBRARIES
175
PATHS ${OPENCL_LIBRARY_SEARCH_PATH}
178
IF (OPENCL_LIBRARIES)
179
GET_FILENAME_COMPONENT(OPENCL_LIB_DIR ${OPENCL_LIBRARIES} PATH)
180
GET_FILENAME_COMPONENT(OPENCL_RELATIVE_INCLUDE_DIR ${OPENCL_LIB_DIR}/../../include ABSOLUTE)
181
SET(OPENCL_INCLUDE_SEARCH_PATH ${OPENCL_INCLUDE_SEARCH_PATH} ${OPENCL_RELATIVE_INCLUDE_DIR})
183
FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS ${OPENCL_INCLUDE_SEARCH_PATH})
184
FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS ${OPENCL_INCLUDE_SEARCH_PATH})
185
ENDIF (OPENCL_LIBRARIES)
188
FIND_PACKAGE_HANDLE_STANDARD_ARGS( OpenCL DEFAULT_MSG OPENCL_LIBRARIES OPENCL_INCLUDE_DIRS )
190
IF( _OPENCL_CPP_INCLUDE_DIRS )
191
SET( OPENCL_HAS_CPP_BINDINGS TRUE )
192
LIST( APPEND OPENCL_INCLUDE_DIRS ${_OPENCL_CPP_INCLUDE_DIRS} )
193
# This is often the same, so clean up
194
LIST( REMOVE_DUPLICATES OPENCL_INCLUDE_DIRS )
195
ENDIF( _OPENCL_CPP_INCLUDE_DIRS )
201
_OPENCL_CPP_INCLUDE_DIRS
202
OPENCL_VENDOR_INTERNAL