From 143e3551fcaea72a769357786b2aea98b9db5973 Mon Sep 17 00:00:00 2001
From: Florent Pruvost <florent.pruvost@inria.fr>
Date: Wed, 9 Dec 2015 14:44:38 +0000
Subject: [PATCH] adapt chameleon to bu used with starpu+simgrid+mpi

---
 CMakeLists.txt                         | 37 +++++++++++++++-----------
 control/common.h                       |  2 +-
 example/basic_zposv/CMakeLists.txt     | 15 +++--------
 example/lapack_to_morse/CMakeLists.txt | 15 +++--------
 include/morse_simulate.h               |  5 +++-
 testing/CMakeLists.txt                 | 15 +++--------
 testing/lin/CMakeLists.txt             |  2 +-
 timing/CMakeLists.txt                  | 15 +++--------
 8 files changed, 43 insertions(+), 63 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6fefe0240..560ffbc8d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -523,6 +523,9 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
             "numerical correctness of algorithms and kernels.${ColourReset}")
         endif ()
 
+        # Simulation mode: we depend on SimGrid
+        find_package(SIMGRID REQUIRED)
+
         # CHAMELEON depends on MPI
         #-------------------------
         if (CHAMELEON_USE_MPI)
@@ -534,7 +537,11 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
                 set(MPI_C_COMPILER smpicc)
             endif()
             if(NOT MPI_C_LIBRARIES)
-                set(MPI_C_LIBRARIES -lsimgrid)
+                set(MPI_C_LIBRARIES "${SIMGRID_LIBRARIES}")
+            endif()
+            if(NOT MPI_C_INCLUDE_PATH)
+                set(MPI_C_INCLUDE_PATH "${SIMGRID_INCLUDE_DIRS}")
+                list(APPEND MPI_C_INCLUDE_PATH "${SIMGRID_INCLUDE_DIRS}/smpi")
             endif()
             find_package(MPI REQUIRED)
 
@@ -559,7 +566,7 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
 
     if( CHAMELEON_SCHED_STARPU )
 
-        set(CHAMELEON_STARPU_VERSION "1.1" CACHE STRING "oldest STARPU version desired")
+      set(CHAMELEON_STARPU_VERSION "1.1" CACHE STRING "oldest STARPU version desired")
 
         # create list of components in order to make a single call to find_package(starpu...)
         if(NOT CHAMELEON_SIMULATION)
@@ -595,7 +602,7 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
             endforeach()
             list(APPEND CMAKE_REQUIRED_FLAGS "-include" "starpu_simgrid_wrap.h")
             string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
-            set(CMAKE_REQUIRED_LIBRARIES "${STARPU_SHM_LIBRARIES}")
+            set(CMAKE_REQUIRED_LIBRARIES "${STARPU_LIBRARIES_DEP}")
             check_function_exists(starpu_data_idle_prefetch_on_node STARPU_IDLE_PREFETCH_FOUND)
             if ( STARPU_IDLE_PREFETCH_FOUND )
                 add_definitions(-DCHAMELEON_USE_STARPU_IDLE_PREFETCH)
@@ -606,7 +613,7 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
             endif()
             if(CHAMELEON_ENABLE_TRACING)
                 # check if fxt profiling is accessible in starpu and activate it in chameleon
-                set(CMAKE_REQUIRED_LIBRARIES "${STARPU_SHM_LIBRARIES}")
+                set(CMAKE_REQUIRED_LIBRARIES "${STARPU_LIBRARIES_DEP}")
                 unset(STARPU_FXT_START_PROFILING_FOUND CACHE)
                 check_function_exists(starpu_fxt_start_profiling STARPU_FXT_START_PROFILING_FOUND)
                 if ( STARPU_FXT_START_PROFILING_FOUND )
@@ -623,7 +630,12 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
                 # Check if a specific function exist
                 list(APPEND CMAKE_REQUIRED_INCLUDES "${MPI_C_INCLUDE_PATH}")
                 list(APPEND CMAKE_REQUIRED_FLAGS "${MPI_C_LINK_FLAGS}")
