1# Distributed under the OSI-approved BSD 3-Clause License. See accompanying 2# file Copyright.txt or https://cmake.org/licensing for details. 3 4#[=======================================================================[.rst: 5FindOpenCL 6---------- 7 8.. versionadded:: 3.1 9 10Finds Open Computing Language (OpenCL) 11 12.. versionadded:: 3.10 13 Detection of OpenCL 2.1 and 2.2. 14 15IMPORTED Targets 16^^^^^^^^^^^^^^^^ 17 18.. versionadded:: 3.7 19 20This module defines :prop_tgt:`IMPORTED` target ``OpenCL::OpenCL``, if 21OpenCL has been found. 22 23Result Variables 24^^^^^^^^^^^^^^^^ 25 26This module defines the following variables:: 27 28 OpenCL_FOUND - True if OpenCL was found 29 OpenCL_INCLUDE_DIRS - include directories for OpenCL 30 OpenCL_LIBRARIES - link against this library to use OpenCL 31 OpenCL_VERSION_STRING - Highest supported OpenCL version (eg. 1.2) 32 OpenCL_VERSION_MAJOR - The major version of the OpenCL implementation 33 OpenCL_VERSION_MINOR - The minor version of the OpenCL implementation 34 35The module will also define two cache variables:: 36 37 OpenCL_INCLUDE_DIR - the OpenCL include directory 38 OpenCL_LIBRARY - the path to the OpenCL library 39 40#]=======================================================================] 41 42function(_FIND_OPENCL_VERSION) 43 include(CheckSymbolExists) 44 include(CMakePushCheckState) 45 set(CMAKE_REQUIRED_QUIET ${OpenCL_FIND_QUIETLY}) 46 47 CMAKE_PUSH_CHECK_STATE() 48 foreach(VERSION "2_2" "2_1" "2_0" "1_2" "1_1" "1_0") 49 set(CMAKE_REQUIRED_INCLUDES "${OpenCL_INCLUDE_DIR}") 50 51 if(APPLE) 52 CHECK_SYMBOL_EXISTS( 53 CL_VERSION_${VERSION} 54 "${OpenCL_INCLUDE_DIR}/Headers/cl.h" 55 OPENCL_VERSION_${VERSION}) 56 else() 57 CHECK_SYMBOL_EXISTS( 58 CL_VERSION_${VERSION} 59 "${OpenCL_INCLUDE_DIR}/CL/cl.h" 60 OPENCL_VERSION_${VERSION}) 61 endif() 62 63 if(OPENCL_VERSION_${VERSION}) 64 string(REPLACE "_" "." VERSION "${VERSION}") 65 set(OpenCL_VERSION_STRING ${VERSION} PARENT_SCOPE) 66 string(REGEX MATCHALL "[0-9]+" version_components "${VERSION}") 67 list(GET version_components 0 major_version) 68 list(GET version_components 1 minor_version) 69 set(OpenCL_VERSION_MAJOR ${major_version} PARENT_SCOPE) 70 set(OpenCL_VERSION_MINOR ${minor_version} PARENT_SCOPE) 71 break() 72 endif() 73 endforeach() 74 CMAKE_POP_CHECK_STATE() 75endfunction() 76 77find_path(OpenCL_INCLUDE_DIR 78 NAMES 79 CL/cl.h OpenCL/cl.h 80 PATHS 81 ENV "PROGRAMFILES(X86)" 82 ENV AMDAPPSDKROOT 83 ENV INTELOCLSDKROOT 84 ENV NVSDKCOMPUTE_ROOT 85 ENV CUDA_PATH 86 ENV ATISTREAMSDKROOT 87 ENV OCL_ROOT 88 /usr/local/cuda 89 /opt/cuda 90 PATH_SUFFIXES 91 include 92 OpenCL/common/inc 93 "AMD APP/include") 94 95_FIND_OPENCL_VERSION() 96 97if(WIN32) 98 if(CMAKE_SIZEOF_VOID_P EQUAL 4) 99 find_library(OpenCL_LIBRARY 100 NAMES OpenCL 101 PATHS 102 ENV "PROGRAMFILES(X86)" 103 ENV AMDAPPSDKROOT 104 ENV INTELOCLSDKROOT 105 ENV CUDA_PATH 106 ENV NVSDKCOMPUTE_ROOT 107 ENV ATISTREAMSDKROOT 108 ENV OCL_ROOT 109 PATH_SUFFIXES 110 "AMD APP/lib/x86" 111 lib/x86 112 lib/Win32 113 OpenCL/common/lib/Win32) 114 elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) 115 find_library(OpenCL_LIBRARY 116 NAMES OpenCL 117 PATHS 118 ENV "PROGRAMFILES(X86)" 119 ENV AMDAPPSDKROOT 120 ENV INTELOCLSDKROOT 121 ENV CUDA_PATH 122 ENV NVSDKCOMPUTE_ROOT 123 ENV ATISTREAMSDKROOT 124 ENV OCL_ROOT 125 PATH_SUFFIXES 126 "AMD APP/lib/x86_64" 127 lib/x86_64 128 lib/x64 129 OpenCL/common/lib/x64) 130 endif() 131else() 132 if(CMAKE_SIZEOF_VOID_P EQUAL 4) 133 find_library(OpenCL_LIBRARY 134 NAMES OpenCL 135 PATHS 136 ENV AMDAPPSDKROOT 137 ENV CUDA_PATH 138 /usr/local/cuda 139 /opt/cuda 140 PATH_SUFFIXES 141 lib/x86 142 lib) 143 elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) 144 find_library(OpenCL_LIBRARY 145 NAMES OpenCL 146 PATHS 147 ENV AMDAPPSDKROOT 148 ENV CUDA_PATH 149 /usr/local/cuda 150 /opt/cuda 151 PATH_SUFFIXES 152 lib/x86_64 153 lib/x64 154 lib 155 lib64) 156 endif() 157endif() 158 159set(OpenCL_LIBRARIES ${OpenCL_LIBRARY}) 160set(OpenCL_INCLUDE_DIRS ${OpenCL_INCLUDE_DIR}) 161 162include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) 163find_package_handle_standard_args( 164 OpenCL 165 FOUND_VAR OpenCL_FOUND 166 REQUIRED_VARS OpenCL_LIBRARY OpenCL_INCLUDE_DIR 167 VERSION_VAR OpenCL_VERSION_STRING) 168 169mark_as_advanced( 170 OpenCL_INCLUDE_DIR 171 OpenCL_LIBRARY) 172 173if(OpenCL_FOUND AND NOT TARGET OpenCL::OpenCL) 174 if(OpenCL_LIBRARY MATCHES "/([^/]+)\\.framework$") 175 add_library(OpenCL::OpenCL INTERFACE IMPORTED) 176 set_target_properties(OpenCL::OpenCL PROPERTIES 177 INTERFACE_LINK_LIBRARIES "${OpenCL_LIBRARY}") 178 else() 179 add_library(OpenCL::OpenCL UNKNOWN IMPORTED) 180 set_target_properties(OpenCL::OpenCL PROPERTIES 181 IMPORTED_LOCATION "${OpenCL_LIBRARY}") 182 endif() 183 set_target_properties(OpenCL::OpenCL PROPERTIES 184 INTERFACE_INCLUDE_DIRECTORIES "${OpenCL_INCLUDE_DIRS}") 185endif() 186