# -*- mode: autoconf -*- # # AX_OPENCL # # Check for an OpenCL implementation. If CL is found, _OPENCL is defined and # the required compiler and linker flags are included in the output variables # "CL_CFLAGS" and "CL_LIBS", respectively. If no usable CL implementation is # found, "no_cl" is set to "yes". # # If the header "CL/OpenCL.h" is found, "HAVE_CL_OPENCL_H" is defined. If the # header "OpenCL/OpenCL.h" is found, HAVE_OPENCL_OPENCL_H is defined. These # preprocessor definitions may not be mutually exclusive. # # Based on AX_CHECK_GL, version: 2.4 author: Braden McDaniel # <braden@endoframe.com> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception, the you may copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts. # AC_DEFUN([AX_OPENCL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([ACX_PTHREAD])dnl AC_ARG_ENABLE([opencl], [AC_HELP_STRING([--disable-opencl], [do not use OpenCL])], [disable_opencl=$enableval], [disable_opencl='yes']) if test "$disable_opencl" = 'yes'; then AC_LANG_PUSH([$1]) AX_LANG_COMPILER_MS AS_IF([test X$ax_compiler_ms = Xno], [CL_CFLAGS="${PTHREAD_CFLAGS}"; CL_LIBS="${PTHREAD_LIBS} -lm"]) ax_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CL_CFLAGS $CPPFLAGS" AC_CHECK_HEADERS([CL/cl.h OpenCL/cl.h]) CPPFLAGS=$ax_save_CPPFLAGS AC_CHECK_HEADERS([windows.h]) m4_define([AX_OPENCL_PROGRAM], [AC_LANG_PROGRAM([[ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include <windows.h> # endif # ifdef HAVE_CL_CL_H # include <CL/cl.h> # elif defined(HAVE_OPENCL_CL_H) # include <OpenCL/cl.h> # else # error no CL.h # endif]], [[clCreateContextFromType(0,0,0,0,0)]])]) AC_CACHE_CHECK([for OpenCL library], [ax_cv_check_cl_libcl], [ax_cv_check_cl_libcl=no case $host_cpu in x86_64) ax_check_cl_libdir=lib64 ;; *) ax_check_cl_libdir=lib ;; esac ax_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CL_CFLAGS $CPPFLAGS" ax_save_LIBS=$LIBS LIBS="" ax_check_libs="-lOpenCL -lCL -lclparser" for ax_lib in $ax_check_libs; do AS_IF([test X$ax_compiler_ms = Xyes], [ax_try_lib=`echo $ax_lib | $SED -e 's/^-l//' -e 's/$/.lib/'`], [ax_try_lib=$ax_lib]) LIBS="$ax_try_lib $CL_LIBS $ax_save_LIBS" AC_LINK_IFELSE([AX_OPENCL_PROGRAM], [ax_cv_check_cl_libcl=$ax_try_lib; break], [ax_check_cl_nvidia_flags="-L/usr/$ax_check_cl_libdir/nvidia" LIBS="$ax_try_lib $ax_check_cl_nvidia_flags $CL_LIBS $ax_save_LIBS" AC_LINK_IFELSE([AX_OPENCL_PROGRAM], [ax_cv_check_cl_libcl="$ax_try_lib $ax_check_cl_nvidia_flags"; break], [ax_check_cl_dylib_flag='-framework OpenCL -L/System/Library/Frameworks/OpenCL.framework/Versions/A/Libraries' LIBS="$ax_try_lib $ax_check_cl_dylib_flag $CL_LIBS $ax_save_LIBS" AC_LINK_IFELSE([AX_OPENCL_PROGRAM], [ax_cv_check_cl_libcl="$ax_try_lib $ax_check_cl_dylib_flag"; break])])]) done AS_IF([test "X$ax_cv_check_cl_libcl" = Xno -a X$no_x = Xyes], [LIBS='-framework OpenCL' AC_LINK_IFELSE([AX_OPENCL_PROGRAM], [ax_cv_check_cl_libcl=$LIBS])]) LIBS=$ax_save_LIBS CPPFLAGS=$ax_save_CPPFLAGS]) AS_IF([test "X$ax_cv_check_cl_libcl" = Xno], [no_cl=yes; CL_CFLAGS=""; CL_LIBS=""], [CL_LIBS="$ax_cv_check_cl_libcl $CL_LIBS"; AC_DEFINE([_OPENCL], [1], [Define this for the OpenCL Accelerator])]) AC_LANG_POP([$1]) fi AC_SUBST([CL_CFLAGS]) AC_SUBST([CL_LIBS]) ])dnl