-                set(CMAKE_REQUIRED_LIBRARIES "${STARPU_MPI_LIBRARIES} -lmpi")
+                set(CMAKE_REQUIRED_LIBRARIES "${STARPU_LIBRARIES_DEP}")
+#                if (CHAMELEON_SIMULATION)
+#                    set(CMAKE_REQUIRED_LIBRARIES "${STARPU_LIBRARIES_DEP}")
+#                else()
+#                    set(CMAKE_REQUIRED_LIBRARIES "${STARPU_LIBRARIES_DEP} -lmpi")
+#                endif()
                 unset(STARPU_MPI_DATA_REGISTER_FOUND CACHE)
                 check_function_exists(starpu_mpi_data_register_comm STARPU_MPI_DATA_REGISTER_FOUND)
                 if ( STARPU_MPI_DATA_REGISTER_FOUND )
@@ -869,17 +881,10 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
     # Save all dependencies (all required links)
     set(CHAMELEON_DEP -lchameleon)
     if(CHAMELEON_SCHED_STARPU)
-        if ( CHAMELEON_USE_MPI )
-            list(APPEND CHAMELEON_DEP
-              -lchameleon_starpu
-              ${STARPU_MPI_LIBRARIES}
-            )
-        else()
-            list(APPEND CHAMELEON_DEP
-              -lchameleon_starpu
-              ${STARPU_SHM_LIBRARIES}
-            )
-        endif()
+        list(APPEND CHAMELEON_DEP
+          -lchameleon_starpu
+          ${STARPU_LIBRARIES_DEP}
+        )
     elseif(CHAMELEON_SCHED_PARSEC)
         list(APPEND CHAMELEON_DEP
           -lchameleon_parsec
diff --git a/control/common.h b/control/common.h
index 97420296e..0caa6f3a3 100644
--- a/control/common.h
+++ b/control/common.h
@@ -3,7 +3,7 @@
  * @copyright (c) 2009-2014 The University of Tennessee and The University
  *                          of Tennessee Research Foundation.
  *                          All rights reserved.
- * @copyright (c) 2012-2014 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
  * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
  *
  **/
diff --git a/example/basic_zposv/CMakeLists.txt b/example/basic_zposv/CMakeLists.txt
index 4e62def44..deb984ae5 100644
--- a/example/basic_zposv/CMakeLists.txt
+++ b/example/basic_zposv/CMakeLists.txt
@@ -47,17 +47,10 @@ list(APPEND libs_for_examples
 )
 
 if(CHAMELEON_SCHED_STARPU)
-    if ( CHAMELEON_USE_MPI )
-        list(APPEND libs_for_examples
-             chameleon_starpu
-             ${STARPU_MPI_LIBRARIES}
-        )
-    else()
-        list(APPEND libs_for_examples
-             chameleon_starpu
-             ${STARPU_SHM_LIBRARIES}
-        )
-    endif()
+    list(APPEND libs_for_examples
+      chameleon_starpu
+      ${STARPU_LIBRARIES_DEP}
+    )
     link_directories(${STARPU_LIBRARY_DIRS})
 elseif(CHAMELEON_SCHED_PARSEC)
     list(APPEND libs_for_examples
diff --git a/example/lapack_to_morse/CMakeLists.txt b/example/lapack_to_morse/CMakeLists.txt
index bbcbdf744..c303a1f51 100644
--- a/example/lapack_to_morse/CMakeLists.txt
+++ b/example/lapack_to_morse/CMakeLists.txt
@@ -42,17 +42,10 @@ list(APPEND libs_for_ltm
 )
 
 if(CHAMELEON_SCHED_STARPU)
-    if ( CHAMELEON_USE_MPI )
-        list(APPEND libs_for_ltm
-             chameleon_starpu
-             ${STARPU_MPI_LIBRARIES}
-        )
-    else()
-        list(APPEND libs_for_ltm
-             chameleon_starpu
-             ${STARPU_SHM_LIBRARIES}
-        )
-    endif()
+    list(APPEND libs_for_ltm
+      chameleon_starpu
+      ${STARPU_LIBRARIES_DEP}
+    )
     link_directories(${STARPU_LIBRARY_DIRS})
 elseif(CHAMELEON_SCHED_PARSEC)
     list(APPEND libs_for_ltm
diff --git a/include/morse_simulate.h b/include/morse_simulate.h
index e02e625ad..50f512128 100644
--- a/include/morse_simulate.h
+++ b/include/morse_simulate.h
@@ -3,7 +3,7 @@
  * @copyright (c) 2009-2014 The University of Tennessee and The University
  *                          of Tennessee Research Foundation.
  *                          All rights reserved.
- * @copyright (c) 2012-2014 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
  * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
  *
  **/
@@ -28,6 +28,9 @@
 /* we need this when starpu is compiled with simgrid enabled */
 #if defined(CHAMELEON_SCHED_STARPU) && defined(CHAMELEON_SIMULATION)
 #include <starpu_simgrid_wrap.h>
+#if defined(CHAMELEON_USE_MPI)
+#define main smpi_simulated_main_
+#endif
 #endif
 
 #endif
diff --git a/testing/CMakeLists.txt b/testing/CMakeLists.txt
index 50716e2ff..a22a932a4 100644
--- a/testing/CMakeLists.txt
+++ b/testing/CMakeLists.txt
@@ -102,17 +102,10 @@ unset(libs_for_tests)
 list(APPEND libs_for_tests chameleon)
 
 if(CHAMELEON_SCHED_STARPU)
-    if ( CHAMELEON_USE_MPI )
-        list(APPEND libs_for_tests
-          chameleon_starpu
-          ${STARPU_MPI_LIBRARIES}
-        )
-    else()
-        list(APPEND libs_for_tests
-          chameleon_starpu
-          ${STARPU_SHM_LIBRARIES}
-        )
-    endif()
+    list(APPEND libs_for_tests
+      chameleon_starpu
+      ${STARPU_LIBRARIES_DEP}
+    )
     link_directories(${STARPU_LIBRARY_DIRS})
 elseif(CHAMELEON_SCHED_PARSEC)
     list(APPEND libs_for_tests
diff --git a/testing/lin/CMakeLists.txt b/testing/lin/CMakeLists.txt
index 3d72982ae..da3f049c4 100644
--- a/testing/lin/CMakeLists.txt
+++ b/testing/lin/CMakeLists.txt
@@ -145,7 +145,7 @@ set(libs_for_tests "chameleon")
 # TODO: Check for name of following libraries (it certainly changed between morse and new_chameleon)
 if(MORSE_SCHED_STARPU)
     list(APPEND libs_for_tests chameleon_starpu)
-    list(APPEND libs_for_tests ${STARPU_LIBRARIES})
+    list(APPEND libs_for_tests ${STARPU_LIBRARIES_DEP})
     list(APPEND libs_for_tests coreblas)
 elseif(MORSE_SCHED_QUARK)
     list(APPEND libs_for_tests chameleon_starpu)
diff --git a/timing/CMakeLists.txt b/timing/CMakeLists.txt
index c00145e85..1183d0348 100644
--- a/timing/CMakeLists.txt
+++ b/timing/CMakeLists.txt
@@ -147,17 +147,10 @@ list(APPEND libs_for_timings
 )
 
 if(CHAMELEON_SCHED_STARPU)
-    if ( CHAMELEON_USE_MPI )
-        list(APPEND libs_for_timings
-          chameleon_starpu
-          ${STARPU_MPI_LIBRARIES}
-        )
-    else()
-        list(APPEND libs_for_timings
-          chameleon_starpu
-          ${STARPU_SHM_LIBRARIES}
-        )
-    endif()
+    list(APPEND libs_for_timings
+      chameleon_starpu
+      ${STARPU_LIBRARIES_DEP}
+    )
     link_directories(${STARPU_LIBRARY_DIRS})
 elseif(CHAMELEON_SCHED_PARSEC)
     list(APPEND libs_for_timings
-- 
GitLab