|
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