From d9a35a25bb003fa4d476ccfbd8c703727e6601d1 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 7 Mar 2016 16:41:07 +0100 Subject: [PATCH] improved CUDA/DKS checks --- configure.ac | 109 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 86 insertions(+), 23 deletions(-) diff --git a/configure.ac b/configure.ac index 48eb28c8..622036be 100644 --- a/configure.ac +++ b/configure.ac @@ -852,28 +852,91 @@ dnl ----------------------------------------------- dnl Ask user if DKS support should be enabled (DKS = Dynamic Kernel Scheduler. Used to interface GPU's, MIC, etc) dnl ----------------------------------------------- -AC_ARG_ENABLE([dks], [AS_HELP_STRING([--enable-dks],[build musrfit with DKS (GPU/MIC) support [default=no]])], [DKS_ENABLED=1], [DKS_ENABLED=0]) +AC_ARG_ENABLE([dks], [AS_HELP_STRING([--enable-dks],[build musrfit with DKS (GPU/MIC) support [default=no]])], [ + DKS_LIBDIR="" + DKS_INCDIR="" + DKS_LIBS="" + DKS_CFLAGS="" -DKS_LIBDIR="" -DKS_INCDIR="" -DKS_LIBS="" -DKS_CFLAGS="" -if test "${DKS_ENABLED}" == "1"; then - dnl --------------------------------------------- - dnl Eventually some strict testing about the availibilty of DKS should go in here - dnl Most probably it will be most sensible to ship DKS with the musrfit source code - dnl All hard wired stuff needs to disappear - dnl --------------------------------------------- - AC_DEFINE([HAVE_DKS], [1], [Define to 1 if DKS is available]) - AC_DEFINE([DKS_CUDA], [1], [Define to 1 if DKS Cuda is available]) - DKS_CUDADIR="/usr/local/cuda-6.5/targets/x86_64-linux" - DKS_INCDIR="/home/l_suter_a/DKS/src" - DKS_CFLAGS="-DDKS_OPENCL -DDKS_CUDA -I${DKS_INCDIR} -I${DKS_CUDADIR}/include" - DKS_LIBDIR="/home/l_suter_a/DKS/build/src" - DKS_LIBS="-L${DKS_CUDADIR}/lib -lOpenCL -L${DKS_LIBDIR} -ldksshared" - AC_SUBST(DKS_CFLAGS) - AC_SUBST(DKS_LIBS) -fi + dnl --------------------------------------------- + dnl Check (i) that Cuda is found. (ii) that DKS is found + dnl Eventually also openCL only should be tested, i.e. DKS without Cuda + dnl This could also mean openCL without GPU, e.g. on Mac OS X + dnl --------------------------------------------- + + dnl --------------------------------------------- + dnl check for Cuda + dnl --------------------------------------------- + AC_ARG_WITH([cuda], + [AS_HELP_STRING([--with-cuda],[prefix of the CUDA installation, e.g. /usr/local/cuda])], + [cuda_prefix=$withval], + [cuda_prefix="/usr/local/cuda"]) + + dnl Setting the prefix to the default if only --with-cuda was given + AC_MSG_CHECKING([whether CUDA is installed in a standard location]) + if test "$cuda_prefix" == "yes"; then + if test "$withval" == "yes"; then + cuda_prefix="/usr/local/cuda" + fi + fi + AC_MSG_RESULT([${cuda_prefix}]) + + dnl Checking for nvcc + AC_MSG_CHECKING([nvcc in $cuda_prefix/bin]) + if test -x "$cuda_prefix/bin/nvcc"; then + AC_MSG_RESULT([found]) + AC_DEFINE_UNQUOTED([NVCC_PATH], ["$cuda_prefix/bin/nvcc"], [path to nvcc binary]) + else + AC_MSG_RESULT([not found!]) + AC_MSG_FAILURE([nvcc was not found in $cuda_prefix/bin]) + fi + + CUDA_CFLAGS="-I$cuda_prefix/include" + CXXFLAGS="$CUDA_CFLAGS $CXXFLAGS" + CUDA_LDFLAGS="-L$cuda_prefix/lib64" + LDFLAGS="$CUDA_LDFLAGS $LDFLAGS" + + dnl And the header and the lib + AC_CHECK_HEADER([cuda.h], [], AC_MSG_FAILURE([Couldn't find cuda.h]), [#include ]) + AC_CHECK_LIB([cuda], [cuInit], [], AC_MSG_FAILURE([Couldn't find libcuda])) + + dnl ------------------------------------------- + dnl check for DKS + dnl ------------------------------------------- + AC_ARG_WITH([dks], + [AS_HELP_STRING([--with-dks],[prefix of the DKS installation, e.g. /usr/local/DKS/build])], + [dks_prefix=$withval], + [dks_prefix="/usr/local/DKS/build"]) + + dnl Setting the prefix to the default if only --with-dks was given + AC_MSG_CHECKING([whether DKS is installed in a standard location]) + if test "$dks_prefix" == "yes"; then + if test "$withval" == "yes"; then + dks_prefix="/usr/local/DKS/build" + fi + fi + + if test -x "$dks_prefix"; then + AC_MSG_RESULT([found]) + else + AC_MSG_RESULT([not found!]) + AC_MSG_FAILURE([$dks_prefix not present]) + fi + + AC_DEFINE([HAVE_DKS], [1], [Define to 1 if DKS is available]) +dnl AC_DEFINE([DKS_CUDA], [1], [Define to 1 if DKS Cuda is available]) + DKS_CUDADIR="$cuda_prefix" + DKS_INCDIR="$dks_prefix/include" + DKS_CFLAGS="-DDKS_OPENCL -DDKS_CUDA -I${DKS_INCDIR} ${CUDA_CFLAGS}" + DKS_LIBDIR="$dks_prefix/lib" + DKS_LIBS="${CUDA_LDFLAGS} -lOpenCL -L${DKS_LIBDIR} -ldksshared" + AC_SUBST(DKS_CFLAGS) + AC_SUBST(DKS_LIBS) + + DKS_ENABLED=1 + ], + [DKS_ENABLED=0] +) dnl ----------------------------------------------- dnl Ask user if the building of musredit/musrgui should be disabled @@ -1234,7 +1297,7 @@ AC_CONFIG_FILES([Makefile \ src/classes/PMusr.pc \ src/classes/PUserFcnBase.pc \ src/external/Makefile \ - src/external/MusrRoot/Makefile \ + src/external/MusrRoot/Makefile \ src/external/MusrRoot/TMusrRunHeader.pc \ src/external/TLemRunHeader/Makefile \ src/external/TLemRunHeader/TLemRunHeader.pc \ @@ -1370,7 +1433,7 @@ else echo " Qt not needed (Qt editors disabled)" fi echo "" -if test "${DKS_ENABLED}" -eq 1; then +if test "${DKS_ENABLED}" = "1"; then echo " DKS enabled" else echo " DKS disabled"