From 2c068554b590735e1217945592f2cda2cf0cc3d8 Mon Sep 17 00:00:00 2001
From: Florent Pruvost <florent.pruvost@inria.fr>
Date: Tue, 13 Dec 2016 14:14:21 +0100
Subject: [PATCH] add morse_cmake as a git submodule

---
 .gitmodules               |    3 +
 CMakeLists.txt            | 1929 ++++++++++++++++++-------------------
 cmake_modules/morse_cmake |    1 +
 3 files changed, 962 insertions(+), 971 deletions(-)
 create mode 100644 .gitmodules
 create mode 160000 cmake_modules/morse_cmake

diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 000000000..596263d74
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "cmake_modules/morse_cmake"]
+	path = cmake_modules/morse_cmake
+	url = git@gitlab.inria.fr:solverstack/morse_cmake.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ff0813519..458992703 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,7 +18,7 @@
 #     Univ. of California Berkeley,
 #     Univ. of Colorado Denver.
 #
-#  @version 0.9.0
+#  @version 0.9.1
 #  @author Cedric Castagnede
 #  @author Emmanuel Agullo
 #  @author Mathieu Faverge
@@ -37,1109 +37,1096 @@ if("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}")
 endif()
 
 # set project version number
-set(MORSE_VERSION_MAJOR 1)
-set(MORSE_VERSION_MINOR 0)
-set(MORSE_VERSION_MICRO 0)
-# set subproject version number
 set(CHAMELEON_VERSION_MAJOR 0)
 set(CHAMELEON_VERSION_MINOR 9)
 set(CHAMELEON_VERSION_MICRO 1)
 
