Add initial support for python bindings
[alexxy/gromacs.git] / cmake / gmxManageGPU.cmake
index b8a610b56f7b1a20f94d9c59c64dec8f97014b0b..69cbd5916d925fd1ec05b509d3bac4a1819ae34e 100644 (file)
@@ -1,10 +1,10 @@
 #
 # This file is part of the GROMACS molecular simulation package.
 #
-# Copyright (c) 2012,2013, by the GROMACS development team, led by
-# David van der Spoel, Berk Hess, Erik Lindahl, and including many
-# others, as listed in the AUTHORS file in the top-level source
-# directory and at http://www.gromacs.org.
+# Copyright (c) 2012,2013,2014, by the GROMACS development team, led by
+# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+# and including many others, as listed in the AUTHORS file in the
+# top-level source directory and at http://www.gromacs.org.
 #
 # GROMACS is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public License
@@ -31,7 +31,7 @@
 #
 # To help us fund GROMACS development, we humbly ask that you cite
 # the research papers on the package. Check out http://www.gromacs.org.
-#
+
 # If the user did not set GMX_GPU we'll consider this option to be
 # in "auto" mode meaning that we will:
 # - search for CUDA and set GMX_GPU=ON we find it
@@ -64,12 +64,8 @@ if(GMX_GPU OR GMX_GPU_AUTO)
         # Noise is acceptable when there is a GPU or the user required one.
         set(FIND_CUDA_QUIETLY QUIET)
     endif()
-    # We support CUDA >=v3.2 on *nix, but <= v4.1 doesn't work with MSVC
-    if(MSVC)
-        find_package(CUDA 4.1 ${FIND_CUDA_QUIETLY})
-    else()
-        find_package(CUDA 3.2 ${FIND_CUDA_QUIETLY})
-    endif()
+    find_package(CUDA ${REQUIRED_CUDA_VERSION} ${FIND_CUDA_QUIETLY})
+
     # Cmake 2.8.12 (and CMake 3.0) introduced a new bug where the cuda
     # library dir is added twice as an rpath on APPLE, which in turn causes
     # the install_name_tool to wreck the binaries when it tries to remove this
@@ -105,44 +101,36 @@ if((GMX_GPU OR GMX_GPU_AUTO) AND NOT GMX_GPU_DETECTION_DONE)
 
     # assemble warning/error message
     if (GMX_DETECT_GPU_AVAILABLE)
-        set(_msg "
-    ${GMX_DETECT_GPU_COUNT} NVIDIA GPU(s) found in the system")
+        set(_msg "${GMX_DETECT_GPU_COUNT} NVIDIA GPU(s) found in the system")
 
         # append GPU names
         if (NOT GMX_DETECT_GPU_INFO STREQUAL "")
             set(_msg "${_msg}:")
             foreach(gpu ${GMX_DETECT_GPU_INFO})
                 set(_msg "${_msg}
-                ${gpu}")
+${gpu}")
             endforeach()
         endif()
 
         # TODO remove the second part of the message when we'll have compute
         # capability information from the detection.
         set(_msg "${_msg}
-    Compute capability information not available, consult the NVIDIA website:
-    https://developer.nvidia.com/cuda-gpus
-            ")
+Compute capability information not available, consult the NVIDIA website:
+https://developer.nvidia.com/cuda-gpus")
     endif()
 
-        set(CUDA_NOTFOUND_MESSAGE "
-    mdrun supports native GPU acceleration on NVIDIA hardware with compute
-    capability >=2.0 (Fermi or later). This requires the NVIDIA CUDA toolkit,
-    which was not found. Its location can be hinted by setting the
-    CUDA_TOOLKIT_ROOT_DIR CMake option (does not work as an environment variable).
-    The typical location would be /usr/local/cuda[-version].
-    Note that CPU or GPU acceleration can be selected at runtime!
+        set(CUDA_NOTFOUND_MESSAGE "mdrun supports native GPU acceleration on NVIDIA hardware with compute capability >= ${REQUIRED_CUDA_COMPUTE_CAPABILITY} (Fermi or later). This requires the NVIDIA CUDA toolkit, which was not found. Its location can be hinted by setting the CUDA_TOOLKIT_ROOT_DIR CMake option (does not work as an environment variable). The typical location would be /usr/local/cuda[-version]. Note that CPU or GPU acceleration can be selected at runtime.
 
-    ${_msg}")
+${_msg}")
         unset(_msg)
 
     if (NOT CUDA_FOUND)
         if (GMX_GPU_AUTO)
             # Disable GPU acceleration in auto mode
-            message(STATUS "No compatible CUDA toolkit found (v3.2+), disabling native GPU acceleration")
+            message(STATUS "No compatible CUDA toolkit found (v4.0+), disabling native GPU acceleration")
             set_property(CACHE GMX_GPU PROPERTY VALUE OFF)
             set(CUDA_NOTFOUND_AUTO ON)
-        else ()
+        else()
             # the user requested CUDA, but it wasn't found
             message(FATAL_ERROR "${CUDA_NOTFOUND_MESSAGE}")
         endif()
@@ -192,11 +180,11 @@ macro(get_cuda_compiler_info COMPILER_INFO COMPILER_FLAGS)
                 string(REGEX REPLACE "[ ]+" ";" _cxx_flags_nospace "${BUILD_CXXFLAGS}")
             endif()
             SET(${COMPILER_FLAGS} "${CUDA_NVCC_FLAGS}${CUDA_NVCC_FLAGS_${_build_type}}; ${_cxx_flags_nospace}")
-        else ()
+        else()
             SET(${COMPILER_INFO} "N/A")
             SET(${COMPILER_FLAGS} "N/A")
-        endif ()
-    endif ()
+        endif()
+    endif()
 endmacro ()
 
 macro(gmx_gpu_setup)
@@ -209,11 +197,6 @@ macro(gmx_gpu_setup)
 
     # no OpenMP is no good!
     if(NOT GMX_OPENMP)
-        message(WARNING "
-    To use GPU acceleration efficiently, mdrun requires OpenMP multi-threading.
-    Without OpenMP a single CPU core can be used with a GPU which is not optimal.
-    Note that with MPI multiple processes can be forced to use a single GPU, but this
-    typically inefficient. Note that you need to set both C and C++ compilers that
-    support OpenMP (CC and CXX environment variables, respectively) when using GPUs.")
+        message(WARNING "To use GPU acceleration efficiently, mdrun requires OpenMP multi-threading. Without OpenMP a single CPU core can be used with a GPU which is not optimal. Note that with MPI multiple processes can be forced to use a single GPU, but this is typically inefficient. You need to set both C and C++ compilers that support OpenMP (CC and CXX environment variables, respectively) when using GPUs.")
     endif()
 endmacro()