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. 4# 5# To set the paths manually, define these environment variables: 6# OpenCL_INCPATH - Include path (e.g. OpenCL_INCPATH=/opt/cuda/4.0/cuda/include) 7# OpenCL_LIBPATH - Library path (e.h. OpenCL_LIBPATH=/usr/lib64/nvidia) 8# 9# Once done this will define 10# OpenCL_FOUND - system has OpenCL 11# OpenCL_INCLUDE_DIRS - the OpenCL include directory 12# OpenCL_LIBRARIES - link these to use OpenCL 13 14FIND_PACKAGE(PackageHandleStandardArgs) 15 16SET (OpenCL_VERSION_STRING "0.1.0") 17SET (OpenCL_VERSION_MAJOR 0) 18SET (OpenCL_VERSION_MINOR 1) 19SET (OpenCL_VERSION_PATCH 0) 20 21IF (APPLE) 22 23 FIND_LIBRARY(OpenCL_LIBRARIES OpenCL DOC "OpenCL lib for OSX") 24 FIND_PATH(OpenCL_INCLUDE_DIRS OpenCL/cl.h DOC "Include for OpenCL on OSX") 25 FIND_PATH(_OpenCL_CPP_INCLUDE_DIRS OpenCL/cl.hpp DOC "Include for OpenCL CPP bindings on OSX") 26 27ELSE (APPLE) 28 29 IF (WIN32) 30 # The AMD SDK currently installs both x86 and x86_64 libraries 31 # This is only a hack to find out architecture 32 IF( CMAKE_SIZEOF_VOID_P EQUAL 8 ) 33 SET(OpenCL_LIB_DIR "$ENV{AMDAPPSDKROOT}/lib/x86_64") 34 ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 ) 35 SET(OpenCL_LIB_DIR "$ENV{AMDAPPSDKROOT}/lib/x86") 36 ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 ) 37 38 FIND_LIBRARY(OpenCL_LIBRARIES OpenCL.lib PATHS 39 ${OpenCL_LIB_DIR} $ENV{OpenCL_LIBPATH} $ENV{CUDA_LIB_PATH}) 40 41 GET_FILENAME_COMPONENT(_OpenCL_INC_CAND ${OpenCL_LIB_DIR}/../../include ABSOLUTE) 42 43 # On Win32 search relative to the library 44 FIND_PATH(OpenCL_INCLUDE_DIRS CL/cl.h PATHS 45 ${_OpenCL_INC_CAND} $ENV{OpenCL_INCPATH} $ENV{CUDA_INC_PATH}) 46 FIND_PATH(_OpenCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS 47 ${_OpenCL_INC_CAND} $ENV{OpenCL_INCPATH} $ENV{CUDA_INC_PATH}) 48 49 ELSE (WIN32) 50 51 # Unix style platforms 52 FIND_LIBRARY(OpenCL_LIBRARIES OpenCL 53 PATHS ENV LD_LIBRARY_PATH ENV OpenCL_LIBPATH 54 ) 55 56 GET_FILENAME_COMPONENT(OpenCL_LIB_DIR ${OpenCL_LIBRARIES} PATH) 57 GET_FILENAME_COMPONENT(_OpenCL_INC_CAND ${OpenCL_LIB_DIR}/../../include ABSOLUTE) 58 59 # The AMD SDK currently does not place its headers 60 # in /usr/include, therefore also search relative 61 # to the library 62 FIND_PATH(OpenCL_INCLUDE_DIRS CL/cl.h PATHS "$ENV{CUDADIR}/include" ${_OpenCL_INC_CAND} "/usr/local/cuda/include" "/opt/cuda/include" "/opt/AMDAPP/include" ENV OpenCL_INCPATH) 63 FIND_PATH(_OpenCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "$ENV{CUDADIR}/include" ${_OpenCL_INC_CAND} "/usr/local/cuda/include" "/opt/cuda/include" "/opt/AMDAPP/include" ENV OpenCL_INCPATH) 64 # for Mali GPUs, libmali must be linked 65 FIND_LIBRARY(OpenCL_LIBRARIES_MALI mali 66 PATHS ENV LD_LIBRARY_PATH ENV OpenCL_LIBPATH "/usr/lib64" "$ENV{CUDADIR}/lib64" 67 ) 68 IF (OpenCL_LIBRARIES_MALI) 69 SET(OpenCL_LIBRARIES ${OpenCL_LIBRARIES} ${OpenCL_LIBRARIES_MALI}) 70 ENDIF (OpenCL_LIBRARIES_MALI) 71 ENDIF (WIN32) 72 73ENDIF (APPLE) 74 75FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenCL DEFAULT_MSG OpenCL_LIBRARIES OpenCL_INCLUDE_DIRS) 76 77IF(_OpenCL_CPP_INCLUDE_DIRS) 78 SET( OpenCL_HAS_CPP_BINDINGS TRUE ) 79 LIST( APPEND OpenCL_INCLUDE_DIRS ${_OpenCL_CPP_INCLUDE_DIRS} ) 80 # This is often the same, so clean up 81 LIST( REMOVE_DUPLICATES OpenCL_INCLUDE_DIRS ) 82ENDIF(_OpenCL_CPP_INCLUDE_DIRS) 83 84MARK_AS_ADVANCED( OpenCL_INCLUDE_DIRS ) 85