Improved option disabling on switching to OpenMM build in a non-clean build tree
authorSzilard Pall <pszilard@cbr.su.se>
Tue, 31 Aug 2010 15:20:22 +0000 (17:20 +0200)
committerSzilard Pall <pszilard@cbr.su.se>
Tue, 31 Aug 2010 15:20:22 +0000 (17:20 +0200)
When switching from CPU->GPU in a non-clean build tree it seems to work fine,
a few options are disabled/modified from the default values.
However, when doings GPU->CPU switch, the code builds, but the default values
(fftw3, threads, SSE) are not restores and need to be changed manually.

CMakeLists.txt
src/gmxlib/CMakeLists.txt

index e3f3f2e9f2042e8058be658f2cc696d15bdc0b30..5d713e226072fbe0f8291e132cc076bd3f07f1a5 100644 (file)
@@ -49,7 +49,7 @@ gmx_c_flags()
 ########################################################################
 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)
@@ -142,20 +142,25 @@ endif(GMX_MPI)
 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!")
@@ -373,7 +378,7 @@ gmx_test_inline_asm_gcc_x86(GMX_X86_GCC_INLINE_ASM)
 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)
@@ -388,7 +393,7 @@ if (${GMX_ACCELERATION} STREQUAL "auto")
   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)
index ac9cd2aceae2539366ec5c60ba5bfdbc9252b3ac..03a5cba0d6bc3427e3eacc1841048b0d28cef83e 100644 (file)
@@ -87,6 +87,8 @@ if(GMX_FAHCORE)
     list(REMOVE_ITEM GMXLIB_SOURCES ${SELECTION_TEST})
 endif(GMX_FAHCORE)
 
+# only fiddle with assembly kernels if we're not doing OpenMM build
+if(NOT GMX_OPENMM) 
 if(GMX_ASM_USEASM-NASM)
   enable_language(ASM-NASM)
 
@@ -114,6 +116,7 @@ else(GMX_ASM_USEASM-NASM)
   endif()
 
 endif(GMX_ASM_USEASM-NASM)
+endif(NOT GMX_OPENMM)
 
 add_library(gmx ${GMXLIB_SOURCES} ${BLAS_SOURCES} ${LAPACK_SOURCES} ${GMX_SSEKERNEL_C_SRC} ${GMX_SSEKERNEL_ASM_SRC} ${THREAD_MPI_SRC})
 target_link_libraries(gmx ${GMX_EXTRA_LIBRARIES}  ${THREAD_LIB})