mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-09 23:30:35 -06:00
This path was only looked up for windows. The AMD SDK also exists for Linux, and we may want to use the OpenCL library for there.
154 lines
4.1 KiB
CMake
154 lines
4.1 KiB
CMake
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
|
|
|
#.rst:
|
|
# FindOpenCL
|
|
# ----------
|
|
#
|
|
# Try to find OpenCL
|
|
#
|
|
# IMPORTED Targets
|
|
# ^^^^^^^^^^^^^^^^
|
|
#
|
|
# This module defines :prop_tgt:`IMPORTED` target ``OpenCL::OpenCL``, if
|
|
# OpenCL has been found.
|
|
#
|
|
# Result Variables
|
|
# ^^^^^^^^^^^^^^^^
|
|
#
|
|
# This module defines the following variables::
|
|
#
|
|
# OpenCL_FOUND - True if OpenCL was found
|
|
# OpenCL_INCLUDE_DIRS - include directories for OpenCL
|
|
# OpenCL_LIBRARIES - link against this library to use OpenCL
|
|
# OpenCL_VERSION_STRING - Highest supported OpenCL version (eg. 1.2)
|
|
# OpenCL_VERSION_MAJOR - The major version of the OpenCL implementation
|
|
# OpenCL_VERSION_MINOR - The minor version of the OpenCL implementation
|
|
#
|
|
# The module will also define two cache variables::
|
|
#
|
|
# OpenCL_INCLUDE_DIR - the OpenCL include directory
|
|
# OpenCL_LIBRARY - the path to the OpenCL library
|
|
#
|
|
|
|
function(_FIND_OPENCL_VERSION)
|
|
include(CheckSymbolExists)
|
|
include(CMakePushCheckState)
|
|
set(CMAKE_REQUIRED_QUIET ${OpenCL_FIND_QUIETLY})
|
|
|
|
CMAKE_PUSH_CHECK_STATE()
|
|
foreach(VERSION "2_0" "1_2" "1_1" "1_0")
|
|
set(CMAKE_REQUIRED_INCLUDES "${OpenCL_INCLUDE_DIR}")
|
|
|
|
if(APPLE)
|
|
CHECK_SYMBOL_EXISTS(
|
|
CL_VERSION_${VERSION}
|
|
"${OpenCL_INCLUDE_DIR}/Headers/cl.h"
|
|
OPENCL_VERSION_${VERSION})
|
|
else()
|
|
CHECK_SYMBOL_EXISTS(
|
|
CL_VERSION_${VERSION}
|
|
"${OpenCL_INCLUDE_DIR}/CL/cl.h"
|
|
OPENCL_VERSION_${VERSION})
|
|
endif()
|
|
|
|
if(OPENCL_VERSION_${VERSION})
|
|
string(REPLACE "_" "." VERSION "${VERSION}")
|
|
set(OpenCL_VERSION_STRING ${VERSION} PARENT_SCOPE)
|
|
string(REGEX MATCHALL "[0-9]+" version_components "${VERSION}")
|
|
list(GET version_components 0 major_version)
|
|
list(GET version_components 1 minor_version)
|
|
set(OpenCL_VERSION_MAJOR ${major_version} PARENT_SCOPE)
|
|
set(OpenCL_VERSION_MINOR ${minor_version} PARENT_SCOPE)
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
CMAKE_POP_CHECK_STATE()
|
|
endfunction()
|
|
|
|
find_path(OpenCL_INCLUDE_DIR
|
|
NAMES
|
|
CL/cl.h OpenCL/cl.h
|
|
PATHS
|
|
ENV "PROGRAMFILES(X86)"
|
|
ENV AMDAPPSDKROOT
|
|
ENV INTELOCLSDKROOT
|
|
ENV NVSDKCOMPUTE_ROOT
|
|
ENV CUDA_PATH
|
|
ENV ATISTREAMSDKROOT
|
|
PATH_SUFFIXES
|
|
include
|
|
OpenCL/common/inc
|
|
"AMD APP/include")
|
|
|
|
_FIND_OPENCL_VERSION()
|
|
|
|
if(WIN32)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
find_library(OpenCL_LIBRARY
|
|
NAMES OpenCL
|
|
PATHS
|
|
ENV "PROGRAMFILES(X86)"
|
|
ENV AMDAPPSDKROOT
|
|
ENV INTELOCLSDKROOT
|
|
ENV CUDA_PATH
|
|
ENV NVSDKCOMPUTE_ROOT
|
|
ENV ATISTREAMSDKROOT
|
|
PATH_SUFFIXES
|
|
"AMD APP/lib/x86"
|
|
lib/x86
|
|
lib/Win32
|
|
OpenCL/common/lib/Win32)
|
|
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
find_library(OpenCL_LIBRARY
|
|
NAMES OpenCL
|
|
PATHS
|
|
ENV "PROGRAMFILES(X86)"
|
|
ENV AMDAPPSDKROOT
|
|
ENV INTELOCLSDKROOT
|
|
ENV CUDA_PATH
|
|
ENV NVSDKCOMPUTE_ROOT
|
|
ENV ATISTREAMSDKROOT
|
|
PATH_SUFFIXES
|
|
"AMD APP/lib/x86_64"
|
|
lib/x86_64
|
|
lib/x64
|
|
OpenCL/common/lib/x64)
|
|
endif()
|
|
else()
|
|
find_library(OpenCL_LIBRARY
|
|
NAMES OpenCL
|
|
ENV AMDAPPSDKROOT
|
|
PATH_SUFFIXES
|
|
lib/x86_64
|
|
lib/x64)
|
|
endif()
|
|
|
|
set(OpenCL_LIBRARIES ${OpenCL_LIBRARY})
|
|
set(OpenCL_INCLUDE_DIRS ${OpenCL_INCLUDE_DIR})
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
|
|
find_package_handle_standard_args(
|
|
OpenCL
|
|
FOUND_VAR OpenCL_FOUND
|
|
REQUIRED_VARS OpenCL_LIBRARY OpenCL_INCLUDE_DIR
|
|
VERSION_VAR OpenCL_VERSION_STRING)
|
|
|
|
mark_as_advanced(
|
|
OpenCL_INCLUDE_DIR
|
|
OpenCL_LIBRARY)
|
|
|
|
if(OpenCL_FOUND AND NOT TARGET OpenCL::OpenCL)
|
|
if(OpenCL_LIBRARY MATCHES "/([^/]+)\\.framework$")
|
|
add_library(OpenCL::OpenCL INTERFACE IMPORTED)
|
|
set_target_properties(OpenCL::OpenCL PROPERTIES
|
|
INTERFACE_LINK_LIBRARIES "${OpenCL_LIBRARY}")
|
|
else()
|
|
add_library(OpenCL::OpenCL UNKNOWN IMPORTED)
|
|
set_target_properties(OpenCL::OpenCL PROPERTIES
|
|
IMPORTED_LOCATION "${OpenCL_LIBRARY}")
|
|
endif()
|
|
set_target_properties(OpenCL::OpenCL PROPERTIES
|
|
INTERFACE_INCLUDE_DIRECTORIES "${OpenCL_INCLUDE_DIRS}")
|
|
endif()
|