|
1 | 1 | # ########################################################################
|
2 |
| -# Copyright 2013 Advanced Micro Devices, Inc. |
| 2 | +# Copyright 2015 Advanced Micro Devices, Inc. |
3 | 3 | #
|
4 | 4 | # Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | # you may not use this file except in compliance with the License.
|
|
14 | 14 | # limitations under the License.
|
15 | 15 | # ########################################################################
|
16 | 16 |
|
17 |
| - |
18 | 17 | # Locate an OpenCL implementation.
|
19 | 18 | # Currently supports AMD APP SDK (http://developer.amd.com/sdks/AMDAPPSDK/Pages/default.aspx/)
|
20 | 19 | #
|
|
46 | 45 | # target_link_libraries(foo ${OPENCL_LIBRARIES})
|
47 | 46 | #
|
48 | 47 | #-----------------------
|
| 48 | +include( CheckSymbolExists ) |
| 49 | +include( CMakePushCheckState ) |
| 50 | + |
| 51 | +if( DEFINED OPENCL_ROOT OR DEFINED ENV{OPENCL_ROOT}) |
| 52 | + message( STATUS "Defined OPENCL_ROOT: ${OPENCL_ROOT}, ENV{OPENCL_ROOT}: $ENV{OPENCL_ROOT}" ) |
| 53 | +endif( ) |
49 | 54 |
|
50 | 55 | find_path(OPENCL_INCLUDE_DIRS
|
51 |
| - NAMES OpenCL/cl.h CL/cl.h |
52 |
| - HINTS |
53 |
| - ${OPENCL_ROOT}/include |
54 |
| - $ENV{AMDAPPSDKROOT}/include |
55 |
| - $ENV{CUDA_PATH}/include |
56 |
| - PATHS |
57 |
| - /usr/include |
58 |
| - /usr/local/include |
59 |
| - /usr/local/cuda/include |
60 |
| - /opt/cuda/include |
61 |
| - DOC "OpenCL header file path" |
| 56 | + NAMES OpenCL/cl.h CL/cl.h |
| 57 | + HINTS |
| 58 | + ${OPENCL_ROOT}/include |
| 59 | + $ENV{OPENCL_ROOT}/include |
| 60 | + $ENV{AMDAPPSDKROOT}/include |
| 61 | + $ENV{CUDA_PATH}/include |
| 62 | + PATHS |
| 63 | + /usr/include |
| 64 | + /usr/local/include |
| 65 | + /usr/local/cuda/include |
| 66 | + DOC "OpenCL header file path" |
62 | 67 | )
|
63 | 68 | mark_as_advanced( OPENCL_INCLUDE_DIRS )
|
| 69 | +message( STATUS "OPENCL_INCLUDE_DIRS: ${OPENCL_INCLUDE_DIRS}" ) |
| 70 | + |
| 71 | +set( OpenCL_VERSION "0.0" ) |
| 72 | + |
| 73 | +cmake_push_check_state( RESET ) |
| 74 | +set( CMAKE_REQUIRED_INCLUDES "${OPENCL_INCLUDE_DIRS}" ) |
| 75 | + |
| 76 | +# Bug in check_symbol_exists prevents us from specifying a list of files, so we loop |
| 77 | +# Only 1 of these files will exist on a system, so the other file will not clobber the output variable |
| 78 | +if( APPLE ) |
| 79 | + set( CL_HEADER_FILE "OpenCL/cl.h" ) |
| 80 | +else( ) |
| 81 | + set( CL_HEADER_FILE "CL/cl.h" ) |
| 82 | +endif( ) |
| 83 | + |
| 84 | +check_symbol_exists( CL_VERSION_2_0 ${CL_HEADER_FILE} HAVE_CL_2_0 ) |
| 85 | +check_symbol_exists( CL_VERSION_1_2 ${CL_HEADER_FILE} HAVE_CL_1_2 ) |
| 86 | +check_symbol_exists( CL_VERSION_1_1 ${CL_HEADER_FILE} HAVE_CL_1_1 ) |
| 87 | +# message( STATUS "HAVE_CL_2_0: ${HAVE_CL_2_0}" ) |
| 88 | +# message( STATUS "HAVE_CL_1_2: ${HAVE_CL_1_2}" ) |
| 89 | +# message( STATUS "HAVE_CL_1_1: ${HAVE_CL_1_1}" ) |
| 90 | + |
| 91 | +# set OpenCL_VERSION to the highest detected version |
| 92 | +if( HAVE_CL_2_0 ) |
| 93 | + set( OpenCL_VERSION "2.0" ) |
| 94 | +elseif( HAVE_CL_1_2 ) |
| 95 | + set( OpenCL_VERSION "1.2" ) |
| 96 | +elseif( HAVE_CL_1_1 ) |
| 97 | + set( OpenCL_VERSION "1.1" ) |
| 98 | +endif( ) |
| 99 | + |
| 100 | +cmake_pop_check_state( ) |
64 | 101 |
|
65 | 102 | # Search for 64bit libs if FIND_LIBRARY_USE_LIB64_PATHS is set to true in the global environment, 32bit libs else
|
66 | 103 | get_property( LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS )
|
| 104 | +if( LIB64 ) |
| 105 | + message( STATUS "FindOpenCL searching for 64-bit libraries" ) |
| 106 | +else( ) |
| 107 | + message( STATUS "FindOpenCL searching for 32-bit libraries" ) |
| 108 | +endif( ) |
67 | 109 |
|
68 | 110 | if( LIB64 )
|
69 |
| - find_library( OPENCL_LIBRARIES |
70 |
| - NAMES OpenCL |
71 |
| - HINTS |
72 |
| - ${OPENCL_ROOT}/lib |
73 |
| - $ENV{AMDAPPSDKROOT}/lib |
74 |
| - $ENV{CUDA_PATH}/lib |
75 |
| - DOC "OpenCL dynamic library path" |
76 |
| - PATH_SUFFIXES x86_64 x64 x86_64/sdk |
77 |
| - PATHS |
78 |
| - /usr/lib |
79 |
| - /usr/local/cuda/lib |
80 |
| - /opt/cuda/lib |
81 |
| - ) |
| 111 | + find_library( OPENCL_LIBRARIES |
| 112 | + NAMES OpenCL |
| 113 | + HINTS |
| 114 | + ${OPENCL_ROOT}/lib |
| 115 | + $ENV{OPENCL_ROOT}/lib |
| 116 | + $ENV{AMDAPPSDKROOT}/lib |
| 117 | + $ENV{CUDA_PATH}/lib |
| 118 | + DOC "OpenCL dynamic library path" |
| 119 | + PATH_SUFFIXES x86_64 x64 x86_64/sdk |
| 120 | + PATHS |
| 121 | + /usr/lib |
| 122 | + /usr/local/cuda/lib |
| 123 | + ) |
82 | 124 | else( )
|
83 |
| - find_library( OPENCL_LIBRARIES |
84 |
| - NAMES OpenCL |
85 |
| - HINTS |
86 |
| - ${OPENCL_ROOT}/lib |
87 |
| - $ENV{AMDAPPSDKROOT}/lib |
88 |
| - $ENV{CUDA_PATH}/lib |
89 |
| - DOC "OpenCL dynamic library path" |
90 |
| - PATH_SUFFIXES x86 Win32 |
91 |
| - |
92 |
| - PATHS |
93 |
| - /usr/lib |
94 |
| - /usr/local/cuda/lib |
95 |
| - /opt/cuda/lib |
96 |
| - ) |
| 125 | + find_library( OPENCL_LIBRARIES |
| 126 | + NAMES OpenCL |
| 127 | + HINTS |
| 128 | + ${OPENCL_ROOT}/lib |
| 129 | + $ENV{OPENCL_ROOT}/lib |
| 130 | + $ENV{AMDAPPSDKROOT}/lib |
| 131 | + $ENV{CUDA_PATH}/lib |
| 132 | + DOC "OpenCL dynamic library path" |
| 133 | + PATH_SUFFIXES x86 Win32 |
| 134 | + PATHS |
| 135 | + /usr/lib |
| 136 | + /usr/local/cuda/lib |
| 137 | + ) |
97 | 138 | endif( )
|
98 | 139 | mark_as_advanced( OPENCL_LIBRARIES )
|
99 | 140 |
|
| 141 | +# message( STATUS "OpenCL_FIND_VERSION: ${OpenCL_FIND_VERSION}" ) |
| 142 | +if( OpenCL_VERSION VERSION_LESS OpenCL_FIND_VERSION ) |
| 143 | + message( FATAL_ERROR "Requested OpenCL version: ${OpenCL_FIND_VERSION}, Found OpenCL version: ${OpenCL_VERSION}" ) |
| 144 | +endif( ) |
| 145 | + |
| 146 | +# If we asked for OpenCL 1.2, and we found a version installed greater than that, pass the 'use deprecated' flag |
| 147 | +if( (OpenCL_FIND_VERSION VERSION_LESS "2.0") AND (OpenCL_VERSION VERSION_GREATER OpenCL_FIND_VERSION) ) |
| 148 | + add_definitions( -DCL_USE_DEPRECATED_OPENCL_2_0_APIS ) |
| 149 | + |
| 150 | + # If we asked for OpenCL 1.1, and we found a version installed greater than that, pass the 'use deprecated' flag |
| 151 | + if( (OpenCL_FIND_VERSION VERSION_LESS "1.2") AND (OpenCL_VERSION VERSION_GREATER OpenCL_FIND_VERSION) ) |
| 152 | + add_definitions( -DCL_USE_DEPRECATED_OPENCL_1_1_APIS ) |
| 153 | + endif( ) |
| 154 | +endif( ) |
| 155 | + |
100 | 156 | include( FindPackageHandleStandardArgs )
|
101 |
| -FIND_PACKAGE_HANDLE_STANDARD_ARGS( OPENCL DEFAULT_MSG OPENCL_LIBRARIES OPENCL_INCLUDE_DIRS ) |
| 157 | +FIND_PACKAGE_HANDLE_STANDARD_ARGS( OPENCL |
| 158 | + REQUIRED_VARS OPENCL_LIBRARIES OPENCL_INCLUDE_DIRS |
| 159 | + VERSION_VAR OpenCL_VERSION |
| 160 | + ) |
102 | 161 |
|
103 | 162 | if( NOT OPENCL_FOUND )
|
104 | 163 | message( STATUS "FindOpenCL looked for libraries named: OpenCL" )
|
| 164 | +else( ) |
| 165 | + message(STATUS "FindOpenCL ${OPENCL_LIBRARIES}, ${OPENCL_INCLUDE_DIRS}") |
105 | 166 | endif()
|
0 commit comments