1# -*- mode: autoconf -*- 2# 3# AX_HAVE_OPENCL 4# 5# Check for an OpenCL implementation. If CL is found, HAVE_OPENCL is defined 6# and the required CPP and linker flags are included in the output variables 7# "CL_CPPFLAGS" and "CL_LIBS", respectively. If no usable CL implementation is 8# found then "no_cl" is set to "yes" (otherwise it is set to "no"). 9# 10# If the header <CL/OpenCL.h> is found, "HAVE_CL_OPENCL_H" is defined. If the 11# header <OpenCL/OpenCL.h> is found, HAVE_OPENCL_OPENCL_H is defined. These 12# preprocessor definitions may not be mutually exclusive. 13# 14# This macro first checks /usr/include and /usr/lib for OpenCL support; if it is not 15# found in those locations, then it checks in the standard installation locations 16# for AMD's (/opt/AMDAPP) and NVIDIA's (/usr/local/cuda) SDKs. 17# 18# This program is free software; you can redistribute it and/or modify 19# it under the terms of the GNU General Public License as published by 20# the Free Software Foundation; either version 2, or (at your option) 21# any later version. 22# 23# This program is distributed in the hope that it will be useful, 24# but WITHOUT ANY WARRANTY; without even the implied warranty of 25# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 26# GNU General Public License for more details. 27# 28# You should have received a copy of the GNU General Public License 29# along with this program; if not, write to the Free Software 30# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 31# 02110-1301, USA. 32# 33# As a special exception, the you may copy, distribute and modify the 34# configure scripts that are the output of Autoconf when processing 35# the Macro. You need not follow the terms of the GNU General Public 36# License when using or distributing such scripts. 37# 38AC_DEFUN([AX_HAVE_OPENCL], 39[dnl 40 AC_REQUIRE([AC_CANONICAL_HOST])dnl 41 AC_ARG_ENABLE([opencl], 42 [AS_HELP_STRING([--enable-opencl], 43 [use OpenCL])], 44 [enable_opencl=$enableval], 45 [enable_opencl='no']) 46 if test x"$enable_opencl" != xno ; then 47 CPPFLAGS_CL="" 48 AC_CHECK_HEADERS([CL/cl.h OpenCL/cl.h], [HAVE_CL_H="yes"; break], [HAVE_CL_H="no"]) 49 if test x"$HAVE_CL_H" = xno ; then 50 # check for AMD's SDK 51 AC_MSG_CHECKING([for AMD's SDK cl.h]) 52 if test -d /opt/AMDAPP/include/CL ; then 53 HAVE_CL_H="yes" 54 AC_DEFINE([HAVE_CL_CL_H]) 55 CPPFLAGS_CL="-I/opt/AMDAPP/include" 56 fi 57 AC_MSG_RESULT([$HAVE_CL_H]) 58 fi 59 if test x"$HAVE_CL_H" = xno ; then 60 # check for NVIDIA's SDK 61 AC_MSG_CHECKING([for NVIDIA's SDK cl.h]) 62 if test -d /usr/local/cuda/include/CL ; then 63 HAVE_CL_H="yes" 64 AC_DEFINE([HAVE_CL_CL_H]) 65 CPPFLAGS_CL="-I/usr/local/cuda/include" 66 elif test -d /usr/local/cuda-6.5/include/CL ; then 67 HAVE_CL_H="yes" 68 AC_DEFINE([HAVE_CL_CL_H]) 69 CPPFLAGS_CL="-I/usr/local/cuda-6.5/include" 70 elif test -d /usr/local/cuda-6.0/include/CL ; then 71 HAVE_CL_H="yes" 72 AC_DEFINE([HAVE_CL_CL_H]) 73 CPPFLAGS_CL="-I/usr/local/cuda-6.0/include" 74 elif test -d /usr/local/cuda-5.5/include/CL ; then 75 HAVE_CL_H="yes" 76 AC_DEFINE([HAVE_CL_CL_H]) 77 CPPFLAGS_CL="-I/usr/local/cuda-5.5/include" 78 fi 79 AC_MSG_RESULT([$HAVE_CL_H]) 80 fi 81 if test x"$HAVE_CL_H" = xno ; then 82 no_cl=yes 83 AC_MSG_WARN([no OpenCL headers found]) 84 CL_ENABLED=false 85 CL_VERSION=0 86 else 87 # 88 # First we check for Mac OS X, since OpenCL is standard there 89 # 90 LIBS_CL="none" 91 AC_MSG_CHECKING([for OpenCL library]) 92 case "$host_os" in 93 darwin*) # On Mac OS X we check for installed frameworks 94 AX_CHECK_FRAMEWORK([OpenCL], [ 95 LIBS_CL="-framework OpenCL" 96 no_cl=no 97 AC_MSG_RESULT(yes) 98 CL_ENABLED=true 99 CL_VERSION=1 100 ] 101 , 102 [ 103 no_cl=yes 104 AC_MSG_RESULT(no) 105 CL_ENABLED=false 106 CL_VERSION=0 107 ]) 108 ;; 109 *) 110 save_LIBS=$LIBS 111 save_CFLAGS=$CFLAGS 112 CFLAGS=$CPPFLAGS_CL 113 LIBS="$save_LIBS -L/usr/lib64/nvidia -L/usr/lib/nvidia -lOpenCL" 114 AC_LINK_IFELSE( 115 [AC_LANG_PROGRAM([ 116 #ifdef HAVE_OPENCL_CL_H 117 #include <OpenCL/cl.h> 118 #elif defined(HAVE_CL_CL_H) 119 #include <CL/cl.h> 120 #endif 121 #include <stddef.h> 122 ],[ 123 clGetPlatformIDs(0, NULL, NULL); 124 ])],[ 125 no_cl=no 126 AC_MSG_RESULT(yes) 127 CL_ENABLED=true 128 CL_VERSION=1 129 LIBS_CL="$save_LIBS -L/usr/lib64/nvidia -L/usr/lib/nvidia -lOpenCL" 130 ],[ 131 no_cl=yes 132 AC_MSG_RESULT(no) 133 CL_ENABLED=false 134 CL_VERSION=0 135 ]) 136 137 LIBS=$save_LIBS 138 CFLAGS=$save_CFLAGS 139 ;; 140 esac 141 fi 142 else 143 no_cl=yes 144 AC_MSG_CHECKING([for OpenCL library]) 145 AC_MSG_RESULT(disabled) 146 CL_ENABLED=false 147 CL_VERSION=0 148 fi 149]) 150