########################################################################
option(GMX_DOUBLE "Use double precision" OFF)
option(GMX_MPI "Build a parallel (message-passing) version of GROMACS" OFF)
-option(GMX_THREADS "Build a parallel (threaded-based) version of GROMACS)" ON)
+option(GMX_THREADS "Build a parallel (thread-based) version of GROMACS)" ON)
option(GMX_SOFTWARE_INVSQRT "Use GROMACS software 1/sqrt" ON)
option(GMX_FAHCORE "Build a library with mdrun functionality" OFF)
option(GMX_OPENMM "Accelerated execution on GPUs through the OpenMM library" OFF)
if(GMX_OPENMM)
cmake_minimum_required(VERSION 2.6.4)
# we'll use the built-in fft to avoid unnecessary dependencies
- set (GMX_FFT_LIBRARY "fftpack")
+ message(STATUS "No external FFT libraries needed for the OpenMM build, using fftpack!")
+ set (GMX_FFT_LIBRARY "fftpack" CACHE STRING
+ "No external FFT libraries needed for the OpenMM build, using fftpack!" FORCE)
if(GMX_MPI)
message(FATAL_ERROR "The OpenMM build is not compatible with MPI!")
endif(GMX_MPI)
if(GMX_THREADS)
- message(STATUS "Threads not compatible with OpenMM build, disabled")
- set(GMX_THREADS OFF)
+ message(STATUS "Threads not compatible with OpenMM build, disabled!")
+ set(GMX_THREADS OFF CACHE BOOL
+ "Threads not compatible with OpenMM build, disabled!" FORCE)
endif(GMX_THREADS)
if(GMX_SOFTWARE_INVSQRT)
- set(GMX_SOFTWARE_INVSQRT OFF)
+ set(GMX_SOFTWARE_INVSQRT OFF FORCE)
endif(GMX_SOFTWARE_INVSQRT)
- if(NOT GMX_ACCELERATION MATCHES "auto|none|None|NONE" OR NOT ${GMX_ACCELERATION} STREQUAL "")
- message(WARNING "The OpenMM build does not support other acceleration modes!")
- set(GMX_ACCELERATION "none")
+ if(NOT GMX_ACCELERATION MATCHES "^(none|None|NONE)")
+ message(WARNING "CPU-based acceleration turned off, OpenMM does not support/need any!")
+ unset(GMX_ACCELERATION CACHE)
+ set(GMX_ACCELERATION "none" CACHE STRING
+ "CPU-based acceleration turned off, OpenMM does not support/need any!" FORCE)
endif()
if(GMX_FAHCORE)
message(FATAL_ERROR "The OpenMM build does not support FAH build!")
gmx_test_inline_asm_msvc_x86(GMX_X86_MSVC_INLINE_ASM)
# turn on SSE if supported with reasonable defaults.
-if (${GMX_ACCELERATION} STREQUAL "auto")
+if (${GMX_ACCELERATION} STREQUAL "auto" AND NOT GMX_OPENMM)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i.86|x86|x64|x86_64|AMD64|amd64)")
set(GMX_ACCELERATION "SSE" CACHE STRING "Accelerated kernels. Pick one of: none, SSE, BlueGene, Power6, ia64, altivec" FORCE)
else()
set(GMX_ACCELERATION "none" CACHE STRING "Accelerated kernels. Pick one of: none, SSE, BlueGene, Power6, ia64, altivec" FORCE)
endif()
-endif (${GMX_ACCELERATION} STREQUAL "auto")
+endif (${GMX_ACCELERATION} STREQUAL "auto" AND NOT GMX_OPENMM)
include(gmxTestXDR)
set (FFTW3_FIND_QUIETLY TRUE)
endif (FFTW3_INCLUDE_DIR AND FFTW3_LIBRARIES)
-find_path (FFTW3_INCLUDE_DIR fftw3.h)
+find_path (FFTW3_INCLUDE_DIR fftw3.h
+ CACHE STRING "Path to headers for double precision FFTW3")
+
+
+find_library (FFTW3_LIBRARIES
+ NAMES fftw3
+ PATHS "${FFTW3_INCLUDE_DIR}/../lib"
+ CACHE STRING "Double precision FFTW3 libraries")
-find_library (FFTW3_LIBRARIES NAMES fftw3)
# handle the QUIETLY and REQUIRED arguments and set FFTW_FOUND to TRUE if
# all listed variables are TRUE
# FFTW3F_LIBRARIES - List of libraries when using FFTW.
# FFTW3F_FOUND - True if FFTW found.
-if (FFTW3F_INCLUDE_DIR)
+if (FFTW3F_INCLUDE_DIR AND FFTW3F_LIBRARIES)
# Already in cache, be silent
set (FFTW3F_FIND_QUIETLY TRUE)
-endif (FFTW3F_INCLUDE_DIR)
+endif (FFTW3F_INCLUDE_DIR AND FFTW3F_LIBRARIES)
-find_path (FFTW3F_INCLUDE_DIR fftw3.h)
+find_path (FFTW3F_INCLUDE_DIR fftw3.h
+ CACHE STRING "Path to headers for single precision FFTW3")
-find_library (FFTW3F_LIBRARIES NAMES fftw3f)
+find_library (FFTW3F_LIBRARIES
+ NAMES fftw3f
+ PATHS "${FFTW3F_INCLUDE_DIR}/../lib"
+ CACHE STRING "Single precision FFTW3 libraries")
# handle the QUIETLY and REQUIRED arguments and set FFTW_FOUND to TRUE if
# all listed variables are TRUE
}
/* For now this is just to double-check if OpenMM selected the GPU we wanted,
- but when we'll let OpenMM select the GPU automatically, it will query the devideId.
+ but when we'll let OpenMM select the GPU automatically, it will query the deviceId.
*/
if (tmp != devId)
{
gmx_fatal(FARGS, "Internal error: OpenMM is using device #%d"
"while initialized for device #%d", tmp, devId);
}
- cout << ">>>>> OpenMM devId=" << tmp << endl;
/* check GPU compatibility */
char gpuname[STRLEN];