Implemented effective test for MPI_IN_PLACE, thanks to Michael Wild on the CMake...
authorMark Abraham <Mark.J.Abraham@gmail.com>
Fri, 7 Jan 2011 22:55:00 +0000 (09:55 +1100)
committerMark Abraham <Mark.J.Abraham@gmail.com>
Fri, 7 Jan 2011 22:55:00 +0000 (09:55 +1100)
CMakeLists.txt
cmake/TestMPI_IN_PLACE.c [deleted file]
cmake/gmxTestMPI_IN_PLACE.cmake

index d045126b09d34e6eebbda8c9fe988e67b018f184..0431932b895156be9fc9c89b5d5fc26847f77b81 100644 (file)
@@ -171,6 +171,7 @@ endif(GMX_POWERPC_INVSQRT)
 ########################################################################
 #Process MPI settings
 ########################################################################
+include(CheckCSourceCompiles) # for gmxTestMPI_IN_PLACE
 if(GMX_MPI)
        MESSAGE(WARNING "
             There are known problems with some MPI implementations:
diff --git a/cmake/TestMPI_IN_PLACE.c b/cmake/TestMPI_IN_PLACE.c
deleted file mode 100644 (file)
index 5834469..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#include <mpi.h>
-
-int main(void)
-{
-    void *buf;
-    MPI_Allreduce(MPI_IN_PLACE, buf, 10, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD);
-}
-
-
index 40d395775322ca34203ffd0cde1c44d05c5cfa30..93072973fdf92195077826be465584d89d47bc1b 100644 (file)
@@ -7,14 +7,20 @@
 
 MACRO(GMX_TEST_MPI_IN_PLACE VARIABLE)
     MESSAGE(STATUS "Checking for MPI_IN_PLACE")
-    # First check without any special flags
-    TRY_COMPILE(MPI_IN_PLACE_COMPILE_OK ${CMAKE_BINARY_DIR}
-                    "${CMAKE_SOURCE_DIR}/cmake/TestMPI_IN_PLACE.c"
-                    COMPILE_DEFINITIONS )
+
+    set(CMAKE_REQUIRED_DEFINITIONS ${MPI_COMPILE_FLAGS})
+    set(CMAKE_REQUIRED_INCLUDES ${MPI_INCLUDE_PATH})
+    set(CMAKE_REQUIRED_LIBRARIES ${MPI_LIBRARIES})
+    check_c_source_compiles(
+      "#include <mpi.h>
+int main(void) {
+  void* buf;
+  MPI_Allreduce(MPI_IN_PLACE, buf, 10, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD);
+}" MPI_IN_PLACE_COMPILE_OK)
 
     if(MPI_IN_PLACE_COMPILE_OK)
-    MESSAGE(STATUS "Checking for MPI_IN_PLACE - yes")
-        set(${VARIABLE} ${MPI_IN_PLACE_COMPILE_OK} 
+        MESSAGE(STATUS "Checking for MPI_IN_PLACE - yes")
+            set(${VARIABLE} ${MPI_IN_PLACE_COMPILE_OK} 
                 "Result of test for MPI_IN_PLACE")
     else(MPI_IN_PLACE_COMPILE_OK)
         MESSAGE(STATUS "Checking for MPI_IN_PLACE - no")