-set( MORSE_DISTRIB_DIR "" CACHE PATH "Directory of MORSE distribution")
-
-if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
+set(MORSE_CMAKE_DIR "" CACHE PATH "Directory of MORSE CMake modules, can be external to the project")
+
+# Add extra cmake module path and initialize morse cmake modules
+# --------------------------------------------------------------
+list(APPEND CMAKE_MODULE_PATH ${MORSE_CMAKE_DIR}/cmake_modules)
+if(MORSE_CMAKE_DIR)
+    list(APPEND CMAKE_MODULE_PATH "${MORSE_CMAKE_DIR}/cmake_modules/morse_cmake")
+    set(MORSE_CMAKE_MODULE_PATH ${MORSE_CMAKE_DIR}/cmake_modules/morse_cmake )
+elseif(EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/morse_cmake")
+    list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules/morse_cmake")
+    set(MORSE_CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_modules/morse_cmake )
+else()
+  message(FATAL_ERROR "Chameleon CMake system relies on morse_cmake modules developed here: "
+    "https://gitlab.inria.fr/solverstack/morse_cmake. Please set MORSE_CMAKE_DIR to this source "
+    "directory.")
+endif()
+include(MorseInit)
+include(GenPkgConfig)
+
+#############################################
+#                                           #
+#        Compilation of CHAMELEON           #
+#                                           #
+#############################################
+
+
+###############################################################################
+# Parameters/Options #
+######################
+
+# Set the RPATH config
+# --------------------
+
+# use, i.e. don't skip the full RPATH for the build tree
+set(CMAKE_SKIP_BUILD_RPATH  FALSE)
+
+# when building, don't use the install RPATH already
+# (but later on when installing)
+set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
+
+# the RPATH to be used when installing
+list(APPEND CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
+
+# Misc options
+# ------------
+option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
+
+# Define precision supported by CHAMELEON
+# -----------------------------------------
+set( RP_CHAMELEON_DICTIONNARY ${MORSE_CMAKE_MODULE_PATH}/precision_generator/subs.py )
+set( RP_CHAMELEON_PRECISIONS  "s;d;c;z" )
+include(RulesPrecisions)
+
+# Options to select the runtime
+# -----------------------------
+
+# Create a list of possible runtime
+set(CHAMELEON_SCHED_list "PARSEC" "STARPU" "QUARK")
+
+# Initially PaRSEC runtime is enabled
+option(CHAMELEON_SCHED_PARSEC
+    "Enable PaRSEC scheduler as the default runtime
+    (Conflict with other CHAMELEON_SCHED_* options)" OFF)
+option(CHAMELEON_SCHED_STARPU
+    "Enable StarPU scheduler as the default runtime
+    (Conflict with other CHAMELEON_SCHED_* options)" OFF)
+option(CHAMELEON_SCHED_QUARK
+    "Enable Quark scheduler as the default runtime
+    (Conflict with other CHAMELEON_SCHED_* options)" OFF)
+
+# For now, we are able to compile only one runtime at a time, so we disable combinations of runtimes
+if (CHAMELEON_SCHED_QUARK)
+    set(CHAMELEON_SCHED_STARPU OFF)
+    set(CHAMELEON_SCHED_PARSEC OFF)
+elseif (CHAMELEON_SCHED_STARPU)
+    set(CHAMELEON_SCHED_QUARK OFF)
+    set(CHAMELEON_SCHED_PARSEC OFF)
+elseif (CHAMELEON_SCHED_PARSEC)
+    set(CHAMELEON_SCHED_QUARK OFF)
+    set(CHAMELEON_SCHED_STARPU OFF)
+endif()
+# Set default to StarPU if nothing specific is required by the user
+if ( NOT CHAMELEON_SCHED_STARPU AND NOT CHAMELEON_SCHED_PARSEC AND NOT CHAMELEON_SCHED_QUARK )
+    set(CHAMELEON_SCHED_STARPU ON)
+endif()
+if (CHAMELEON_SCHED_STARPU)
+    message("-- ${BoldGreen}CHAMELEON_SCHED_STARPU is set to ON: CHAMELEON uses StarPU runtime\n"
+            "   To use CHAMELEON with Quark  runtime: set CHAMELEON_SCHED_QUARK  to ON\n"
+            "   To use CHAMELEON with PaRSEC runtime: set CHAMELEON_SCHED_PARSEC to ON\n"
+            "   (CHAMELEON_SCHED_STARPU will be disabled)${ColourReset}")
+elseif(CHAMELEON_SCHED_QUARK)
+    message("-- ${BoldGreen}CHAMELEON_SCHED_QUARK is set to ON: CHAMELEON uses Quark runtime\n"
+            "   To use CHAMELEON with StarPU runtime: set CHAMELEON_SCHED_STARPU to ON\n"
+            "   To use CHAMELEON with PaRSEC runtime: set CHAMELEON_SCHED_PARSEC to ON\n"
+            "   (CHAMELEON_SCHED_QUARK will be disabled)${ColourReset}")
+elseif(CHAMELEON_SCHED_PARSEC)
+    message("-- ${BoldGreen}CHAMELEON_SCHED_PARSEC is set to ON: CHAMELEON uses PaRSEC runtime\n"
+            "   To use CHAMELEON with StarPU runtime: set CHAMELEON_SCHED_STARPU to ON\n"
+            "   To use CHAMELEON with Quark  runtime: set CHAMELEON_SCHED_QUARK  to ON\n"
+            "   (CHAMELEON_SCHED_PARSEC will be disabled)${ColourReset}")
+endif()
 
-    # Add extra cmake module path and initialize morse cmake modules
-    # --------------------------------------------------------------
-    if(MORSE_DISTRIB_DIR)
-        list(APPEND CMAKE_MODULE_PATH ${MORSE_DISTRIB_DIR}/cmake_modules)
-        list(APPEND CMAKE_MODULE_PATH "${MORSE_DISTRIB_DIR}/cmake_modules/morse")
-        set(MORSE_CMAKE_MODULE_PATH ${MORSE_DISTRIB_DIR}/cmake_modules/morse )
-    elseif(EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
-        list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_modules)
-        list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules/morse")
-        set(MORSE_CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_modules/morse )
-    endif()
-    include(MorseInit)
-    include(GenPkgConfig)
-
-    #############################################
-    #                                           #
-    #        Compilation of CHAMELEON           #
-    #                                           #
-    #############################################
-
-
-    ###############################################################################
-    # Parameters/Options #
-    ######################
-
-    # Set the RPATH config
-    # --------------------
-
-    # use, i.e. don't skip the full RPATH for the build tree
-    set(CMAKE_SKIP_BUILD_RPATH  FALSE)
-
-    # when building, don't use the install RPATH already
-    # (but later on when installing)
-    set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
-
-    # the RPATH to be used when installing
-    list(APPEND CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
-
-    # Misc options
-    # ------------
-    option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
-
-    # Define precision supported by CHAMELEON
-    # -----------------------------------------
-    set( RP_CHAMELEON_DICTIONNARY ${MORSE_CMAKE_MODULE_PATH}/precision_generator/subs.py )
-    set( RP_CHAMELEON_PRECISIONS  "s;d;c;z" )
-    include(RulesPrecisions)
-
-    # Options to select the runtime
-    # -----------------------------
-
-    # Create a list of possible runtime
-    set(CHAMELEON_SCHED_list "PARSEC" "STARPU" "QUARK")
-
-    # Initially PaRSEC runtime is enabled
-    option(CHAMELEON_SCHED_PARSEC
-        "Enable PaRSEC scheduler as the default runtime
-        (Conflict with other CHAMELEON_SCHED_* options)" OFF)
-    option(CHAMELEON_SCHED_STARPU
-        "Enable StarPU scheduler as the default runtime
-        (Conflict with other CHAMELEON_SCHED_* options)" OFF)
-    option(CHAMELEON_SCHED_QUARK
-        "Enable Quark scheduler as the default runtime
-        (Conflict with other CHAMELEON_SCHED_* options)" OFF)
-
-    # For now, we are able to compile only one runtime at a time, so we disable combinations of runtimes
-    if (CHAMELEON_SCHED_QUARK)
-        set(CHAMELEON_SCHED_STARPU OFF)
-        set(CHAMELEON_SCHED_PARSEC OFF)
-    elseif (CHAMELEON_SCHED_STARPU)
-        set(CHAMELEON_SCHED_QUARK OFF)
-        set(CHAMELEON_SCHED_PARSEC OFF)
-    elseif (CHAMELEON_SCHED_PARSEC)
-        set(CHAMELEON_SCHED_QUARK OFF)
-        set(CHAMELEON_SCHED_STARPU OFF)
-    endif()
-    # Set default to StarPU if nothing specific is required by the user
-    if ( NOT CHAMELEON_SCHED_STARPU AND NOT CHAMELEON_SCHED_PARSEC AND NOT CHAMELEON_SCHED_QUARK )
-        set(CHAMELEON_SCHED_STARPU ON)
-    endif()
-    if (CHAMELEON_SCHED_STARPU)
-        message("-- ${BoldGreen}CHAMELEON_SCHED_STARPU is set to ON: CHAMELEON uses StarPU runtime\n"
-                "   To use CHAMELEON with Quark  runtime: set CHAMELEON_SCHED_QUARK  to ON\n"
-                "   To use CHAMELEON with PaRSEC runtime: set CHAMELEON_SCHED_PARSEC to ON\n"
-                "   (CHAMELEON_SCHED_STARPU will be disabled)${ColourReset}")
-    elseif(CHAMELEON_SCHED_QUARK)
-        message("-- ${BoldGreen}CHAMELEON_SCHED_QUARK is set to ON: CHAMELEON uses Quark runtime\n"
-                "   To use CHAMELEON with StarPU runtime: set CHAMELEON_SCHED_STARPU to ON\n"
-                "   To use CHAMELEON with PaRSEC runtime: set CHAMELEON_SCHED_PARSEC to ON\n"
-                "   (CHAMELEON_SCHED_QUARK will be disabled)${ColourReset}")
-    elseif(CHAMELEON_SCHED_PARSEC)
-        message("-- ${BoldGreen}CHAMELEON_SCHED_PARSEC is set to ON: CHAMELEON uses PaRSEC runtime\n"
-                "   To use CHAMELEON with StarPU runtime: set CHAMELEON_SCHED_STARPU to ON\n"
-                "   To use CHAMELEON with Quark  runtime: set CHAMELEON_SCHED_QUARK  to ON\n"
-                "   (CHAMELEON_SCHED_PARSEC will be disabled)${ColourReset}")
+# Check that one, and only one, SCHED option is set to ON
+# count number of runtime sets to ON
+math(EXPR number_of_active_runtime 0)
+foreach (runtime ${CHAMELEON_SCHED_list})
+    if (CHAMELEON_SCHED_${runtime})
+        math(EXPR number_of_active_runtime "${number_of_active_runtime}+1")
     endif()
+endforeach()
+if (NOT number_of_active_runtime STREQUAL 1)
+    message(FATAL_ERROR
+            "Number of active runtime is ${number_of_active_runtime}, "
+            "the user should activate one (and only one) runtime. ")
+endif()
 
-    # Check that one, and only one, SCHED option is set to ON
-    # count number of runtime sets to ON
-    math(EXPR number_of_active_runtime 0)
-    foreach (runtime ${CHAMELEON_SCHED_list})
-        if (CHAMELEON_SCHED_${runtime})
-            math(EXPR number_of_active_runtime "${number_of_active_runtime}+1")
-        endif()
-    endforeach()
-    if (NOT number_of_active_runtime STREQUAL 1)
-        message(FATAL_ERROR
-                "Number of active runtime is ${number_of_active_runtime}, "
-                "the user should activate one (and only one) runtime. ")
-    endif()
+# Use intermediate variable since cmake_dependent_option doesn't have OR conditions
+set(CHAMELEON_ENABLE_MPI OFF CACHE INTERNAL "Tells if MPI might be supported by the runtime")
+if ( CHAMELEON_SCHED_PARSEC OR CHAMELEON_SCHED_STARPU )
+     set(CHAMELEON_ENABLE_MPI ON FORCE)
+endif()
 
-    # Use intermediate variable since cmake_dependent_option doesn't have OR conditions
-    set(CHAMELEON_ENABLE_MPI OFF CACHE INTERNAL "Tells if MPI might be supported by the runtime")
-    if ( CHAMELEON_SCHED_PARSEC OR CHAMELEON_SCHED_STARPU )
-         set(CHAMELEON_ENABLE_MPI ON FORCE)
-    endif()
+# Use intermediate variable since cmake_dependent_option doesn't have OR conditions
+set(CHAMELEON_ENABLE_CUDA OFF CACHE INTERNAL "Tells if CUDA might be supported by the runtime")
+if ( CHAMELEON_SCHED_PARSEC OR CHAMELEON_SCHED_STARPU )
+     set(CHAMELEON_ENABLE_CUDA ON FORCE)
+endif()
 
-    # Use intermediate variable since cmake_dependent_option doesn't have OR conditions
-    set(CHAMELEON_ENABLE_CUDA OFF CACHE INTERNAL "Tells if CUDA might be supported by the runtime")
-    if ( CHAMELEON_SCHED_PARSEC OR CHAMELEON_SCHED_STARPU )
-         set(CHAMELEON_ENABLE_CUDA ON FORCE)
-    endif()
+# Additional options
+# ------------------
 
-    # Additional options
-    # ------------------
+# Enable the distributed interface (allowed only when StarPU or PaRSEC is enabled)
+# TODO: Default should be changed to ON/OFF when it will be ok
+cmake_dependent_option(CHAMELEON_USE_MPI
+                    "Enable distributed memory through MPI" OFF
+                    "CHAMELEON_ENABLE_MPI" OFF)
+if (CHAMELEON_ENABLE_MPI AND NOT CHAMELEON_USE_MPI)
+    message("-- ${BoldGreen}CHAMELEON_USE_MPI is set to OFF, turn it ON to use MPI (unsupported by Quark)${ColourReset}")
+endif()
 
-    # Enable the distributed interface (allowed only when StarPU or PaRSEC is enabled)
-    # TODO: Default should be changed to ON/OFF when it will be ok
-    cmake_dependent_option(CHAMELEON_USE_MPI
-                        "Enable distributed memory through MPI" OFF
-                        "CHAMELEON_ENABLE_MPI" OFF)
-    if (CHAMELEON_ENABLE_MPI AND NOT CHAMELEON_USE_MPI)
-        message("-- ${BoldGreen}CHAMELEON_USE_MPI is set to OFF, turn it ON to use MPI (unsupported by Quark)${ColourReset}")
-    endif()
+# Enable Cuda kernels if StarPU (only if StarPU or PaRSEC runtime is enabled)
+# TODO: Default should be changed to ON/OFF when it will be ok
+cmake_dependent_option(CHAMELEON_USE_CUDA
+                    "Enable CUDA kernels" OFF
+                    "CHAMELEON_ENABLE_CUDA" OFF)
+if (CHAMELEON_ENABLE_CUDA AND NOT CHAMELEON_USE_CUDA)
+    message("-- ${BoldGreen}CHAMELEON_USE_CUDA is set to OFF, turn it ON to use CUDA (unsupported by Quark)${ColourReset}")
+endif()
 
-    # Enable Cuda kernels if StarPU (only if StarPU or PaRSEC runtime is enabled)
-    # TODO: Default should be changed to ON/OFF when it will be ok
-    cmake_dependent_option(CHAMELEON_USE_CUDA
-                        "Enable CUDA kernels" OFF
-                        "CHAMELEON_ENABLE_CUDA" OFF)
-    if (CHAMELEON_ENABLE_CUDA AND NOT CHAMELEON_USE_CUDA)
-        message("-- ${BoldGreen}CHAMELEON_USE_CUDA is set to OFF, turn it ON to use CUDA (unsupported by Quark)${ColourReset}")
-    endif()
+# Enable MAGMA advanced kernels if CUDA is enabled
+cmake_dependent_option(CHAMELEON_USE_MAGMA
+                    "Enable MAGMA Cuda kernels" OFF
+                    "CHAMELEON_USE_CUDA" OFF)
+if (CHAMELEON_USE_CUDA AND NOT CHAMELEON_USE_MAGMA)
+    message("-- ${BoldGreen}CHAMELEON_USE_MAGMA is set to OFF, turn it ON to use MAGMA (only with StarPU)${ColourReset}")
+endif()
 
-    # Enable MAGMA advanced kernels if CUDA is enabled
-    cmake_dependent_option(CHAMELEON_USE_MAGMA
-                        "Enable MAGMA Cuda kernels" OFF
-                        "CHAMELEON_USE_CUDA" OFF)
-    if (CHAMELEON_USE_CUDA AND NOT CHAMELEON_USE_MAGMA)
-        message("-- ${BoldGreen}CHAMELEON_USE_MAGMA is set to OFF, turn it ON to use MAGMA (only with StarPU)${ColourReset}")
-    endif()
+# Enable FXT if StarPU
+option(CHAMELEON_ENABLE_TRACING "Enable tracing support" OFF)
+if (NOT CHAMELEON_ENABLE_TRACING)
+    message("-- ${BoldGreen}CHAMELEON_ENABLE_TRACING is set to OFF, turn it ON to use FxT (with StarPU)${ColourReset}")
+endif()
+#option(CHAMELEON_USE_EZTRACE "Enable EZTRACE to build modules" OFF)
 
-    # Enable FXT if StarPU
-    option(CHAMELEON_ENABLE_TRACING "Enable tracing support" OFF)
-    if (NOT CHAMELEON_ENABLE_TRACING)
-        message("-- ${BoldGreen}CHAMELEON_ENABLE_TRACING is set to OFF, turn it ON to use FxT (with StarPU)${ColourReset}")
-    endif()
-    #option(CHAMELEON_USE_EZTRACE "Enable EZTRACE to build modules" OFF)
+# Options to enable/disable testings and timings
+# ----------------------------------------------
+option(CHAMELEON_ENABLE_DOCS     "Enable documentation build"  OFF)
+if (CHAMELEON_ENABLE_DOCS)
+    message("-- ${BoldGreen}CHAMELEON_ENABLE_DOCS is set to ON, turn it OFF to avoid building docs${ColourReset}")
+endif()
+option(CHAMELEON_ENABLE_EXAMPLE  "Enable examples build"       ON)
+if (CHAMELEON_ENABLE_EXAMPLE)
+    message("-- ${BoldGreen}CHAMELEON_ENABLE_EXAMPLE is set to ON, turn it OFF to avoid building examples${ColourReset}")
+endif()
+option(CHAMELEON_ENABLE_TESTING  "Enable testings build"       ON)
+if (CHAMELEON_ENABLE_TESTING)
+    message("-- ${BoldGreen}CHAMELEON_ENABLE_TESTING is set to ON, turn it OFF to avoid building testing${ColourReset}")
+endif()
+option(CHAMELEON_ENABLE_TIMING   "Enable timings build"        ON)
+if (CHAMELEON_ENABLE_TIMING)
+    message("-- ${BoldGreen}CHAMELEON_ENABLE_TIMING is set to ON, turn it OFF to avoid building timing${ColourReset}")
+endif()
 
-    # Options to enable/disable testings and timings
-    # ----------------------------------------------
-    option(CHAMELEON_ENABLE_DOCS     "Enable documentation build"  OFF)
-    if (CHAMELEON_ENABLE_DOCS)
-        message("-- ${BoldGreen}CHAMELEON_ENABLE_DOCS is set to ON, turn it OFF to avoid building docs${ColourReset}")
-    endif()
-    option(CHAMELEON_ENABLE_EXAMPLE  "Enable examples build"       ON)
-    if (CHAMELEON_ENABLE_EXAMPLE)
-        message("-- ${BoldGreen}CHAMELEON_ENABLE_EXAMPLE is set to ON, turn it OFF to avoid building examples${ColourReset}")
-    endif()
-    option(CHAMELEON_ENABLE_TESTING  "Enable testings build"       ON)
-    if (CHAMELEON_ENABLE_TESTING)
-        message("-- ${BoldGreen}CHAMELEON_ENABLE_TESTING is set to ON, turn it OFF to avoid building testing${ColourReset}")
-    endif()
-    option(CHAMELEON_ENABLE_TIMING   "Enable timings build"        ON)
-    if (CHAMELEON_ENABLE_TIMING)
-        message("-- ${BoldGreen}CHAMELEON_ENABLE_TIMING is set to ON, turn it OFF to avoid building timing${ColourReset}")
+# Option to activate or not simulation mode (use Simgrid through StarPU)
+# ----------------------------------------------------------------------
+if(CHAMELEON_SCHED_STARPU)
+    option(CHAMELEON_SIMULATION "Enable simulation mode using Simgrid through StarPU" OFF)
+    if (NOT CHAMELEON_SIMULATION)
+        message("-- ${BoldGreen}CHAMELEON_SIMULATION is set to OFF, turn it ON to use"
+            " SIMULATION mode (only with StarPU compiled with SimGrid)${ColourReset}")
     endif()
+endif()
 
-    # Option to activate or not simulation mode (use Simgrid through StarPU)
-    # ----------------------------------------------------------------------
-    if(CHAMELEON_SCHED_STARPU)
-        option(CHAMELEON_SIMULATION "Enable simulation mode using Simgrid through StarPU" OFF)
-        if (NOT CHAMELEON_SIMULATION)
-            message("-- ${BoldGreen}CHAMELEON_SIMULATION is set to OFF, turn it ON to use"
-                " SIMULATION mode (only with StarPU compiled with SimGrid)${ColourReset}")
-        endif()
+# Initially we need to generate files for different precisions
+# TODO: use this option to avoid generate multiple precisions each time we launch cmake
+#option(CHAMELEON_GEN_PREC "Generate source files precisions" ON)
+#------------------------------------------------------------------------------
+
+
+###############################################################################
+# Look for dependencies #
+#########################
+set(CHAMELEON_DEP "")
+
+# Check for Thread library
+# ------------------------
+set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
+find_package(Threads REQUIRED)
+if( THREADS_FOUND )
+    list(APPEND EXTRA_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+endif ()
+
+# Add math library to the list of extra
+# it normally exists on all common systems provided with a C compiler
+set(M_LIBRARIES "")
+if(UNIX OR WIN32)
+    find_library(
+        M_m_LIBRARY
+        NAMES m
+        )
+    mark_as_advanced(M_m_LIBRARY)
+    if (M_m_LIBRARY)
+        list(APPEND M_LIBRARIES "${M_m_LIBRARY}")
+        list(APPEND EXTRA_LIBRARIES "${M_m_LIBRARY}")
+    else()
+        message(FATAL_ERROR "Could NOT find libm on your system."
+            " Are you sure to a have a C compiler installed?")
     endif()
+endif()
 
-    # Initially we need to generate files for different precisions
-    # TODO: use this option to avoid generate multiple precisions each time we launch cmake
-    #option(CHAMELEON_GEN_PREC "Generate source files precisions" ON)
-    #------------------------------------------------------------------------------
-
+# Try to find librt (libposix4 - POSIX.1b Realtime Extensions library)
+# on Unix systems except Apple ones because it does not exist on it
+set(RT_LIBRARIES "")
+if(UNIX AND NOT APPLE)
+    find_library(
+        RT_rt_LIBRARY
+        NAMES rt
+        )
+    mark_as_advanced(RT_rt_LIBRARY)
+    if (RT_rt_LIBRARY)
+        list(APPEND RT_LIBRARIES "${RT_rt_LIBRARY}")
+        list(APPEND EXTRA_LIBRARIES "${RT_rt_LIBRARY}")
+    else()
+        message(FATAL_ERROR "Could NOT find librt on your system")
+    endif()
+endif()
 
-    ###############################################################################
-    # Look for dependencies #
-    #########################
-    set(CHAMELEON_DEP "")
+# If simulation we don't enter in kernel functions so that we don't need to
+# link with concerned libraries
+if(NOT CHAMELEON_SIMULATION)
 
-    # Check for Thread library
-    # ------------------------
-    set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
-    find_package(Threads REQUIRED)
-    if( THREADS_FOUND )
-        list(APPEND EXTRA_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
-    endif ()
-
-    # Add math library to the list of extra
-    # it normally exists on all common systems provided with a C compiler
-    set(M_LIBRARIES "")
-    if(UNIX OR WIN32)
-        find_library(
-            M_m_LIBRARY
-            NAMES m
-            )
-        mark_as_advanced(M_m_LIBRARY)
-        if (M_m_LIBRARY)
-            list(APPEND M_LIBRARIES "${M_m_LIBRARY}")
-            list(APPEND EXTRA_LIBRARIES "${M_m_LIBRARY}")
-        else()
-            message(FATAL_ERROR "Could NOT find libm on your system."
-                " Are you sure to a have a C compiler installed?")
+    # CHAMELEON depends on CBLAS
+    #---------------------------
+    find_package(CBLAS COMPONENTS BLASEXT)
+    if(BLAS_FOUND)
+        if (BLAS_LIBRARY_DIRS)
+            # the RPATH to be used when installing
+            list(APPEND CMAKE_INSTALL_RPATH "${BLAS_LIBRARY_DIRS}")
         endif()
-    endif()
-
-    # Try to find librt (libposix4 - POSIX.1b Realtime Extensions library)
-    # on Unix systems except Apple ones because it does not exist on it
-    set(RT_LIBRARIES "")
-    if(UNIX AND NOT APPLE)
-        find_library(
-            RT_rt_LIBRARY
-            NAMES rt
-            )
-        mark_as_advanced(RT_rt_LIBRARY)
-        if (RT_rt_LIBRARY)
-            list(APPEND RT_LIBRARIES "${RT_rt_LIBRARY}")
-            list(APPEND EXTRA_LIBRARIES "${RT_rt_LIBRARY}")
-        else()
-            message(FATAL_ERROR "Could NOT find librt on your system")
+        if(BLAS_LINKER_FLAGS)
+            list(APPEND CMAKE_EXE_LINKER_FLAGS "${BLAS_LINKER_FLAGS}")
         endif()
+    else()
+        message(FATAL_ERROR "BLAS library has not been found")
     endif()
-
-    # If simulation we don't enter in kernel functions so that we don't need to
-    # link with concerned libraries
-    if(NOT CHAMELEON_SIMULATION)
-
-        # CHAMELEON depends on CBLAS
-        #---------------------------
-        find_package(CBLAS COMPONENTS BLASEXT)
-        if(BLAS_FOUND)
-            if (BLAS_LIBRARY_DIRS)
-                # the RPATH to be used when installing
-                list(APPEND CMAKE_INSTALL_RPATH "${BLAS_LIBRARY_DIRS}")
+    if(CBLAS_FOUND)
+        include_directories(${CBLAS_INCLUDE_DIRS})
+        if(CBLAS_LIBRARY_DIRS)
+            # the RPATH to be used when installing
+            list(APPEND CMAKE_INSTALL_RPATH "${CBLAS_LIBRARY_DIRS}")
+        endif()
+        if (CBLAS_LIBRARIES)
+            if (CBLAS_LIBRARIES_DEP)
+                list(INSERT CHAMELEON_DEP 0 ${CBLAS_LIBRARIES_DEP})
+            else()
+                list(INSERT CHAMELEON_DEP 0 ${CBLAS_LIBRARIES})
             endif()
-            if(BLAS_LINKER_FLAGS)
-                list(APPEND CMAKE_EXE_LINKER_FLAGS "${BLAS_LINKER_FLAGS}")
+        endif()
+    else()
+        if(MORSE_VERBOSE_FIND_PACKAGE)
+            if(CBLAS_STANDALONE OR NOT CBLAS_WORKS)
+                if (NOT CBLAS_cblas.h_DIRS)
+                    Print_Find_Header_Status(cblas cblas.h)
+                endif ()
+                if (NOT CBLAS_cblas_LIBRARY)
+                    Print_Find_Library_Status(cblas libcblas)
+                endif ()
             endif()
         else()
-            message(FATAL_ERROR "BLAS library has not been found")
+            message(WARNING "CBLAS library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
+            " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
+        endif()
+        message(FATAL_ERROR "A CBLAS library is required but has not been found")
+    endif()
+
+    # CHAMELEON depends on LAPACKE
+    #-----------------------------
+    # standalone version of lapacke seems useless for now
+    # let the comment in case we meet some problems of non existing lapacke
+    # functions in lapack library such as mkl, acml, ...
+    #set(LAPACKE_STANDALONE TRUE)
+    find_package(LAPACKE COMPONENTS LAPACKEXT)
+    if(LAPACK_FOUND AND LAPACK_LIBRARY_DIRS)
+        # the RPATH to be used when installing
+        list(APPEND CMAKE_INSTALL_RPATH "${LAPACK_LIBRARY_DIRS}")
+    else()
+        message(FATAL_ERROR "A LAPACK library is required but has not been found")
+    endif()
+    if(LAPACKE_FOUND)
+        include_directories(${LAPACKE_INCLUDE_DIRS})
+        if(LAPACKE_LIBRARY_DIRS)
+            # the RPATH to be used when installing
+            list(APPEND CMAKE_INSTALL_RPATH "${LAPACKE_LIBRARY_DIRS}")
+        endif()
+        if(LAPACKE_LINKER_FLAGS)
+            list(APPEND CMAKE_EXE_LINKER_FLAGS "${LAPACKE_LINKER_FLAGS}")
         endif()
-        if(CBLAS_FOUND)
-            include_directories(${CBLAS_INCLUDE_DIRS})
-            if(CBLAS_LIBRARY_DIRS)
-                # the RPATH to be used when installing
-                list(APPEND CMAKE_INSTALL_RPATH "${CBLAS_LIBRARY_DIRS}")
+        if (LAPACKE_LIBRARIES)
+            if (LAPACKE_LIBRARIES_DEP)
+                list(INSERT CHAMELEON_DEP 0 ${LAPACKE_LIBRARIES_DEP})
+            else()
+                list(INSERT CHAMELEON_DEP 0 ${LAPACKE_LIBRARIES})
             endif()
-            if (CBLAS_LIBRARIES)
-                if (CBLAS_LIBRARIES_DEP)
-                    list(INSERT CHAMELEON_DEP 0 ${CBLAS_LIBRARIES_DEP})
-                else()
-                    list(INSERT CHAMELEON_DEP 0 ${CBLAS_LIBRARIES})
-                endif()
+        endif()
+    else()
+        if(MORSE_VERBOSE_FIND_PACKAGE)
+            if (LAPACKE_STANDALONE OR NOT LAPACKE_WORKS)
+                if (NOT LAPACKE_lapacke.h_DIRS)
+                    Print_Find_Header_Status(lapacke lapacke.h)
+                endif ()
+                if (NOT LAPACKE_lapacke_LIBRARY)
+                    Print_Find_Library_Status(lapacke liblapacke)
+                endif ()
             endif()
         else()
-            if(MORSE_VERBOSE_FIND_PACKAGE)
-                if(CBLAS_STANDALONE OR NOT CBLAS_WORKS)
-                    if (NOT CBLAS_cblas.h_DIRS)
-                        Print_Find_Header_Status(cblas cblas.h)
-                    endif ()
-                    if (NOT CBLAS_cblas_LIBRARY)
-                        Print_Find_Library_Status(cblas libcblas)
-                    endif ()
-                endif()
-            else()
-                message(WARNING "CBLAS library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
-                " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
-            endif()
-            message(FATAL_ERROR "A CBLAS library is required but has not been found")
+            message(WARNING "LAPACKE library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
+            " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
         endif()
+        message(FATAL_ERROR "A LAPACKE library is required but has not been found")
+    endif()
 
-        # CHAMELEON depends on LAPACKE
-        #-----------------------------
-        # standalone version of lapacke seems useless for now
-        # let the comment in case we meet some problems of non existing lapacke
-        # functions in lapack library such as mkl, acml, ...
-        #set(LAPACKE_STANDALONE TRUE)
-        find_package(LAPACKE COMPONENTS LAPACKEXT)
-        if(LAPACK_FOUND AND LAPACK_LIBRARY_DIRS)
+    # CHAMELEON depends on TMG
+    #-------------------------
+    if (CHAMELEON_ENABLE_TESTING OR CHAMELEON_ENABLE_TIMING)
+        find_package(TMG)
+        if(TMG_FOUND AND TMG_LIBRARY_DIRS)
             # the RPATH to be used when installing
-            list(APPEND CMAKE_INSTALL_RPATH "${LAPACK_LIBRARY_DIRS}")
+            list(APPEND CMAKE_INSTALL_RPATH "${TMG_LIBRARY_DIRS}")
         else()
-            message(FATAL_ERROR "A LAPACK library is required but has not been found")
+            message(FATAL_ERROR "A TMG library is required but has not been found")
         endif()
-        if(LAPACKE_FOUND)
-            include_directories(${LAPACKE_INCLUDE_DIRS})
-            if(LAPACKE_LIBRARY_DIRS)
-                # the RPATH to be used when installing
-                list(APPEND CMAKE_INSTALL_RPATH "${LAPACKE_LIBRARY_DIRS}")
-            endif()
-            if(LAPACKE_LINKER_FLAGS)
-                list(APPEND CMAKE_EXE_LINKER_FLAGS "${LAPACKE_LINKER_FLAGS}")
-            endif()
-            if (LAPACKE_LIBRARIES)
-                if (LAPACKE_LIBRARIES_DEP)
-                    list(INSERT CHAMELEON_DEP 0 ${LAPACKE_LIBRARIES_DEP})
-                else()
-                    list(INSERT CHAMELEON_DEP 0 ${LAPACKE_LIBRARIES})
-                endif()
-            endif()
-        else()
-            if(MORSE_VERBOSE_FIND_PACKAGE)
-                if (LAPACKE_STANDALONE OR NOT LAPACKE_WORKS)
-                    if (NOT LAPACKE_lapacke.h_DIRS)
-                        Print_Find_Header_Status(lapacke lapacke.h)
-                    endif ()
-                    if (NOT LAPACKE_lapacke_LIBRARY)
-                        Print_Find_Library_Status(lapacke liblapacke)
-                    endif ()
-                endif()
+        if(TMG_LINKER_FLAGS)
+            list(APPEND CMAKE_EXE_LINKER_FLAGS "${TMG_LINKER_FLAGS}")
+        endif()
+        if (TMG_LIBRARIES)
+            if (TMG_LIBRARIES_DEP)
+                list(INSERT CHAMELEON_DEP 0 ${TMG_LIBRARIES_DEP})
             else()
-                message(WARNING "LAPACKE library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
-                " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
+                list(INSERT CHAMELEON_DEP 0 ${TMG_LIBRARIES})
             endif()
-            message(FATAL_ERROR "A LAPACKE library is required but has not been found")
         endif()
+    endif()
+
+    # CHAMELEON depends on CUDA/CUBLAS
+    #----------------------------------
+    if (CHAMELEON_USE_CUDA)
 
-        # CHAMELEON depends on TMG
-        #-------------------------
-        if (CHAMELEON_ENABLE_TESTING OR CHAMELEON_ENABLE_TIMING)
-            find_package(TMG)
-            if(TMG_FOUND AND TMG_LIBRARY_DIRS)
-                # the RPATH to be used when installing
-                list(APPEND CMAKE_INSTALL_RPATH "${TMG_LIBRARY_DIRS}")
+        find_package(CUDA REQUIRED)
+
+        if (CUDA_FOUND)
+            message("-- ${Blue}Add definition CHAMELEON_USE_CUDA"
+            " - Activate CUDA in Chameleon${ColourReset}")
+            set(EXTRA_LIBRARIES_CUDA)
+            add_definitions(-DCHAMELEON_USE_CUDA)
+            if(CUDA_VERSION VERSION_LESS "3.0")
+                set(CUDA_HOST_COMPILATION_CPP OFF)
+            endif(CUDA_VERSION VERSION_LESS "3.0")
+            set(CUDA_BUILD_EMULATION OFF)
+            if (CUDA_INCLUDE_DIRS)
+                include_directories(${CUDA_INCLUDE_DIRS})
             else()
-                message(FATAL_ERROR "A TMG library is required but has not been found")
-            endif()
-            if(TMG_LINKER_FLAGS)
-                list(APPEND CMAKE_EXE_LINKER_FLAGS "${TMG_LINKER_FLAGS}")
+                message(WARNING "CHAMELEON_USE_CUDA requires"
+                "\n   CUDA_INCLUDE_DIRS to be found. Be sure you have"
+                "\n   cuda headers with your distribution of CUDA.")
             endif()
-            if (TMG_LIBRARIES)
-                if (TMG_LIBRARIES_DEP)
-                    list(INSERT CHAMELEON_DEP 0 ${TMG_LIBRARIES_DEP})
+            if (CUDA_LIBRARIES)
+                list(APPEND EXTRA_SOURCES src/gpu_data.c)
+                set(saved_include "${CMAKE_REQUIRED_INCLUDES}")
+                set(saved_libs "${CMAKE_REQUIRED_LIBRARIES}")
+                set(CMAKE_REQUIRED_INCLUDES  "${CMAKE_REQUIRED_INCLUDES};${CUDA_INCLUDE_DIRS}")
+                set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};${CUDA_LIBRARIES}")
+                if(CUDA_VERSION VERSION_LESS "4.0")
+                    set(CUDA_HAVE_PEER_DEVICE_MEMORY_ACCESS 0)
                 else()
-                    list(INSERT CHAMELEON_DEP 0 ${TMG_LIBRARIES})
+                    check_function_exists(cuDeviceCanAccessPeer CUDA_HAVE_PEER_DEVICE_MEMORY_ACCESS)
                 endif()
-            endif()
-        endif()
-
-        # CHAMELEON depends on CUDA/CUBLAS
-        #----------------------------------
-        if (CHAMELEON_USE_CUDA)
-
-            find_package(CUDA REQUIRED)
-
-            if (CUDA_FOUND)
-                message("-- ${Blue}Add definition CHAMELEON_USE_CUDA"
-                " - Activate CUDA in Chameleon${ColourReset}")
-                set(EXTRA_LIBRARIES_CUDA)
-                add_definitions(-DCHAMELEON_USE_CUDA)
-                if(CUDA_VERSION VERSION_LESS "3.0")
-                    set(CUDA_HOST_COMPILATION_CPP OFF)
-                endif(CUDA_VERSION VERSION_LESS "3.0")
-                set(CUDA_BUILD_EMULATION OFF)
-                if (CUDA_INCLUDE_DIRS)
-                    include_directories(${CUDA_INCLUDE_DIRS})
-                else()
-                    message(WARNING "CHAMELEON_USE_CUDA requires"
-                    "\n   CUDA_INCLUDE_DIRS to be found. Be sure you have"
-                    "\n   cuda headers with your distribution of CUDA.")
-                endif()
-                if (CUDA_LIBRARIES)
-                    list(APPEND EXTRA_SOURCES src/gpu_data.c)
-                    set(saved_include "${CMAKE_REQUIRED_INCLUDES}")
-                    set(saved_libs "${CMAKE_REQUIRED_LIBRARIES}")
-                    set(CMAKE_REQUIRED_INCLUDES  "${CMAKE_REQUIRED_INCLUDES};${CUDA_INCLUDE_DIRS}")
-                    set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};${CUDA_LIBRARIES}")
-                    if(CUDA_VERSION VERSION_LESS "4.0")
-                        set(CUDA_HAVE_PEER_DEVICE_MEMORY_ACCESS 0)
-                    else()
-                        check_function_exists(cuDeviceCanAccessPeer CUDA_HAVE_PEER_DEVICE_MEMORY_ACCESS)
-                    endif()
-                    set(CMAKE_REQUIRED_INCLUDES  "${saved_include}")
-                    set(CMAKE_REQUIRED_LIBRARIES "${saved_libs}")
-                    # Add cublas if found
-                    if (CUDA_CUBLAS_LIBRARIES)
-                        message("-- ${Blue}Add definition CHAMELEON_USE_CUBLAS"
-                        " - Use GPU kernels from cuBLAS${ColourReset}")
-                        add_definitions(-DCHAMELEON_USE_CUBLAS)
-                        list(APPEND EXTRA_LIBRARIES_CUDA ${CUDA_CUBLAS_LIBRARIES})
-                        list(APPEND EXTRA_LIBRARIES_CUDA ${CUDA_LIBRARIES}) # need CUDA libs to link.
-                    else()
-                        message(FATAL_ERROR "CHAMELEON_USE_CUDA requires"
-                        "\n   CUDA_CUBLAS_LIBRARIES to be found. Be sure you have"
-                        "\n   libcublas with your distribution of CUDA.")
-                    endif()
+                set(CMAKE_REQUIRED_INCLUDES  "${saved_include}")
+                set(CMAKE_REQUIRED_LIBRARIES "${saved_libs}")
+                # Add cublas if found
+                if (CUDA_CUBLAS_LIBRARIES)
+                    message("-- ${Blue}Add definition CHAMELEON_USE_CUBLAS"
+                    " - Use GPU kernels from cuBLAS${ColourReset}")
+                    add_definitions(-DCHAMELEON_USE_CUBLAS)
+                    list(APPEND EXTRA_LIBRARIES_CUDA ${CUDA_CUBLAS_LIBRARIES})
+                    list(APPEND EXTRA_LIBRARIES_CUDA ${CUDA_LIBRARIES}) # need CUDA libs to link.
                 else()
                     message(FATAL_ERROR "CHAMELEON_USE_CUDA requires"
-                    "\n   CUDA_LIBRARIES to be found. Be sure you have"
-                    "\n   libcuda with your distribution of CUDA.")
+                    "\n   CUDA_CUBLAS_LIBRARIES to be found. Be sure you have"
+                    "\n   libcublas with your distribution of CUDA.")
                 endif()
-                #FindHeader(CUDA cublas_v2.h)
-                #if(CUDA_cublas_v2.h_DIRS)
-                    #add_definitions(-DCHAMELEON_USE_CUBLAS_V2)
-                #endif()
-            endif (CUDA_FOUND)
-
-            # CHAMELEON depends on MAGMA gpu kernels
-            # call our cmake module to test (in cmake_modules)
-            # change this call position if not appropriated
-            #----------------------------------------------
-            if ( CUDA_FOUND AND CHAMELEON_USE_MAGMA )
-                set(CHAMELEON_MAGMA_VERSION "1.4" CACHE STRING "oldest MAGMA version desired")
-                find_package(MAGMA ${CHAMELEON_MAGMA_VERSION})
-                if ( MAGMA_FOUND )
-                    message("-- ${Blue}Add definition CHAMELEON_USE_MAGMA"
-                    " - Use GPU kernels from MAGMA${ColourReset}")
-                    add_definitions(-DCHAMELEON_USE_MAGMA)
-                    if(MAGMA_INCLUDE_DIRS)
-                        include_directories(${MAGMA_INCLUDE_DIRS})
-                    endif()
-                    if(MAGMA_LIBRARY_DIRS)
-                        # the RPATH to be used when installing
-                        list(APPEND CMAKE_INSTALL_RPATH "${MAGMA_LIBRARY_DIRS}")
-                    endif()
-                    if (MAGMA_LIBRARIES)
-                        list(INSERT EXTRA_LIBRARIES_CUDA 0 ${MAGMA_LIBRARIES})
-                    endif()
-                else( MAGMA_FOUND )
-                    if(MORSE_VERBOSE_FIND_PACKAGE)
-                        if (NOT MAGMA_magma.h_DIRS)
-                            Print_Find_Header_Status(magma magma.h)
-                        endif ()
-                        if (NOT MAGMA_magma_LIBRARY)
-                            Print_Find_Library_Status(magma libmagma)
-                        endif ()
-                    else()
-                        message(WARNING "MAGMA library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
-                        " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
-                    endif()
-                    message(FATAL_ERROR "MAGMA library is required but has not been found")
-                endif( MAGMA_FOUND )
+            else()
+                message(FATAL_ERROR "CHAMELEON_USE_CUDA requires"
+                "\n   CUDA_LIBRARIES to be found. Be sure you have"
+                "\n   libcuda with your distribution of CUDA.")
             endif()
+            #FindHeader(CUDA cublas_v2.h)
+            #if(CUDA_cublas_v2.h_DIRS)
+                #add_definitions(-DCHAMELEON_USE_CUBLAS_V2)
+            #endif()
+        endif (CUDA_FOUND)
+
+        # CHAMELEON depends on MAGMA gpu kernels
+        # call our cmake module to test (in cmake_modules)
+        # change this call position if not appropriated
+        #----------------------------------------------
+        if ( CUDA_FOUND AND CHAMELEON_USE_MAGMA )
+            set(CHAMELEON_MAGMA_VERSION "1.4" CACHE STRING "oldest MAGMA version desired")
+            find_package(MAGMA ${CHAMELEON_MAGMA_VERSION})
+            if ( MAGMA_FOUND )
+                message("-- ${Blue}Add definition CHAMELEON_USE_MAGMA"
+                " - Use GPU kernels from MAGMA${ColourReset}")
+                add_definitions(-DCHAMELEON_USE_MAGMA)
+                if(MAGMA_INCLUDE_DIRS)
+                    include_directories(${MAGMA_INCLUDE_DIRS})
+                endif()
+                if(MAGMA_LIBRARY_DIRS)
+                    # the RPATH to be used when installing
+                    list(APPEND CMAKE_INSTALL_RPATH "${MAGMA_LIBRARY_DIRS}")
+                endif()
+                if (MAGMA_LIBRARIES)
+                    list(INSERT EXTRA_LIBRARIES_CUDA 0 ${MAGMA_LIBRARIES})
+                endif()
+            else( MAGMA_FOUND )
+                if(MORSE_VERBOSE_FIND_PACKAGE)
+                    if (NOT MAGMA_magma.h_DIRS)
+                        Print_Find_Header_Status(magma magma.h)
+                    endif ()
+                    if (NOT MAGMA_magma_LIBRARY)
+                        Print_Find_Library_Status(magma libmagma)
+                    endif ()
+                else()
+                    message(WARNING "MAGMA library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
+                    " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
+                endif()
+                message(FATAL_ERROR "MAGMA library is required but has not been found")
+            endif( MAGMA_FOUND )
+        endif()
 
-            list(APPEND EXTRA_LIBRARIES ${EXTRA_LIBRARIES_CUDA})
+        list(APPEND EXTRA_LIBRARIES ${EXTRA_LIBRARIES_CUDA})
 
-        endif(CHAMELEON_USE_CUDA)
+    endif(CHAMELEON_USE_CUDA)
 
-        # CHAMELEON depends on MPI
-        #-------------------------
-        if (CHAMELEON_USE_MPI)
+    # CHAMELEON depends on MPI
+    #-------------------------
+    if (CHAMELEON_USE_MPI)
 
-            # allows to use an external mpi compilation by setting compilers with
-            # -DMPI_C_COMPILER=path/to/mpicc -DMPI_Fortran_COMPILER=path/to/mpif90
-            # at cmake configure
-            if(NOT MPI_C_COMPILER)
-                set(MPI_C_COMPILER mpicc)
-            endif()
-            find_package(MPI REQUIRED)
-
-            if (MPI_C_FOUND)
-                message("-- ${Blue}Add definition CHAMELEON_USE_MPI"
-                " - Activate MPI in Chameleon${ColourReset}")
-                add_definitions(-DCHAMELEON_USE_MPI)
-                list(APPEND EXTRA_LIBRARIES ${MPI_C_LIBRARIES} )
-                include_directories( ${MPI_C_INCLUDE_PATH} )
-                # tests for intel mpi
-                #list(APPEND MPI_C_COMPILE_FLAGS "-mt_mpi")
-                #list(APPEND MPI_COMPILE_FLAGS "-mt_mpi")
-                if(MPI_C_LINK_FLAGS)
-                    list(APPEND CMAKE_EXE_LINKER_FLAGS "${MPI_C_LINK_FLAGS}")
-                endif()
-            endif (MPI_C_FOUND)
-
-        endif (CHAMELEON_USE_MPI)
-
-    else (NOT CHAMELEON_SIMULATION)
-
-        message("-- ${BoldBlue}Simulation mode of CHAMELEON is activated (CHAMELEON_SIMULATION=ON)."
-        "\n   This mode allows you to simulate execution of algorithms with StarPU compiled with SimGrid."
-        "\n   To do so, we provide some perfmodels in the simucore/perfmodels/ directory of CHAMELEON sources."
-        "\n   The resulting directory where to find perfmodels is: ${CMAKE_CURRENT_SOURCE_DIR}/simucore/perfmodels."
-        "\n   To use these perfmodels, please set your STARPU_HOME environment variable to ${CMAKE_CURRENT_SOURCE_DIR}/simucore/perfmodels."
-        "\n   Finally, you need to set your STARPU_HOSTNAME environment variable to the name of the machine to simulate."
-        "\n   For example: STARPU_HOSTNAME=mirage."
-        "\n   Note that only POTRF kernels with block sizes of 320 or 960 (simple and double precision) on mirage machine are available for now."
-        "\n   Database of models is subject to change, it should be enrich in a near future.${ColourReset}")
-
-        message("-- ${Blue}Add definition CHAMELEON_SIMULATION"
-        " - Activate simulation mode in Chameleon (to use with StarPU+SimGrid)${ColourReset}")
-        add_definitions(-DCHAMELEON_SIMULATION)
-
-        add_subdirectory(simucore)
-
-        # Guard against mis-used simulation mode
-        if(NOT DEFINED CHAMELEON_USE_CUDA)
-            message(FATAL_ERROR "${BoldBlue}"
-            "In simulation mode CHAMELEON_USE_CUDA and CHAMELEON_USE_MAGMA should be set to"
-            "   ensure that the user is aware of the version to be used. If Chameleon's"
-            "   kernels are available for NVIDIA CUDA GPUs and if the according"
-            "   perfmodels are available in STARPU_HOME then use CHAMELEON_USE_CUDA=ON"
-            "   else set CHAMELEON_USE_CUDA=OFF. The same idea is applicable with MAGMA."
-            "${ColourReset}")
+        # allows to use an external mpi compilation by setting compilers with
+        # -DMPI_C_COMPILER=path/to/mpicc -DMPI_Fortran_COMPILER=path/to/mpif90
+        # at cmake configure
+        if(NOT MPI_C_COMPILER)
+            set(MPI_C_COMPILER mpicc)
         endif()
-        if(NOT CHAMELEON_USE_MAGMA)
-            message(WARNING "${BoldBlue}"
-            "In simulation mode CHAMELEON_USE_CUDA and CHAMELEON_USE_MAGMA should be set to"
-            "   ensure that the user is aware of the version to be used. If Chameleon's"
-            "   MAGMA kernels are available for NVIDIA CUDA GPUs and if the according"
-            "   perfmodels are available in STARPU_HOME then use CHAMELEON_USE_MAGMA=ON"
-            "   else set CHAMELEON_USE_MAGMA=OFF.${ColourReset}")
-        endif()
-        
-        # Add CUDA definition if required
-        if (CHAMELEON_USE_CUDA)
-            add_definitions(-DCHAMELEON_USE_CUDA)
-            # Add MAGMA definition if required
-            if (CHAMELEON_USE_MAGMA)
-                add_definitions(-DCHAMELEON_USE_MAGMA)
+        find_package(MPI REQUIRED)
+
+        if (MPI_C_FOUND)
+            message("-- ${Blue}Add definition CHAMELEON_USE_MPI"
+            " - Activate MPI in Chameleon${ColourReset}")
+            add_definitions(-DCHAMELEON_USE_MPI)
+            list(APPEND EXTRA_LIBRARIES ${MPI_C_LIBRARIES} )
+            include_directories( ${MPI_C_INCLUDE_PATH} )
+            # tests for intel mpi
+            #list(APPEND MPI_C_COMPILE_FLAGS "-mt_mpi")
+            #list(APPEND MPI_COMPILE_FLAGS "-mt_mpi")
+            if(MPI_C_LINK_FLAGS)
+                list(APPEND CMAKE_EXE_LINKER_FLAGS "${MPI_C_LINK_FLAGS}")
             endif()
-        endif()
+        endif (MPI_C_FOUND)
+
+    endif (CHAMELEON_USE_MPI)
+
+else (NOT CHAMELEON_SIMULATION)
+
+    message("-- ${BoldBlue}Simulation mode of CHAMELEON is activated (CHAMELEON_SIMULATION=ON)."
+    "\n   This mode allows you to simulate execution of algorithms with StarPU compiled with SimGrid."
+    "\n   To do so, we provide some perfmodels in the simucore/perfmodels/ directory of CHAMELEON sources."
+    "\n   The resulting directory where to find perfmodels is: ${CMAKE_CURRENT_SOURCE_DIR}/simucore/perfmodels."
+    "\n   To use these perfmodels, please set your STARPU_HOME environment variable to ${CMAKE_CURRENT_SOURCE_DIR}/simucore/perfmodels."
+    "\n   Finally, you need to set your STARPU_HOSTNAME environment variable to the name of the machine to simulate."
+    "\n   For example: STARPU_HOSTNAME=mirage."
+    "\n   Note that only POTRF kernels with block sizes of 320 or 960 (simple and double precision) on mirage machine are available for now."
+    "\n   Database of models is subject to change, it should be enrich in a near future.${ColourReset}")
+
+    message("-- ${Blue}Add definition CHAMELEON_SIMULATION"
+    " - Activate simulation mode in Chameleon (to use with StarPU+SimGrid)${ColourReset}")
+    add_definitions(-DCHAMELEON_SIMULATION)
+
+    add_subdirectory(simucore)
+
+    # Guard against mis-used simulation mode
+    if(NOT DEFINED CHAMELEON_USE_CUDA)
+        message(FATAL_ERROR "${BoldBlue}"
+        "In simulation mode CHAMELEON_USE_CUDA and CHAMELEON_USE_MAGMA should be set to"
+        "   ensure that the user is aware of the version to be used. If Chameleon's"
+        "   kernels are available for NVIDIA CUDA GPUs and if the according"
+        "   perfmodels are available in STARPU_HOME then use CHAMELEON_USE_CUDA=ON"
+        "   else set CHAMELEON_USE_CUDA=OFF. The same idea is applicable with MAGMA."
+        "${ColourReset}")
+    endif()
+    if(NOT CHAMELEON_USE_MAGMA)
+        message(WARNING "${BoldBlue}"
+        "In simulation mode CHAMELEON_USE_CUDA and CHAMELEON_USE_MAGMA should be set to"
+        "   ensure that the user is aware of the version to be used. If Chameleon's"
+        "   MAGMA kernels are available for NVIDIA CUDA GPUs and if the according"
+        "   perfmodels are available in STARPU_HOME then use CHAMELEON_USE_MAGMA=ON"
+        "   else set CHAMELEON_USE_MAGMA=OFF.${ColourReset}")
+    endif()
 
-        if (NOT CHAMELEON_SCHED_STARPU)
-            message(FATAL_ERROR "Simulation mode of Chameleon only works with"
-            "\n   the StarPU runtime. Please use CHAMELEON_SCHED_STARPU=ON.")
+    # Add CUDA definition if required
+    if (CHAMELEON_USE_CUDA)
+        add_definitions(-DCHAMELEON_USE_CUDA)
+        # Add MAGMA definition if required
+        if (CHAMELEON_USE_MAGMA)
+            add_definitions(-DCHAMELEON_USE_MAGMA)
         endif()
+    endif()
 
-        if (CHAMELEON_ENABLE_EXAMPLE)
-            set(CHAMELEON_ENABLE_EXAMPLE OFF)
-            message("-- ${BoldBlue}CHAMELEON_ENABLE_EXAMPLE is set to ON but we turn it OFF.")
-        endif ()
-        if (CHAMELEON_ENABLE_TESTING)
-            set(CHAMELEON_ENABLE_TESTING OFF)
-            message("-- ${BoldBlue}CHAMELEON_ENABLE_TESTING is set to ON but we turn it OFF."
-                "\n   Because we are compiling the simulation mode (CHAMELEON_SIMULATION=ON),"
-                "\n   there is no sense in compiling testing drivers that are used to check"
-                "\n   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)
+    if (NOT CHAMELEON_SCHED_STARPU)
+        message(FATAL_ERROR "Simulation mode of Chameleon only works with"
+        "\n   the StarPU runtime. Please use CHAMELEON_SCHED_STARPU=ON.")
+    endif()
 
-            # allows to use an external mpi compilation by setting compilers with
-            # -DMPI_C_COMPILER=path/to/mpicc -DMPI_Fortran_COMPILER=path/to/mpif90
-            # at cmake configure
-            if(NOT MPI_C_COMPILER)
-                set(MPI_C_COMPILER "${SIMGRID_DIR_FOUND}/bin/smpicc")
-            endif()
-            if(NOT MPI_C_LIBRARIES)
-                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()
-            if(NOT MPI_CXX_COMPILER)
-                set(MPI_CXX_COMPILER "${SIMGRID_DIR_FOUND}/bin/smpicxx")
-            endif()
-            if(NOT MPI_CXX_LIBRARIES)
-                set(MPI_CXX_LIBRARIES "${SIMGRID_LIBRARIES}")
-            endif()
-            if(NOT MPI_CXX_INCLUDE_PATH)
-                set(MPI_CXX_INCLUDE_PATH "${SIMGRID_INCLUDE_DIRS}")
-                list(APPEND MPI_CXX_INCLUDE_PATH "${SIMGRID_INCLUDE_DIRS}/smpi")
-            endif()
-            if(NOT MPI_Fortran_COMPILER)
-                set(MPI_Fortran_COMPILER "${SIMGRID_DIR_FOUND}/bin/smpicxx")
-            endif()
-            if(NOT MPI_Fortran_LIBRARIES)
-                set(MPI_Fortran_LIBRARIES "${SIMGRID_LIBRARIES}")
-            endif()
-            if(NOT MPI_Fortran_INCLUDE_PATH)
-                set(MPI_Fortran_INCLUDE_PATH "${SIMGRID_INCLUDE_DIRS}")
-                list(APPEND MPI_Fortran_INCLUDE_PATH "${SIMGRID_INCLUDE_DIRS}/smpi")
+    if (CHAMELEON_ENABLE_EXAMPLE)
+        set(CHAMELEON_ENABLE_EXAMPLE OFF)
+        message("-- ${BoldBlue}CHAMELEON_ENABLE_EXAMPLE is set to ON but we turn it OFF.")
+    endif ()
+    if (CHAMELEON_ENABLE_TESTING)
+        set(CHAMELEON_ENABLE_TESTING OFF)
+        message("-- ${BoldBlue}CHAMELEON_ENABLE_TESTING is set to ON but we turn it OFF."
+            "\n   Because we are compiling the simulation mode (CHAMELEON_SIMULATION=ON),"
+            "\n   there is no sense in compiling testing drivers that are used to check"
+            "\n   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)
+
+        # allows to use an external mpi compilation by setting compilers with
+        # -DMPI_C_COMPILER=path/to/mpicc -DMPI_Fortran_COMPILER=path/to/mpif90
+        # at cmake configure
+        if(NOT MPI_C_COMPILER)
+            set(MPI_C_COMPILER "${SIMGRID_DIR_FOUND}/bin/smpicc")
+        endif()
+        if(NOT MPI_C_LIBRARIES)
+            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()
+        if(NOT MPI_CXX_COMPILER)
+            set(MPI_CXX_COMPILER "${SIMGRID_DIR_FOUND}/bin/smpicxx")
+        endif()
+        if(NOT MPI_CXX_LIBRARIES)
+            set(MPI_CXX_LIBRARIES "${SIMGRID_LIBRARIES}")
+        endif()
+        if(NOT MPI_CXX_INCLUDE_PATH)
+            set(MPI_CXX_INCLUDE_PATH "${SIMGRID_INCLUDE_DIRS}")
+            list(APPEND MPI_CXX_INCLUDE_PATH "${SIMGRID_INCLUDE_DIRS}/smpi")
+        endif()
+        if(NOT MPI_Fortran_COMPILER)
+            set(MPI_Fortran_COMPILER "${SIMGRID_DIR_FOUND}/bin/smpicxx")
+        endif()
+        if(NOT MPI_Fortran_LIBRARIES)
+            set(MPI_Fortran_LIBRARIES "${SIMGRID_LIBRARIES}")
+        endif()
+        if(NOT MPI_Fortran_INCLUDE_PATH)
+            set(MPI_Fortran_INCLUDE_PATH "${SIMGRID_INCLUDE_DIRS}")
+            list(APPEND MPI_Fortran_INCLUDE_PATH "${SIMGRID_INCLUDE_DIRS}/smpi")
+        endif()
+        find_package(MPI REQUIRED)
+
+        if (MPI_C_FOUND)
+            message("-- ${Blue}Add definition CHAMELEON_USE_MPI"
+            " - Activate MPI in Chameleon${ColourReset}")
+            add_definitions(-DCHAMELEON_USE_MPI)
+            list(APPEND EXTRA_LIBRARIES ${MPI_C_LIBRARIES} )
+            include_directories( ${MPI_C_INCLUDE_PATH} )
+            if(MPI_C_LINK_FLAGS)
+                list(APPEND CMAKE_EXE_LINKER_FLAGS "${MPI_C_LINK_FLAGS}")
             endif()
-            find_package(MPI REQUIRED)
-
-            if (MPI_C_FOUND)
-                message("-- ${Blue}Add definition CHAMELEON_USE_MPI"
-                " - Activate MPI in Chameleon${ColourReset}")
-                add_definitions(-DCHAMELEON_USE_MPI)
-                list(APPEND EXTRA_LIBRARIES ${MPI_C_LIBRARIES} )
-                include_directories( ${MPI_C_INCLUDE_PATH} )
-                if(MPI_C_LINK_FLAGS)
-                    list(APPEND CMAKE_EXE_LINKER_FLAGS "${MPI_C_LINK_FLAGS}")
-                endif()
-            endif (MPI_C_FOUND)
+        endif (MPI_C_FOUND)
 
-        endif (CHAMELEON_USE_MPI)
+    endif (CHAMELEON_USE_MPI)
 
-    endif(NOT CHAMELEON_SIMULATION)
+endif(NOT CHAMELEON_SIMULATION)
 
 
-    # CHAMELEON depends on a runtime
-    # -------------------------------
+# CHAMELEON depends on a runtime
+# -------------------------------
 
-    if( CHAMELEON_SCHED_STARPU )
+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)
-            set(STARPU_COMPONENT_LIST "HWLOC")
-            if(CHAMELEON_USE_CUDA)
-                list(APPEND STARPU_COMPONENT_LIST "CUDA")
-            endif()
-        else()
-            set(STARPU_COMPONENT_LIST "SIMGRID")
+    # create list of components in order to make a single call to find_package(starpu...)
+    if(NOT CHAMELEON_SIMULATION)
+        set(STARPU_COMPONENT_LIST "HWLOC")
+        if(CHAMELEON_USE_CUDA)
+            list(APPEND STARPU_COMPONENT_LIST "CUDA")
         endif()
-        if(CHAMELEON_USE_MPI)
-            list(APPEND STARPU_COMPONENT_LIST "MPI")
+    else()
+        set(STARPU_COMPONENT_LIST "SIMGRID")
+    endif()
+    if(CHAMELEON_USE_MPI)
+        list(APPEND STARPU_COMPONENT_LIST "MPI")
+    endif()
+    if(CHAMELEON_ENABLE_TRACING)
+        list(APPEND STARPU_COMPONENT_LIST "FXT")
+    endif()
+
+    find_package(STARPU ${CHAMELEON_STARPU_VERSION} REQUIRED
+                 COMPONENTS ${STARPU_COMPONENT_LIST})
+
+    # Add definition and include_dir if found
+    if ( STARPU_FOUND )
+        message("-- ${Blue}Add definition CHAMELEON_SCHED_STARPU"
+        " - Activate StarPU in Chameleon${ColourReset}")
+        add_definitions(-DCHAMELEON_SCHED_STARPU) # TODO: remove that
+        include_directories(${STARPU_INCLUDE_DIRS_DEP})
+        if(STARPU_LINKER_FLAGS)
+            list(APPEND CMAKE_EXE_LINKER_FLAGS "${STARPU_LINKER_FLAGS}")
         endif()
-        if(CHAMELEON_ENABLE_TRACING)
-            list(APPEND STARPU_COMPONENT_LIST "FXT")
+        set(CMAKE_REQUIRED_INCLUDES "${STARPU_INCLUDE_DIRS_DEP}")
+        foreach(libdir ${STARPU_LIBRARY_DIRS_DEP})
+            list(APPEND CMAKE_REQUIRED_FLAGS "-L${libdir}")
+        endforeach()
+        set(CMAKE_REQUIRED_LIBRARIES "${STARPU_LIBRARIES_DEP}")
+        if (CHAMELEON_USE_MPI)
+            list(APPEND CMAKE_REQUIRED_INCLUDES "${MPI_C_INCLUDE_PATH}")
+            list(APPEND CMAKE_REQUIRED_FLAGS "${MPI_C_LINK_FLAGS}")
+            list(APPEND CMAKE_REQUIRED_LIBRARIES "${MPI_C_LIBRARIES}")
         endif()
-
-        find_package(STARPU ${CHAMELEON_STARPU_VERSION} REQUIRED
-                     COMPONENTS ${STARPU_COMPONENT_LIST})
-
-        # Add definition and include_dir if found
-        if ( STARPU_FOUND )
-            message("-- ${Blue}Add definition CHAMELEON_SCHED_STARPU"
-            " - Activate StarPU in Chameleon${ColourReset}")
-            add_definitions(-DCHAMELEON_SCHED_STARPU) # TODO: remove that
-            include_directories(${STARPU_INCLUDE_DIRS_DEP})
-            if(STARPU_LINKER_FLAGS)
-                list(APPEND CMAKE_EXE_LINKER_FLAGS "${STARPU_LINKER_FLAGS}")
-            endif()
-            set(CMAKE_REQUIRED_INCLUDES "${STARPU_INCLUDE_DIRS_DEP}")
-            foreach(libdir ${STARPU_LIBRARY_DIRS_DEP})
-                list(APPEND CMAKE_REQUIRED_FLAGS "-L${libdir}")
-            endforeach()
-            set(CMAKE_REQUIRED_LIBRARIES "${STARPU_LIBRARIES_DEP}")
-            if (CHAMELEON_USE_MPI)
-                list(APPEND CMAKE_REQUIRED_INCLUDES "${MPI_C_INCLUDE_PATH}")
-                list(APPEND CMAKE_REQUIRED_FLAGS "${MPI_C_LINK_FLAGS}")
-                list(APPEND CMAKE_REQUIRED_LIBRARIES "${MPI_C_LIBRARIES}")
-            endif()
-            if (CHAMELEON_SIMULATION)
-                list(APPEND CMAKE_REQUIRED_FLAGS "-include" "starpu_simgrid_wrap.h")
-            endif()
-            string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
-            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)
-            endif()
-            check_function_exists(starpu_data_wont_use STARPU_DATA_WONT_USE_FOUND)
-            if ( STARPU_DATA_WONT_USE_FOUND )
-                add_definitions(-DCHAMELEON_USE_STARPU_DATA_WONT_USE)
-            endif()
-            check_function_exists(starpu_malloc_on_node_set_default_flags STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS)
-            if ( STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS )
-                add_definitions(-DCHAMELEON_USE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS)
-            endif()
-            if(CHAMELEON_ENABLE_TRACING)
-                # check if fxt profiling is accessible in starpu and activate it in chameleon
-                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 )
-                    message("-- ${Blue}Add definition HAVE_STARPU_FXT_PROFILING"
-                    " - Activate FxT profiling through StarPU${ColourReset}")
-                    add_definitions(-DHAVE_STARPU_FXT_PROFILING)
-                else()
-                    message("-- ${Red}Looking for starpu with fxt"
-                    " - starpu_fxt_start_profiling() test fails in StarPU${ColourReset}")
-                    message("-- ${Red}Check in CMakeFiles/CMakeError.log to figure out why it fails${ColourReset}")
-                endif()
-            endif()
-            if (CHAMELEON_USE_MPI)
-                # Check if a specific function exist
-                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 )
-                    message("-- ${Blue}Add definition HAVE_STARPU_MPI_DATA_REGISTER - Activate"
-                    " use of starpu_mpi_data_register() in Chameleon with StarPU${ColourReset}")
-                    add_definitions(-DHAVE_STARPU_MPI_DATA_REGISTER)
-                else()
-                    message("-- ${Red}Looking for starpu with starpu_mpi_data_register"
-                    " - starpu_mpi_data_register() test fails in StarPU${ColourReset}")
-                    message("-- ${Red}Check in CMakeFiles/CMakeError.log to figure out why it fails${ColourReset}")
-                endif()
-                unset(STARPU_MPI_COMM_RANK_FOUND CACHE)
-                check_function_exists(starpu_mpi_comm_rank STARPU_MPI_COMM_RANK_FOUND)
-                if ( STARPU_MPI_COMM_RANK_FOUND )
-                    message("-- ${Blue}Add definition HAVE_STARPU_MPI_COMM_RANK - Activate"
-                    " use of starpu_mpi_comm_rank() in Chameleon with StarPU${ColourReset}")
-                    add_definitions(-DHAVE_STARPU_MPI_COMM_RANK)
-                else()
-                    message("-- ${Red}Looking for starpu with starpu_mpi_comm_rank"
-                    " - starpu_mpi_comm_rank() test fails in StarPU${ColourReset}")
-                    message("-- ${Red}Check in CMakeFiles/CMakeError.log to figure out why it fails${ColourReset}")
-                endif()
-            endif()
-            if(HWLOC_FOUND AND HWLOC_LIBRARY_DIRS)
-                # the RPATH to be used when installing
-                list(APPEND CMAKE_INSTALL_RPATH "${HWLOC_LIBRARY_DIRS}")
+        if (CHAMELEON_SIMULATION)
+            list(APPEND CMAKE_REQUIRED_FLAGS "-include" "starpu_simgrid_wrap.h")
+        endif()
+        string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+        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)
+        endif()
+        check_function_exists(starpu_data_wont_use STARPU_DATA_WONT_USE_FOUND)
+        if ( STARPU_DATA_WONT_USE_FOUND )
+            add_definitions(-DCHAMELEON_USE_STARPU_DATA_WONT_USE)
+        endif()
+        check_function_exists(starpu_malloc_on_node_set_default_flags STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS)
+        if ( STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS )
+            add_definitions(-DCHAMELEON_USE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS)
+        endif()
+        if(CHAMELEON_ENABLE_TRACING)
+            # check if fxt profiling is accessible in starpu and activate it in chameleon
+            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 )
+                message("-- ${Blue}Add definition HAVE_STARPU_FXT_PROFILING"
+                " - Activate FxT profiling through StarPU${ColourReset}")
+                add_definitions(-DHAVE_STARPU_FXT_PROFILING)
+            else()
+                message("-- ${Red}Looking for starpu with fxt"
+                " - starpu_fxt_start_profiling() test fails in StarPU${ColourReset}")
+                message("-- ${Red}Check in CMakeFiles/CMakeError.log to figure out why it fails${ColourReset}")
             endif()
-            if(FXT_FOUND AND FXT_LIBRARY_DIRS)
-                # the RPATH to be used when installing
-                list(APPEND CMAKE_INSTALL_RPATH "${FXT_LIBRARY_DIRS}")
+        endif()
+        if (CHAMELEON_USE_MPI)
+            # Check if a specific function exist
+            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 )
+                message("-- ${Blue}Add definition HAVE_STARPU_MPI_DATA_REGISTER - Activate"
+                " use of starpu_mpi_data_register() in Chameleon with StarPU${ColourReset}")
+                add_definitions(-DHAVE_STARPU_MPI_DATA_REGISTER)
+            else()
+                message("-- ${Red}Looking for starpu with starpu_mpi_data_register"
+                " - starpu_mpi_data_register() test fails in StarPU${ColourReset}")
+                message("-- ${Red}Check in CMakeFiles/CMakeError.log to figure out why it fails${ColourReset}")
             endif()
-            if(SIMGRID_FOUND AND SIMGRID_LIBRARY_DIRS)
-                # the RPATH to be used when installing
-                list(APPEND CMAKE_INSTALL_RPATH "${SIMGRID_LIBRARY_DIRS}")
+            unset(STARPU_MPI_COMM_RANK_FOUND CACHE)
+            check_function_exists(starpu_mpi_comm_rank STARPU_MPI_COMM_RANK_FOUND)
+            if ( STARPU_MPI_COMM_RANK_FOUND )
+                message("-- ${Blue}Add definition HAVE_STARPU_MPI_COMM_RANK - Activate"
+                " use of starpu_mpi_comm_rank() in Chameleon with StarPU${ColourReset}")
+                add_definitions(-DHAVE_STARPU_MPI_COMM_RANK)
+            else()
+                message("-- ${Red}Looking for starpu with starpu_mpi_comm_rank"
+                " - starpu_mpi_comm_rank() test fails in StarPU${ColourReset}")
+                message("-- ${Red}Check in CMakeFiles/CMakeError.log to figure out why it fails${ColourReset}")
             endif()
-            if(STARPU_FOUND AND STARPU_LIBRARY_DIRS)
-                # the RPATH to be used when installing
-                list(APPEND CMAKE_INSTALL_RPATH "${STARPU_LIBRARY_DIRS}")
+        endif()
+        if(HWLOC_FOUND AND HWLOC_LIBRARY_DIRS)
+            # the RPATH to be used when installing
+            list(APPEND CMAKE_INSTALL_RPATH "${HWLOC_LIBRARY_DIRS}")
+        endif()
+        if(FXT_FOUND AND FXT_LIBRARY_DIRS)
+            # the RPATH to be used when installing
+            list(APPEND CMAKE_INSTALL_RPATH "${FXT_LIBRARY_DIRS}")
+        endif()
+        if(SIMGRID_FOUND AND SIMGRID_LIBRARY_DIRS)
+            # the RPATH to be used when installing
+            list(APPEND CMAKE_INSTALL_RPATH "${SIMGRID_LIBRARY_DIRS}")
+        endif()
+        if(STARPU_FOUND AND STARPU_LIBRARY_DIRS)
+            # the RPATH to be used when installing
+            list(APPEND CMAKE_INSTALL_RPATH "${STARPU_LIBRARY_DIRS}")
+        endif()
+        if (STARPU_LIBRARIES)
+            if (STARPU_LIBRARIES_DEP)
+                list(INSERT CHAMELEON_DEP 0 ${STARPU_LIBRARIES_DEP})
+            else()
+                list(INSERT CHAMELEON_DEP 0 ${STARPU_LIBRARIES})
             endif()
-            if (STARPU_LIBRARIES)
-                if (STARPU_LIBRARIES_DEP)
-                    list(INSERT CHAMELEON_DEP 0 ${STARPU_LIBRARIES_DEP})
-                else()
-                    list(INSERT CHAMELEON_DEP 0 ${STARPU_LIBRARIES})
-                endif()
+        endif()
+    else ( STARPU_FOUND )
+        if(MORSE_VERBOSE_FIND_PACKAGE)
+            if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
+                if (NOT HWLOC_hwloc.h_DIRS)
+                    Print_Find_Header_Status(hwloc hwloc.h)
+                endif ()
+                if (NOT HWLOC_hwloc_LIBRARY)
+                    Print_Find_Library_Status(hwloc libhwloc)
+                endif ()
             endif()
-        else ( STARPU_FOUND )
-            if(MORSE_VERBOSE_FIND_PACKAGE)
-                if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
-                    if (NOT HWLOC_hwloc.h_DIRS)
-                        Print_Find_Header_Status(hwloc hwloc.h)
-                    endif ()
-                    if (NOT HWLOC_hwloc_LIBRARY)
-                        Print_Find_Library_Status(hwloc libhwloc)
-                    endif ()
-                endif()
-                if(CHAMELEON_ENABLE_TRACING AND (NOT FXT_FOUND OR NOT FXT_LIBRARIES))
-                    if (NOT FXT_fxt.h_DIRS)
-                        Print_Find_Header_Status(fxt fxt.h)
-                    endif ()
-                    if (NOT FXT_fxt_LIBRARY)
-                        Print_Find_Library_Status(fxt libfxt)
-                    endif ()
-                endif()
-                if(CHAMELEON_SIMULATION AND (NOT SIMGRID_FOUND OR NOT SIMGRID_LIBRARIES))
-                    if (NOT SIMGRID_simgrid.h_DIRS)
-                        Print_Find_Header_Status(simgrid simgrid.h)
-                    endif ()
-                    if (NOT SIMGRID_simgrid_LIBRARY)
-                        Print_Find_Library_Status(simgrid libsimgrid)
-                    endif ()
-                endif()
-                if( (NOT STARPU_SHM_FOUND) OR (NOT STARPU_SHM_LIBRARIES) OR
-                    ( STARPU_LOOK_FOR_MPI AND (NOT STARPU_MPI_FOUND OR NOT STARPU_MPI_LIBRARIES) )
-                  )
-                    foreach(starpu_hdr ${STARPU_hdrs_to_find})
-                        if (NOT STARPU_${starpu_hdr}_INCLUDE_DIRS)
-                            Print_Find_Header_Status(starpu ${starpu_hdr})
-                        endif ()
-                    endforeach()
-                    if(STARPU_VERSION_STRING)
-                        foreach(starpu_lib ${STARPU_libs_to_find})
-                            if (NOT STARPU_${starpu_lib}_LIBRARY)
-                                Print_Find_Library_Status(starpu ${starpu_lib})
-                            endif ()
-                        endforeach()
-                    endif ()
+            if(CHAMELEON_ENABLE_TRACING AND (NOT FXT_FOUND OR NOT FXT_LIBRARIES))
+                if (NOT FXT_fxt.h_DIRS)
+                    Print_Find_Header_Status(fxt fxt.h)
+                endif ()
+                if (NOT FXT_fxt_LIBRARY)
+                    Print_Find_Library_Status(fxt libfxt)
                 endif ()
-            else(MORSE_VERBOSE_FIND_PACKAGE)
-                message(WARNING "StarPU library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
-                " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
-            endif(MORSE_VERBOSE_FIND_PACKAGE)
-            if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
-                message(FATAL_ERROR "hwloc library is required but has not been found")
             endif()
             if(CHAMELEON_SIMULATION AND (NOT SIMGRID_FOUND OR NOT SIMGRID_LIBRARIES))
-                message(FATAL_ERROR "SimGrid library is required but has not been found")
-            endif()
-            if(CHAMELEON_ENABLE_TRACING AND (NOT FXT_FOUND OR NOT FXT_LIBRARIES))
-                message(FATAL_ERROR "FxT library is required but has not been found")
+                if (NOT SIMGRID_simgrid.h_DIRS)
+                    Print_Find_Header_Status(simgrid simgrid.h)
+                endif ()
+                if (NOT SIMGRID_simgrid_LIBRARY)
+                    Print_Find_Library_Status(simgrid libsimgrid)
+                endif ()
             endif()
             if( (NOT STARPU_SHM_FOUND) OR (NOT STARPU_SHM_LIBRARIES) OR
                 ( STARPU_LOOK_FOR_MPI AND (NOT STARPU_MPI_FOUND OR NOT STARPU_MPI_LIBRARIES) )
               )
-                message(FATAL_ERROR "StarPU library is required but has not been found")
-            endif()
-        endif ( STARPU_FOUND )
-
-    endif( CHAMELEON_SCHED_STARPU )
-
-    if( CHAMELEON_SCHED_PARSEC )
-
-        # create list of components in order to make a single call to find_package(starpu...)
-        set(PARSEC_COMPONENT_LIST "HWLOC")
-        if(CHAMELEON_USE_MPI)
-            list(APPEND PARSEC_COMPONENT_LIST "MPI")
+                foreach(starpu_hdr ${STARPU_hdrs_to_find})
+                    if (NOT STARPU_${starpu_hdr}_INCLUDE_DIRS)
+                        Print_Find_Header_Status(starpu ${starpu_hdr})
+                    endif ()
+                endforeach()
+                if(STARPU_VERSION_STRING)
+                    foreach(starpu_lib ${STARPU_libs_to_find})
+                        if (NOT STARPU_${starpu_lib}_LIBRARY)
+                            Print_Find_Library_Status(starpu ${starpu_lib})
+                        endif ()
+                    endforeach()
+                endif ()
+            endif ()
+        else(MORSE_VERBOSE_FIND_PACKAGE)
+            message(WARNING "StarPU library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
+            " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
+        endif(MORSE_VERBOSE_FIND_PACKAGE)
+        if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
+            message(FATAL_ERROR "hwloc library is required but has not been found")
         endif()
-        if(CHAMELEON_USE_CUDA)
-            list(APPEND PARSEC_COMPONENT_LIST "CUDA")
+        if(CHAMELEON_SIMULATION AND (NOT SIMGRID_FOUND OR NOT SIMGRID_LIBRARIES))
+            message(FATAL_ERROR "SimGrid library is required but has not been found")
         endif()
-        # TODO: Add a CHAMELEON_WITH_PROFILING option that enables Fxt for StarPU, or PAPI for PaRSEC
-        #if(CHAMELEON_WITH_PROFILING)
-        #    list(APPEND PARSEC_COMPONENT_LIST "PAPI")
-        #endif()
-
-        find_package(PARSEC COMPONENTS ${PARSEC_COMPONENT_LIST})
+        if(CHAMELEON_ENABLE_TRACING AND (NOT FXT_FOUND OR NOT FXT_LIBRARIES))
+            message(FATAL_ERROR "FxT library is required but has not been found")
+        endif()
+        if( (NOT STARPU_SHM_FOUND) OR (NOT STARPU_SHM_LIBRARIES) OR
+            ( STARPU_LOOK_FOR_MPI AND (NOT STARPU_MPI_FOUND OR NOT STARPU_MPI_LIBRARIES) )
+          )
+            message(FATAL_ERROR "StarPU library is required but has not been found")
+        endif()
+    endif ( STARPU_FOUND )
 
-        # Add definition and include_dir if found
-        if(PARSEC_FOUND)
-            message("-- ${Blue}Add definition CHAMELEON_SCHED_PARSEC"
-            " - Activate PaRSEC in Chameleon${ColourReset}")
+endif( CHAMELEON_SCHED_STARPU )
 
-          add_definitions(-DCHAMELEON_SCHED_PARSEC) # TODO: remove that
-          include_directories(${PARSEC_INCLUDE_DIRS_DEP})
-          include_directories(${PARSEC_INCLUDE_DIRS}/daguepp)
-          set(CMAKE_REQUIRED_INCLUDES "${PARSEC_INCLUDE_DIRS_DEP}")
+if( CHAMELEON_SCHED_PARSEC )
 
-          if(PARSEC_LINKER_FLAGS)
-               list(APPEND CMAKE_EXE_LINKER_FLAGS "${PARSEC_LINKER_FLAGS}")
-          endif()
-          foreach(libdir ${PARSEC_LIBRARY_DIRS_DEP})
-              list(APPEND CMAKE_REQUIRED_FLAGS "-L${libdir}")
-          endforeach()
-          string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
-          set(CMAKE_REQUIRED_LIBRARIES "${PARSEC_LIBRARIES_DEP}")
-
-          if(HWLOC_FOUND AND HWLOC_LIBRARY_DIRS)
-                # the RPATH to be used when installing
-              list(APPEND CMAKE_INSTALL_RPATH "${HWLOC_LIBRARY_DIRS}")
-          endif()
-          if(PARSEC_FOUND AND PARSEC_LIBRARY_DIRS_DEP)
-              # the RPATH to be used when installing
-              list(APPEND CMAKE_INSTALL_RPATH "${PARSEC_LIBRARY_DIRS_DEP}")
-          endif()
-          if (PARSEC_LIBRARIES)
-              if (PARSEC_LIBRARIES_DEP)
-                  list(INSERT CHAMELEON_DEP 0 ${PARSEC_LIBRARIES_DEP})
-              else()
-                  list(INSERT CHAMELEON_DEP 0 ${PARSEC_LIBRARIES})
-              endif()
+    # create list of components in order to make a single call to find_package(starpu...)
+    set(PARSEC_COMPONENT_LIST "HWLOC")
+    if(CHAMELEON_USE_MPI)
+        list(APPEND PARSEC_COMPONENT_LIST "MPI")
+    endif()
+    if(CHAMELEON_USE_CUDA)
+        list(APPEND PARSEC_COMPONENT_LIST "CUDA")
+    endif()
+    # TODO: Add a CHAMELEON_WITH_PROFILING option that enables Fxt for StarPU, or PAPI for PaRSEC
+    #if(CHAMELEON_WITH_PROFILING)
+    #    list(APPEND PARSEC_COMPONENT_LIST "PAPI")
+    #endif()
+
+    find_package(PARSEC COMPONENTS ${PARSEC_COMPONENT_LIST})
+
+    # Add definition and include_dir if found
+    if(PARSEC_FOUND)
+        message("-- ${Blue}Add definition CHAMELEON_SCHED_PARSEC"
+        " - Activate PaRSEC in Chameleon${ColourReset}")
+
+      add_definitions(-DCHAMELEON_SCHED_PARSEC) # TODO: remove that
+      include_directories(${PARSEC_INCLUDE_DIRS_DEP})
+      include_directories(${PARSEC_INCLUDE_DIRS}/daguepp)
+      set(CMAKE_REQUIRED_INCLUDES "${PARSEC_INCLUDE_DIRS_DEP}")
+
+      if(PARSEC_LINKER_FLAGS)
+           list(APPEND CMAKE_EXE_LINKER_FLAGS "${PARSEC_LINKER_FLAGS}")
+      endif()
+      foreach(libdir ${PARSEC_LIBRARY_DIRS_DEP})
+          list(APPEND CMAKE_REQUIRED_FLAGS "-L${libdir}")
+      endforeach()
+      string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+      set(CMAKE_REQUIRED_LIBRARIES "${PARSEC_LIBRARIES_DEP}")
+
+      if(HWLOC_FOUND AND HWLOC_LIBRARY_DIRS)
+            # the RPATH to be used when installing
+          list(APPEND CMAKE_INSTALL_RPATH "${HWLOC_LIBRARY_DIRS}")
+      endif()
+      if(PARSEC_FOUND AND PARSEC_LIBRARY_DIRS_DEP)
+          # the RPATH to be used when installing
+          list(APPEND CMAKE_INSTALL_RPATH "${PARSEC_LIBRARY_DIRS_DEP}")
+      endif()
+      if (PARSEC_LIBRARIES)
+          if (PARSEC_LIBRARIES_DEP)
+              list(INSERT CHAMELEON_DEP 0 ${PARSEC_LIBRARIES_DEP})
+          else()
+              list(INSERT CHAMELEON_DEP 0 ${PARSEC_LIBRARIES})
           endif()
-        else ( PARSEC_FOUND )
-            if(MORSE_VERBOSE_FIND_PACKAGE)
-                if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
-                    if (NOT HWLOC_hwloc.h_DIRS)
-                        Print_Find_Header_Status(hwloc hwloc.h)
-                    endif ()
-                    if (NOT HWLOC_hwloc_LIBRARY)
-                        Print_Find_Library_Status(hwloc libhwloc)
+      endif()
+    else ( PARSEC_FOUND )
+        if(MORSE_VERBOSE_FIND_PACKAGE)
+            if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
+                if (NOT HWLOC_hwloc.h_DIRS)
+                    Print_Find_Header_Status(hwloc hwloc.h)
+                endif ()
+                if (NOT HWLOC_hwloc_LIBRARY)
+                    Print_Find_Library_Status(hwloc libhwloc)
+                endif ()
+            endif()
+            if( (NOT PARSEC_FOUND) OR (NOT PARSEC_LIBRARIES_DEP) )
+              foreach(parsec_hdr ${PARSEC_hdrs_to_find})
+                    if (NOT PARSEC_${parsec_hdr}_INCLUDE_DIRS)
+                        Print_Find_Header_Status(parsec ${parsec_hdr})
                     endif ()
-                endif()
-                if( (NOT PARSEC_FOUND) OR (NOT PARSEC_LIBRARIES_DEP) )
-                  foreach(parsec_hdr ${PARSEC_hdrs_to_find})
-                        if (NOT PARSEC_${parsec_hdr}_INCLUDE_DIRS)
-                            Print_Find_Header_Status(parsec ${parsec_hdr})
+                endforeach()
+                if(PARSEC_VERSION_STRING)
+                    foreach(parsec_lib ${PARSEC_libs_to_find})
+                        if (NOT PARSEC_${parsec_lib}_LIBRARY)
+                            Print_Find_Library_Status(parsec ${parsec_lib})
                         endif ()
                     endforeach()
-                    if(PARSEC_VERSION_STRING)
-                        foreach(parsec_lib ${PARSEC_libs_to_find})
-                            if (NOT PARSEC_${parsec_lib}_LIBRARY)
-                                Print_Find_Library_Status(parsec ${parsec_lib})
-                            endif ()
-                        endforeach()
-                    endif()
                 endif()
-            else(MORSE_VERBOSE_FIND_PACKAGE)
-                message(WARNING "PaRSEC library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
-                " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
-            endif(MORSE_VERBOSE_FIND_PACKAGE)
-            if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
-                message(FATAL_ERROR "hwloc library is required but has not been found")
             endif()
-            if( (NOT PARSEC_FOUND) OR (NOT PARSEC_LIBRARIES_DEP) )
-                message(FATAL_ERROR "PaRSEC library is required but has not been found")
-            endif()
-        endif ( PARSEC_FOUND )
+        else(MORSE_VERBOSE_FIND_PACKAGE)
+            message(WARNING "PaRSEC library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
+            " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
+        endif(MORSE_VERBOSE_FIND_PACKAGE)
+        if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
+            message(FATAL_ERROR "hwloc library is required but has not been found")
+        endif()
+        if( (NOT PARSEC_FOUND) OR (NOT PARSEC_LIBRARIES_DEP) )
+            message(FATAL_ERROR "PaRSEC library is required but has not been found")
+        endif()
+    endif ( PARSEC_FOUND )
 
-    endif( CHAMELEON_SCHED_PARSEC )
+endif( CHAMELEON_SCHED_PARSEC )
 
-          # try to find quark runtime
-    if( CHAMELEON_SCHED_QUARK )
+      # try to find quark runtime
+if( CHAMELEON_SCHED_QUARK )
 
-        find_package(QUARK COMPONENTS HWLOC)
+    find_package(QUARK COMPONENTS HWLOC)
 
-        # Add definition and include_dir if found
-        if(QUARK_FOUND)
-            message("-- ${Blue}Add definition CHAMELEON_SCHED_QUARK"
-            " - Activate QUARK in Chameleon${ColourReset}")
-            add_definitions(-DCHAMELEON_SCHED_QUARK) # TODO: remove that
-            include_directories(${QUARK_INCLUDE_DIRS})
-            if(QUARK_LIBRARY_DIRS)
-                # the RPATH to be used when installing
-                list(APPEND CMAKE_INSTALL_RPATH "${QUARK_LIBRARY_DIRS}")
-            endif()
-            if (QUARK_LIBRARIES)
-                if (QUARK_LIBRARIES_DEP)
-                    list(INSERT CHAMELEON_DEP 0 ${QUARK_LIBRARIES_DEP})
-                else()
-                    list(INSERT CHAMELEON_DEP 0 ${QUARK_LIBRARIES})
-                endif()
-            endif()
-        else(QUARK_FOUND)
-            if(MORSE_VERBOSE_FIND_PACKAGE)
-                if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
-                    if (NOT HWLOC_hwloc.h_DIRS)
-                        Print_Find_Header_Status(hwloc hwloc.h)
-                    endif ()
-                    if (NOT HWLOC_hwloc_LIBRARY)
-                        Print_Find_Library_Status(hwloc libhwloc)
-                    endif ()
-                endif()
-                if (NOT QUARK_quark.h_DIRS)
-                    Print_Find_Header_Status(quark quark.h)
-                endif ()
-                if (NOT QUARK_quark_LIBRARY)
-                    Print_Find_Library_Status(quark libquark)
-                endif ()
+    # Add definition and include_dir if found
+    if(QUARK_FOUND)
+        message("-- ${Blue}Add definition CHAMELEON_SCHED_QUARK"
+        " - Activate QUARK in Chameleon${ColourReset}")
+        add_definitions(-DCHAMELEON_SCHED_QUARK) # TODO: remove that
+        include_directories(${QUARK_INCLUDE_DIRS})
+        if(QUARK_LIBRARY_DIRS)
+            # the RPATH to be used when installing
+            list(APPEND CMAKE_INSTALL_RPATH "${QUARK_LIBRARY_DIRS}")
+        endif()
+        if (QUARK_LIBRARIES)
+            if (QUARK_LIBRARIES_DEP)
+                list(INSERT CHAMELEON_DEP 0 ${QUARK_LIBRARIES_DEP})
             else()
-                message(WARNING "QUARK library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
-                " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
+                list(INSERT CHAMELEON_DEP 0 ${QUARK_LIBRARIES})
             endif()
+        endif()
+    else(QUARK_FOUND)
+        if(MORSE_VERBOSE_FIND_PACKAGE)
             if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
-                message(FATAL_ERROR "hwloc library is required but has not been found")
+                if (NOT HWLOC_hwloc.h_DIRS)
+                    Print_Find_Header_Status(hwloc hwloc.h)
+                endif ()
+                if (NOT HWLOC_hwloc_LIBRARY)
+                    Print_Find_Library_Status(hwloc libhwloc)
+                endif ()
             endif()
-            message(FATAL_ERROR "QUARK library is required but has not been found")
-        endif(QUARK_FOUND)
-
-    endif()
-
-    list(REMOVE_DUPLICATES CMAKE_EXE_LINKER_FLAGS)
-    string(REPLACE ";" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
-    # Fix a problem on Mac OS X when building shared libraries
-    if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-        set(CMAKE_SHARED_LINKER_FLAGS "-undefined dynamic_lookup")
-    endif()
-
-    # Add define for Fortran Mangling (should be defined somewhere else)
-    # ------------------------------------------------------------------
-    message("-- ${Blue}Add definition ADD_"
-            " - For Fortran mangling${ColourReset}")
-    add_definitions(-DADD_)
+            if (NOT QUARK_quark.h_DIRS)
+                Print_Find_Header_Status(quark quark.h)
+            endif ()
+            if (NOT QUARK_quark_LIBRARY)
+                Print_Find_Library_Status(quark libquark)
+            endif ()
+        else()
+            message(WARNING "QUARK library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF."
+            " Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
+        endif()
+        if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
+            message(FATAL_ERROR "hwloc library is required but has not been found")
+        endif()
+        message(FATAL_ERROR "QUARK library is required but has not been found")
+    endif(QUARK_FOUND)
 
-    #------------------------------------------------------------------------------
-    # Save extra dependencies (all required links)
-    list(APPEND CHAMELEON_DEP ${EXTRA_LIBRARIES})
-    list(REMOVE_DUPLICATES CHAMELEON_DEP) # WARNING: is it safe, respect order?
+endif()
 
-    # Check for the subdirectories
-    # ----------------------------
+list(REMOVE_DUPLICATES CMAKE_EXE_LINKER_FLAGS)
+string(REPLACE ";" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
+# Fix a problem on Mac OS X when building shared libraries
+if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+    set(CMAKE_SHARED_LINKER_FLAGS "-undefined dynamic_lookup")
+endif()
 
-    # include headers
-    # ---------------
-    include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-    include_directories(${CMAKE_CURRENT_BINARY_DIR})
-    include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
-    include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
+# Add define for Fortran Mangling (should be defined somewhere else)
+# ------------------------------------------------------------------
+message("-- ${Blue}Add definition ADD_"
+        " - For Fortran mangling${ColourReset}")
+add_definitions(-DADD_)
 
+#------------------------------------------------------------------------------
+# Save extra dependencies (all required links)
+list(APPEND CHAMELEON_DEP ${EXTRA_LIBRARIES})
+list(REMOVE_DUPLICATES CHAMELEON_DEP) # WARNING: is it safe, respect order?
 
-    ###############################################################################
-    # Coreblas library (kernels for CPUs) #
-    #######################################
+# Check for the subdirectories
+# ----------------------------
 
-    add_subdirectory(coreblas)
-    #------------------------------------------------------------------------------
+# include headers
+# ---------------
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
 
 
-    ###############################################################################
-    # Cudablas library (kernels for CUDAs) #
-    ########################################
+###############################################################################
+# Coreblas library (kernels for CPUs) #
+#######################################
 
-    if(CHAMELEON_USE_CUDA)
-        add_subdirectory(cudablas)
-    endif()
-    #------------------------------------------------------------------------------
+add_subdirectory(coreblas)
+#------------------------------------------------------------------------------
 
 
-    ###############################################################################
-    # Main library #
-    ################
+###############################################################################
+# Cudablas library (kernels for CUDAs) #
+########################################
 
-    add_subdirectory(include)
-    add_subdirectory(control)
-    add_subdirectory(compute)
-    #------------------------------------------------------------------------------
+if(CHAMELEON_USE_CUDA)
+    add_subdirectory(cudablas)
+endif()
+#------------------------------------------------------------------------------
 
 
-    ###############################################################################
-    # Runtime library #
-    ###################
+###############################################################################
+# Main library #
+################
 
-    add_subdirectory(runtime)
-    #------------------------------------------------------------------------------
+add_subdirectory(include)
+add_subdirectory(control)
+add_subdirectory(compute)
+#------------------------------------------------------------------------------
 
 
-    ###############################################################################
-    # Executables and Tests #
-    #########################
+###############################################################################
+# Runtime library #
+###################
 
-    enable_testing()
-    include(CTest)
+add_subdirectory(runtime)
+#------------------------------------------------------------------------------
 
-    # Necessary to compile executables (temporary)
-    # should use SystemDetection.cmake module?
-    string(REGEX MATCH ".*ifort$" _match_ifort ${CMAKE_Fortran_COMPILER})
-    if(_match_ifort)
-        message(STATUS "Add -nofor_main to the Fortran linker (Intel compiler)")
-        set(CMAKE_Fortran_FLAGS  "${CMAKE_Fortran_FLAGS} -nofor_main")
-    endif(_match_ifort)
 
-    # Testing executables
-    if(CHAMELEON_ENABLE_EXAMPLE)
-      add_subdirectory(example)
-    endif(CHAMELEON_ENABLE_EXAMPLE)
+###############################################################################
+# Executables and Tests #
+#########################
 
-    # Testing executables
-    if(CHAMELEON_ENABLE_TESTING)
-      add_subdirectory(testing)
-    endif(CHAMELEON_ENABLE_TESTING)
+enable_testing()
+include(CTest)
 
-    # Timing executables
-    if(CHAMELEON_ENABLE_TIMING)
-      add_subdirectory(timing)
-    endif(CHAMELEON_ENABLE_TIMING)
-    #------------------------------------------------------------------------------
+# Necessary to compile executables (temporary)
+# should use SystemDetection.cmake module?
+string(REGEX MATCH ".*ifort$" _match_ifort ${CMAKE_Fortran_COMPILER})
+if(_match_ifort)
+    message(STATUS "Add -nofor_main to the Fortran linker (Intel compiler)")
+    set(CMAKE_Fortran_FLAGS  "${CMAKE_Fortran_FLAGS} -nofor_main")
+endif(_match_ifort)
 
+# Testing executables
+if(CHAMELEON_ENABLE_EXAMPLE)
+  add_subdirectory(example)
+endif(CHAMELEON_ENABLE_EXAMPLE)
 
-    ###############################################################################
-    # Documentation #
-    #################
+# Testing executables
+if(CHAMELEON_ENABLE_TESTING)
+  add_subdirectory(testing)
+endif(CHAMELEON_ENABLE_TESTING)
 
-    if(CHAMELEON_ENABLE_DOCS)
-        add_subdirectory(docs)
-        if (DOXYGEN_EXECUTABLE AND MAKEINFO_COMPILER AND TEXI2DVI_COMPILER AND TEX_COMPILER)
-            add_custom_target(docs ALL DEPENDS doxygen-out doc-info-users_guide doc-html-users_guide doc-pdf-users_guide)
-        endif()
-    endif()
-    #------------------------------------------------------------------------------
+# Timing executables
+if(CHAMELEON_ENABLE_TIMING)
+  add_subdirectory(timing)
+endif(CHAMELEON_ENABLE_TIMING)
+#------------------------------------------------------------------------------
 
 
-    ###############################################################################
-    # Config files (pkg_config) #
-    #############################
+###############################################################################
+# Documentation #
+#################
 
-    # Create file morse_starpu.pc
-    # ---------------------------
-    if(CHAMELEON_SCHED_STARPU)
-        generate_pkgconfig_file("${CMAKE_CURRENT_SOURCE_DIR}/lib/pkgconfig/chameleon-starpu.pc.in")
+if(CHAMELEON_ENABLE_DOCS)
+    add_subdirectory(docs)
+    if (DOXYGEN_EXECUTABLE AND MAKEINFO_COMPILER AND TEXI2DVI_COMPILER AND TEX_COMPILER)
+        add_custom_target(docs ALL DEPENDS doxygen-out doc-info-users_guide doc-html-users_guide doc-pdf-users_guide)
     endif()
+endif()
+#------------------------------------------------------------------------------
 
-    # # Create file morse_quark.pc
-    # # --------------------------
-    if(CHAMELEON_SCHED_QUARK)
-        generate_pkgconfig_file("${CMAKE_CURRENT_SOURCE_DIR}/lib/pkgconfig/chameleon-quark.pc.in")
-    endif()
-    #------------------------------------------------------------------------------
-
-    ###############################################################################
-    # Release source #
-    ##################
-    set(CPACK_SOURCE_GENERATOR "TGZ")
-    set(CPACK_PACKAGE_NAME "chameleon")
-    set(CPACK_PACKAGE_VERSION "${CHAMELEON_VERSION_MAJOR}.${CHAMELEON_VERSION_MINOR}.${CHAMELEON_VERSION_MICRO}")
-    set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
-    set(CPACK_SOURCE_IGNORE_FILES "build;.cproject;.dir-locals.el;.project;.pydevproject;.svn")
-    include(CPack)
-
-    ###############################################################################
-    # Print Options #
-    #################
-    get_directory_property( CHAMELEON_DEFINITIONS_LIST DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS )
-    include(PrintOpts)
-
-    if (CMAKE_INSTALL_PREFIX STREQUAL "/usr/local" OR CMAKE_INSTALL_PREFIX STREQUAL "C:/Program Files")
-        message("-- ${Yellow}Your CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} which is a default system path."
-        " You may want to change it: set the CMAKE_INSTALL_PREFIX variable to do so${ColourReset}")
-    else()
-        message("-- ${Yellow}Your CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX}${ColourReset}")
-    endif()
 
-else(MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
+###############################################################################
+# Config files (pkg_config) #
+#############################
 
-    message(STATUS "MORSE_DISTRIB_DIR is not set")
-    message(STATUS "Please indicate where is located your MORSE distribution directory."
-    " This is necessary to find cmake_modules.")
-    message(STATUS "If you are a MORSE developer, you normally have access to the svn repository of the MORSE_DISTRIB_DIR: "
-    "svn checkout svn+ssh://yourlogin@scm.gforge.inria.fr/svnroot/morse/trunk/morse_distrib")
+# Create file morse_starpu.pc
+# ---------------------------
+if(CHAMELEON_SCHED_STARPU)
+    generate_pkgconfig_file("${CMAKE_CURRENT_SOURCE_DIR}/lib/pkgconfig/chameleon-starpu.pc.in")
+endif()
 
-endif(MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
+# # Create file morse_quark.pc
+# # --------------------------
+if(CHAMELEON_SCHED_QUARK)
+    generate_pkgconfig_file("${CMAKE_CURRENT_SOURCE_DIR}/lib/pkgconfig/chameleon-quark.pc.in")
+endif()
+#------------------------------------------------------------------------------
+
+###############################################################################
+# Release source #
+##################
+set(CPACK_SOURCE_GENERATOR "TGZ")
+set(CPACK_PACKAGE_NAME "chameleon")
+set(CPACK_PACKAGE_VERSION "${CHAMELEON_VERSION_MAJOR}.${CHAMELEON_VERSION_MINOR}.${CHAMELEON_VERSION_MICRO}")
+set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
+set(CPACK_SOURCE_IGNORE_FILES "build;.cproject;.dir-locals.el;.project;.pydevproject;.svn")
+include(CPack)
+
+###############################################################################
+# Print Options #
+#################
+get_directory_property( CHAMELEON_DEFINITIONS_LIST DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS )
+include(PrintOpts)
+
+if (CMAKE_INSTALL_PREFIX STREQUAL "/usr/local" OR CMAKE_INSTALL_PREFIX STREQUAL "C:/Program Files")
+    message("-- ${Yellow}Your CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} which is a default system path."
+    " You may want to change it: set the CMAKE_INSTALL_PREFIX variable to do so${ColourReset}")
+else()
+    message("-- ${Yellow}Your CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX}${ColourReset}")
+endif()
 
 ###
 ### END CMakeLists.txt
diff --git a/cmake_modules/morse_cmake b/cmake_modules/morse_cmake
new file mode 160000
index 000000000..e99c10ba4
--- /dev/null
+++ b/cmake_modules/morse_cmake
@@ -0,0 +1 @@
+Subproject commit e99c10ba48523bb4e29be057b6239cb1f83288f6
-- 
GitLab