diff --git a/CMakeModules/morse/find/FindBLAS.cmake b/CMakeModules/morse/find/FindBLAS.cmake
index 22db03278774a8885e387ab145ab0a7411bc0fa7..4e10c4a6f272d94ff56477c9e5b7609e2aa81cae 100644
--- a/CMakeModules/morse/find/FindBLAS.cmake
+++ b/CMakeModules/morse/find/FindBLAS.cmake
@@ -457,7 +457,13 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
     endif()
 
     if (UNIX AND NOT WIN32)
-        set(LM "-lm")
+        # m
+        find_library(M_LIBRARY NAMES m)
+        if(M_LIBRARY)
+            set(LM "-lm")
+        else()
+            set(LM "")
+        endif()
         set(BLAS_COMPILER_FLAGS "")
         if (NOT BLA_VENDOR STREQUAL "Intel10_64lp_seq")
             if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
diff --git a/CMakeModules/morse/find/FindFFTW.cmake b/CMakeModules/morse/find/FindFFTW.cmake
index f2859b5baef0a5e05e76f5996ea3098979872a3a..8a992479577a07cbced3ee471947196915484c82 100644
--- a/CMakeModules/morse/find/FindFFTW.cmake
+++ b/CMakeModules/morse/find/FindFFTW.cmake
@@ -431,12 +431,14 @@ if(FFTW_LIBRARIES)
     endif()
     # MKL
     if(FFTW_LOOK_FOR_MKL)
-        list(APPEND REQUIRED_LIBS "${CMAKE_THREAD_LIBS_INIT};-lm")
+        list(APPEND REQUIRED_LIBS "${CMAKE_THREAD_LIBS_INIT}")
         if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
             list(APPEND REQUIRED_LDFLAGS "-Wl,--no-as-needed")
         endif()
     endif()
-    if(UNIX OR WIN32)
+    # m
+    find_library(M_LIBRARY NAMES m)
+    if(M_LIBRARY)
         list(APPEND REQUIRED_LIBS "-lm")
     endif()
 
diff --git a/CMakeModules/morse/find/FindHWLOC.cmake b/CMakeModules/morse/find/FindHWLOC.cmake
index 01e086bb70df28a58df80999e14c3b39eee33403..7f640fabc6138f5fa12f62aea2fe20d4345a6dd1 100644
--- a/CMakeModules/morse/find/FindHWLOC.cmake
+++ b/CMakeModules/morse/find/FindHWLOC.cmake
@@ -271,13 +271,6 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) O
         check_function_exists(hwloc_topology_init HWLOC_WORKS)
         mark_as_advanced(HWLOC_WORKS)
 
-        # test headers to guess the version
-        check_struct_has_member( "struct hwloc_obj" parent hwloc.h HAVE_HWLOC_PARENT_MEMBER )
-        check_struct_has_member( "struct hwloc_cache_attr_s" size hwloc.h HAVE_HWLOC_CACHE_ATTR )
-        check_c_source_compiles( "#include <hwloc.h>
-            int main(void) { hwloc_obj_t o; o->type = HWLOC_OBJ_PU; return 0;}" HAVE_HWLOC_OBJ_PU)
-        check_library_exists(${HWLOC_LIBRARIES} hwloc_bitmap_free "" HAVE_HWLOC_BITMAP)
-
         if(NOT HWLOC_WORKS)
             if(NOT HWLOC_FIND_QUIETLY)
                 message(STATUS "Looking for hwloc : test of hwloc_topology_init with hwloc library fails")
@@ -319,3 +312,18 @@ else()
                                       HWLOC_LIBRARIES
                                       HWLOC_WORKS)
 endif()
+
+if (HWLOC_FOUND)
+    set(HWLOC_SAVE_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES})
+    list(APPEND CMAKE_REQUIRED_INCLUDES ${HWLOC_INCLUDE_DIRS})
+
+    # test headers to guess the version
+    check_struct_has_member( "struct hwloc_obj" parent hwloc.h HAVE_HWLOC_PARENT_MEMBER )
+    check_struct_has_member( "struct hwloc_cache_attr_s" size hwloc.h HAVE_HWLOC_CACHE_ATTR )
+    check_c_source_compiles( "#include <hwloc.h>
+            int main(void) { hwloc_obj_t o; o->type = HWLOC_OBJ_PU; return 0;}" HAVE_HWLOC_OBJ_PU)
+    check_library_exists(${HWLOC_LIBRARIES} hwloc_bitmap_free "" HAVE_HWLOC_BITMAP)
+
+    set(CMAKE_REQUIRED_INCLUDES ${HWLOC_SAVE_CMAKE_REQUIRED_INCLUDES})
+endif()
+
diff --git a/CMakeModules/morse/find/FindLAPACK.cmake b/CMakeModules/morse/find/FindLAPACK.cmake
index 43c6b30e6087fcb6f08ddaaacf827fc0af24b59a..73576b1d34a5504bc9e7fc0abacf80414958d067 100644
--- a/CMakeModules/morse/find/FindLAPACK.cmake
+++ b/CMakeModules/morse/find/FindLAPACK.cmake
@@ -333,8 +333,14 @@ if(BLAS_FOUND)
 #intel lapack
 if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
   if (UNIX AND NOT WIN32)
-    set(LM "-lm")
-  endif ()
+    # m
+    find_library(M_LIBRARY NAMES m)
+    if(M_LIBRARY)
+      set(LM "-lm")
+    else()
+      set(LM "")
+    endif()
+  endif()
   if (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX)
     if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED)
       find_PACKAGE(Threads)
diff --git a/CMakeModules/morse/find/FindLAPACKE.cmake b/CMakeModules/morse/find/FindLAPACKE.cmake
index c237e128b67f5a7d1e6671f995c17779838880f5..f5d8f8df2849587a20dfb7b3df4d4fe69b8d445f 100644
--- a/CMakeModules/morse/find/FindLAPACKE.cmake
+++ b/CMakeModules/morse/find/FindLAPACKE.cmake
@@ -304,15 +304,31 @@ if (LAPACK_FOUND)
             endif()
             # Fortran
             if (CMAKE_Fortran_COMPILER MATCHES ".+gfortran.*")
-                list(APPEND REQUIRED_LIBS "-lgfortran")
+                find_library(
+                    FORTRAN_gfortran_LIBRARY
+                    NAMES gfortran
+                    HINTS ${_lib_env}
+                    )
+                mark_as_advanced(FORTRAN_gfortran_LIBRARY)
+                if (FORTRAN_gfortran_LIBRARY AND CMAKE_C_COMPILER_ID STREQUAL "GNU")
+                    list(APPEND REQUIRED_LIBS "-lgfortran")
+                endif()
             elseif (CMAKE_Fortran_COMPILER MATCHES ".+ifort.*")
-                list(APPEND REQUIRED_LIBS "-lifcore")
+                find_library(
+                    FORTRAN_ifcore_LIBRARY
+                    NAMES ifcore
+                    HINTS ${_lib_env}
+                    )
+                mark_as_advanced(FORTRAN_ifcore_LIBRARY)
+                if (FORTRAN_ifcore_LIBRARY)
+                    list(APPEND REQUIRED_LIBS "-lifcore")
+                endif()
             endif()
             # m
-            if(UNIX OR WIN32)
+            find_library(M_LIBRARY NAMES m HINTS ${_lib_env})
+            if(M_LIBRARY)
                 list(APPEND REQUIRED_LIBS "-lm")
             endif()
-
             # set required libraries for link
             set(CMAKE_REQUIRED_INCLUDES "${REQUIRED_INCDIRS}")
             set(CMAKE_REQUIRED_LIBRARIES)
diff --git a/CMakeModules/morse/find/FindMETIS.cmake b/CMakeModules/morse/find/FindMETIS.cmake
index 9d026b7852d9ce2f3a19e64743e2321be9fd37af..82a638963dcfe69f86fc855fd6b23056c7942810 100644
--- a/CMakeModules/morse/find/FindMETIS.cmake
+++ b/CMakeModules/morse/find/FindMETIS.cmake
@@ -206,7 +206,8 @@ if(METIS_LIBRARIES)
     endif()
     set(REQUIRED_LIBS "${METIS_LIBRARIES}")
     # m
-    if(UNIX OR WIN32)
+    find_library(M_LIBRARY NAMES m)
+    if(M_LIBRARY)
         list(APPEND REQUIRED_LIBS "-lm")
     endif()
 
diff --git a/CMakeModules/morse/find/FindMUMPS.cmake b/CMakeModules/morse/find/FindMUMPS.cmake
index 5655aab20c1603c5c5e70c95e9cf046a7470b690..5524dbfc81026bf6824d4628bc791b459e1a54ca 100644
--- a/CMakeModules/morse/find/FindMUMPS.cmake
+++ b/CMakeModules/morse/find/FindMUMPS.cmake
@@ -115,6 +115,29 @@ endif()
 # Dependencies detection
 # ----------------------
 
+# Add system library paths to search lib
+# --------------------------------------
+unset(_lib_env)
+set(ENV_MUMPS_LIBDIR "$ENV{MUMPS_LIBDIR}")
+if(ENV_MUMPS_LIBDIR)
+    list(APPEND _lib_env "${ENV_MUMPS_LIBDIR}")
+elseif(ENV_MUMPS_DIR)
+    list(APPEND _lib_env "${ENV_MUMPS_DIR}")
+    list(APPEND _lib_env "${ENV_MUMPS_DIR}/lib")
+else()
+    if(WIN32)
+        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+    else()
+        if(APPLE)
+            string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+        else()
+            string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+        endif()
+        list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
+        list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
+    endif()
+endif()
+list(REMOVE_DUPLICATES _lib_env)
 
 # Required dependencies
 # ---------------------
@@ -560,9 +583,25 @@ if(MUMPS_LIBRARIES)
     endif()
     # Fortran
     if (CMAKE_Fortran_COMPILER MATCHES ".+gfortran.*")
-        list(APPEND REQUIRED_LIBS "-lgfortran")
+        find_library(
+            FORTRAN_gfortran_LIBRARY
+            NAMES gfortran
+            HINTS ${_lib_env}
+            )
+        mark_as_advanced(FORTRAN_gfortran_LIBRARY)
+        if (FORTRAN_gfortran_LIBRARY AND CMAKE_C_COMPILER_ID STREQUAL "GNU")
+            list(APPEND REQUIRED_LIBS "-lgfortran")
+        endif()
     elseif (CMAKE_Fortran_COMPILER MATCHES ".+ifort.*")
-        list(APPEND REQUIRED_LIBS "-lifcore")
+        find_library(
+            FORTRAN_ifcore_LIBRARY
+            NAMES ifcore
+            HINTS ${_lib_env}
+            )
+        mark_as_advanced(FORTRAN_ifcore_LIBRARY)
+        if (FORTRAN_ifcore_LIBRARY)
+            list(APPEND REQUIRED_LIBS "-lifcore")
+        endif()
     endif()
     # EXTRA LIBS such that pthread, m, rt
     list(APPEND REQUIRED_LIBS ${MUMPS_EXTRA_LIBRARIES})
diff --git a/CMakeModules/morse/find/FindPARMETIS.cmake b/CMakeModules/morse/find/FindPARMETIS.cmake
index 36235d868fb98212d0438af3ebf77db8f382ed13..e037e5d5c0ebf6bce628594fa1c23cfec126fe02 100644
--- a/CMakeModules/morse/find/FindPARMETIS.cmake
+++ b/CMakeModules/morse/find/FindPARMETIS.cmake
@@ -206,7 +206,8 @@ if(PARMETIS_LIBRARIES)
     endif()
     set(REQUIRED_LIBS "${PARMETIS_LIBRARIES}")
     # m
-    if(UNIX OR WIN32)
+    find_library(M_LIBRARY NAMES m)
+    if(M_LIBRARY)
         list(APPEND REQUIRED_LIBS "-lm")
     endif()
 
diff --git a/CMakeModules/morse/find/FindPARSEC.cmake b/CMakeModules/morse/find/FindPARSEC.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..d116415f3a12886f7d2a25165fd7d6b656b72077
--- /dev/null
+++ b/CMakeModules/morse/find/FindPARSEC.cmake
@@ -0,0 +1,634 @@
+###
+#
+# @copyright (c) 2009-2015 The University of Tennessee and The University
+#                          of Tennessee Research Foundation.
+#                          All rights reserved.
+# @copyright (c) 2012-2015 Inria. All rights reserved.
+# @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+#
+###
+#
+# - Find PARSEC include dirs and libraries
+# Use this module by invoking find_package with the form:
+#  find_package(PARSEC
+#               [version] [EXACT]      # Minimum or EXACT version e.g. 1.1
+#               [REQUIRED]             # Fail with error if parsec is not found
+#               [COMPONENTS <comp1> <comp2> ...] # dependencies
+#              )
+#
+#  PARSEC depends on the following libraries:
+#   - Threads, m, rt
+#
+#  COMPONENTS are optional libraries PARSEC could be linked with,
+#  Use it to drive detection of a specific compilation chain
+#  COMPONENTS can be some of the following:
+#   - HWLOC: to activate the detection of PARSEC linked with HWLOC
+#   - CUDA: to activate the detection of PARSEC linked with CUDA
+#   - MPI: to activate the detection of PARSEC linked with MPI
+#   - AYUDAME: ??
+#
+# Results are reported in variables:
+#  PARSEC_FOUND                  - True if headers and requested libraries were found
+#  PARSEC_C_FLAGS                - list of required compilation flags (excluding -I)
+#  PARSEC_LINKER_FLAGS           - list of required linker flags (excluding -l and -L)
+#  PARSEC_INCLUDE_DIRS           - parsec include directories
+#  PARSEC_LIBRARY_DIRS           - Link directories for parsec libraries
+#  PARSEC_LIBRARIES              - parsec libraries
+#  PARSEC_INCLUDE_DIRS_DEP       - parsec + dependencies include directories
+#  PARSEC_LIBRARY_DIRS_DEP       - parsec + dependencies link directories
+#  PARSEC_LIBRARIES_DEP          - parsec libraries + dependencies
+#  PARSEC_daguepp_BIN_DIR        - path to parsec driver daguepp
+# The user can give specific paths where to find the libraries adding cmake
+# options at configure (ex: cmake path/to/project -DPARSEC=path/to/parsec):
+#  PARSEC_DIR                    - Where to find the base directory of parsec
+#  PARSEC_INCDIR                 - Where to find the header files
+#  PARSEC_LIBDIR                 - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: PARSEC_DIR, PARSEC_INCDIR, PARSEC_LIBDIR
+
+#=============================================================================
+# Copyright 2012-2013 Inria
+# Copyright 2012-2013 Emmanuel Agullo
+# Copyright 2012-2013 Mathieu Faverge
+# Copyright 2012      Cedric Castagnede
+# Copyright 2013      Florent Pruvost
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file MORSE-Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of Morse, substitute the full
+#  License text for the above reference.)
+
+include(CheckSymbolExists)
+
+if (NOT PARSEC_FOUND)
+    set(PARSEC_DIR "" CACHE PATH "Installation directory of PARSEC library")
+    if (NOT PARSEC_FIND_QUIETLY)
+        message(STATUS "A cache variable, namely PARSEC_DIR, has been set to specify the install directory of PARSEC")
+    endif()
+endif()
+
+# PARSEC may depend on other packages (HWLOC, MPI, CUDA, ...)
+# try to find them if specified as COMPONENTS during the call
+set(PARSEC_LOOK_FOR_HWLOC FALSE)
+set(PARSEC_LOOK_FOR_CUDA FALSE)
+set(PARSEC_LOOK_FOR_MPI FALSE)
+
+if( PARSEC_FIND_COMPONENTS )
+    foreach( component ${PARSEC_FIND_COMPONENTS} )
+        if(${component} STREQUAL "HWLOC")
+            set(PARSEC_LOOK_FOR_HWLOC TRUE)
+        elseif(${component} STREQUAL "CUDA")
+            set(PARSEC_LOOK_FOR_CUDA TRUE)
+        elseif(${component} STREQUAL "MPI")
+            set(PARSEC_LOOK_FOR_MPI TRUE)
+        endif()
+    endforeach()
+endif()
+
+# Required dependencies
+# ---------------------
+
+if (NOT PARSEC_FIND_QUIETLY)
+    message(STATUS "Looking for PARSEC - Try to detect pthread")
+endif()
+if (PARSEC_FIND_REQUIRED)
+    find_package(Threads REQUIRED)
+else()
+    find_package(Threads)
+endif()
+set(PARSEC_EXTRA_LIBRARIES "")
+if( THREADS_FOUND )
+    list(APPEND PARSEC_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
+if (NOT PARSEC_FIND_QUIETLY)
+    message(STATUS "Looking for PARSEC - Try to detect libm")
+endif()
+set(PARSEC_M_LIBRARIES "")
+if(UNIX OR WIN32)
+    find_library(
+        PARSEC_M_m_LIBRARY
+        NAMES m
+        )
+    mark_as_advanced(PARSEC_M_m_LIBRARY)
+    if (PARSEC_M_m_LIBRARY)
+        list(APPEND PARSEC_M_LIBRARIES "${PARSEC_M_m_LIBRARY}")
+        list(APPEND PARSEC_EXTRA_LIBRARIES "${PARSEC_M_m_LIBRARY}")
+    else()
+        if (PARSEC_FIND_REQUIRED)
+            message(FATAL_ERROR "Could NOT find libm on your system."
+                "Are you sure to a have a C compiler installed?")
+        endif()
+    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
+if (NOT PARSEC_FIND_QUIETLY)
+    message(STATUS "Looking for PARSEC - Try to detect librt")
+endif()
+set(PARSEC_RT_LIBRARIES "")
+if(UNIX AND NOT APPLE)
+    find_library(
+        PARSEC_RT_rt_LIBRARY
+        NAMES rt
+        )
+    mark_as_advanced(PARSEC_RT_rt_LIBRARY)
+    if (PARSEC_RT_rt_LIBRARY)
+        list(APPEND PARSEC_RT_LIBRARIES "${PARSEC_RT_rt_LIBRARY}")
+        list(APPEND PARSEC_EXTRA_LIBRARIES "${PARSEC_RT_rt_LIBRARY}")
+    else()
+        if (PARSEC_FIND_REQUIRED)
+            message(FATAL_ERROR "Could NOT find librt on your system")
+        endif()
+    endif()
+endif()
+
+# PARSEC may depend on HWLOC, try to find it
+if (NOT HWLOC_FOUND AND PARSEC_LOOK_FOR_HWLOC)
+    if (PARSEC_FIND_REQUIRED)
+        find_package(HWLOC REQUIRED)
+    else()
+        find_package(HWLOC)
+    endif()
+endif()
+
+# PARSEC may depend on CUDA, try to find it
+if (NOT CUDA_FOUND AND PARSEC_LOOK_FOR_CUDA)
+    if (PARSEC_FIND_REQUIRED AND PARSEC_FIND_REQUIRED_CUDA)
+        find_package(CUDA REQUIRED)
+    else()
+        find_package(CUDA)
+    endif()
+    if (CUDA_FOUND)
+        mark_as_advanced(CUDA_BUILD_CUBIN)
+        mark_as_advanced(CUDA_BUILD_EMULATION)
+        mark_as_advanced(CUDA_SDK_ROOT_DIR)
+        mark_as_advanced(CUDA_TOOLKIT_ROOT_DIR)
+        mark_as_advanced(CUDA_VERBOSE_BUILD)
+    endif()
+endif()
+
+# PARSEC may depend on MPI, try to find it
+if (NOT MPI_FOUND AND PARSEC_LOOK_FOR_MPI)
+    if (PARSEC_FIND_REQUIRED AND PARSEC_FIND_REQUIRED_MPI)
+        find_package(MPI REQUIRED)
+    else()
+        find_package(MPI)
+    endif()
+    if (MPI_FOUND)
+        mark_as_advanced(MPI_LIBRARY)
+        mark_as_advanced(MPI_EXTRA_LIBRARY)
+    endif()
+endif()
+
+set(ENV_PARSEC_DIR "$ENV{PARSEC_DIR}")
+set(ENV_PARSEC_INCDIR "$ENV{PARSEC_INCDIR}")
+set(ENV_PARSEC_LIBDIR "$ENV{PARSEC_LIBDIR}")
+set(PARSEC_GIVEN_BY_USER "FALSE")
+if ( PARSEC_DIR OR ( PARSEC_INCDIR AND PARSEC_LIBDIR) OR ENV_PARSEC_DIR OR (ENV_PARSEC_INCDIR AND ENV_PARSEC_LIBDIR) )
+    set(PARSEC_GIVEN_BY_USER "TRUE")
+endif()
+
+# Optionally use pkg-config to detect include/library dirs (if pkg-config is available)
+# -------------------------------------------------------------------------------------
+include(FindPkgConfig)
+find_package(PkgConfig QUIET)
+
+if(PKG_CONFIG_EXECUTABLE AND NOT PARSEC_GIVEN_BY_USER)
+
+    pkg_search_module(PARSEC parsec)
+    if (NOT PARSEC_FIND_QUIETLY)
+        if (PARSEC_FOUND AND PARSEC_LIBRARIES)
+            message(STATUS "Looking for PARSEC - found using PkgConfig")
+            #if(NOT PARSEC_SHM_INCLUDE_DIRS)
+            #    message("${Magenta}PARSEC_SHM_INCLUDE_DIRS is empty using PkgConfig."
+            #        "Perhaps the path to parsec headers is already present in your"
+            #        "C(PLUS)_INCLUDE_PATH environment variable.${ColourReset}")
+            #endif()
+        else()
+            message("${Magenta}Looking for PARSEC - not found using PkgConfig."
+                "Perhaps you should add the directory containing libparsec.pc"
+                "to the PKG_CONFIG_PATH environment variable.${ColourReset}")
+        endif()
+    endif()
+
+    set(PARSEC_INCLUDE_DIRS_DEP "${PARSEC_INCLUDE_DIRS}")
+    set(PARSEC_LIBRARY_DIRS_DEP "${PARSEC_LIBRARY_DIRS}")
+    set(PARSEC_LIBRARIES_DEP "${PARSEC_LIBRARIES}")
+
+    # create list of binaries to find
+    set(PARSEC_bins_to_find "daguepp")
+
+    # call cmake macro to find the bin path
+    if(PARSEC_PREFIX)
+        foreach(parsec_bin ${PARSEC_bins_to_find})
+            set(PARSEC_${parsec_bin}_BIN_DIR "PARSEC_${parsec_bin}_BIN_DIR-NOTFOUND")
+            find_path(PARSEC_${parsec_bin}_BIN_DIR
+                    NAMES ${parsec_bin}
+                    HINTS ${PARSEC_PREFIX}
+                    PATH_SUFFIXES "bin")
+        endforeach()
+    else()
+        if (PARSEC_FIND_REQUIRED)
+            message(FATAL_ERROR "PARSEC_PREFIX not defined by pkg_search_module")
+        endif()
+    endif()
+
+endif(PKG_CONFIG_EXECUTABLE AND NOT PARSEC_GIVEN_BY_USER)
+
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT PARSEC_FOUND) OR (PARSEC_GIVEN_BY_USER) )
+
+    # Looking for include
+    # -------------------
+
+    # Add system include paths to search include
+    # ------------------------------------------
+    unset(_inc_env)
+    set(ENV_PARSEC_DIR "$ENV{PARSEC_DIR}")
+    set(ENV_PARSEC_INCDIR "$ENV{PARSEC_INCDIR}")
+    if(ENV_PARSEC_INCDIR)
+        list(APPEND _inc_env "${ENV_PARSEC_INCDIR}")
+    elseif(ENV_PARSEC_DIR)
+        list(APPEND _inc_env "${ENV_PARSEC_DIR}")
+        list(APPEND _inc_env "${ENV_PARSEC_DIR}/include")
+        list(APPEND _inc_env "${ENV_PARSEC_DIR}/include/dague")
+    else()
+        if(WIN32)
+            string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+        else()
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+        endif()
+    endif()
+    list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
+    list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
+    list(REMOVE_DUPLICATES _inc_env)
+
+
+    # Try to find the parsec headers in the given paths
+    # -------------------------------------------------
+
+    # create list of headers to find
+    set(PARSEC_hdrs_to_find "dague_config.h" "dague.h")
+
+    # call cmake macro to find the header path
+    if(PARSEC_INCDIR)
+        foreach(parsec_hdr ${PARSEC_hdrs_to_find})
+            set(PARSEC_${parsec_hdr}_INCLUDE_DIRS "PARSEC_${parsec_hdr}_INCLUDE_DIRS-NOTFOUND")
+            find_path(PARSEC_${parsec_hdr}_INCLUDE_DIRS
+                      NAMES ${parsec_hdr}
+                      HINTS ${PARSEC_INCDIR})
+        endforeach()
+    else()
+        if(PARSEC_DIR)
+            set(PARSEC_${parsec_hdr}_INCLUDE_DIRS "PARSEC_${parsec_hdr}_INCLUDE_DIRS-NOTFOUND")
+            foreach(parsec_hdr ${PARSEC_hdrs_to_find})
+                find_path(PARSEC_${parsec_hdr}_INCLUDE_DIRS
+                          NAMES ${parsec_hdr}
+                          HINTS ${PARSEC_DIR}
+                          PATH_SUFFIXES "include")
+            endforeach()
+        else()
+            foreach(parsec_hdr ${PARSEC_hdrs_to_find})
+                set(PARSEC_${parsec_hdr}_INCLUDE_DIRS "PARSEC_${parsec_hdr}_INCLUDE_DIRS-NOTFOUND")
+                find_path(PARSEC_${parsec_hdr}_INCLUDE_DIRS
+                          NAMES ${parsec_hdr}
+                          HINTS ${_inc_env})
+            endforeach()
+        endif()
+    endif()
+
+    # If found, add path to cmake variable
+    # ------------------------------------
+    set(PARSEC_INCLUDE_DIRS "")
+    foreach(parsec_hdr ${PARSEC_hdrs_to_find})
+
+        if (PARSEC_${parsec_hdr}_INCLUDE_DIRS)
+            # set cmake variables using the pkg-config naming convention
+            list(APPEND PARSEC_INCLUDE_DIRS "${PARSEC_${parsec_hdr}_INCLUDE_DIRS}" )
+        else ()
+            if(NOT PARSEC_FIND_QUIETLY)
+                message(STATUS "Looking for parsec -- ${parsec_hdr} not found")
+            endif()
+        endif ()
+        mark_as_advanced(PARSEC_${parsec_hdr}_INCLUDE_DIRS)
+
+    endforeach(parsec_hdr ${PARSEC_hdrs_to_find})
+
+    if (PARSEC_INCLUDE_DIRS)
+        list(REMOVE_DUPLICATES PARSEC_INCLUDE_DIRS)
+    endif ()
+
+    # Looking for lib
+    # ---------------
+
+    set(PARSEC_LIBRARIES "")
+    set(PARSEC_LIBRARY_DIRS "")
+
+    # Add system library paths to search lib
+    # --------------------------------------
+    unset(_lib_env)
+    set(ENV_PARSEC_LIBDIR "$ENV{PARSEC_LIBDIR}")
+    if(ENV_PARSEC_LIBDIR)
+        list(APPEND _lib_env "${ENV_PARSEC_LIBDIR}")
+    elseif(ENV_PARSEC_DIR)
+        list(APPEND _lib_env "${ENV_PARSEC_DIR}")
+        list(APPEND _lib_env "${ENV_PARSEC_DIR}/lib")
+    else()
+        if(WIN32)
+            string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+        else()
+            if(APPLE)
+                string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+            else()
+                string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+            endif()
+            list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
+            list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
+        endif()
+    endif()
+    list(REMOVE_DUPLICATES _lib_env)
+
+    # Try to find the parsec libs in the given paths
+    # ----------------------------------------------
+
+    # create list of libs to find
+    set(PARSEC_libs_to_find "dague" "dague-base" "dague_distribution" "dague_distribution_matrix")
+
+    # call cmake macro to find the lib path
+    if(PARSEC_LIBDIR)
+        foreach(parsec_lib ${PARSEC_libs_to_find})
+            set(PARSEC_${parsec_lib}_LIBRARY "PARSEC_${parsec_lib}_LIBRARY-NOTFOUND")
+            find_library(PARSEC_${parsec_lib}_LIBRARY
+                         NAMES ${parsec_lib}
+                         HINTS ${PARSEC_LIBDIR})
+        endforeach()
+    else()
+        if(PARSEC_DIR)
+            foreach(parsec_lib ${PARSEC_libs_to_find})
+                set(PARSEC_${parsec_lib}_LIBRARY "PARSEC_${parsec_lib}_LIBRARY-NOTFOUND")
+                find_library(PARSEC_${parsec_lib}_LIBRARY
+                             NAMES ${parsec_lib}
+                             HINTS ${PARSEC_DIR}
+                             PATH_SUFFIXES lib lib32 lib64)
+            endforeach()
+        else()
+            foreach(parsec_lib ${PARSEC_libs_to_find})
+                set(PARSEC_${parsec_lib}_LIBRARY "PARSEC_${parsec_lib}_LIBRARY-NOTFOUND")
+                find_library(PARSEC_${parsec_lib}_LIBRARY
+                             NAMES ${parsec_lib}
+                             HINTS ${_lib_env})
+            endforeach()
+        endif()
+    endif()
+
+    # If found, add path to cmake variable
+    # ------------------------------------
+    foreach(parsec_lib ${PARSEC_libs_to_find})
+
+        if (PARSEC_${parsec_lib}_LIBRARY)
+
+            get_filename_component(${parsec_lib}_lib_path ${PARSEC_${parsec_lib}_LIBRARY} PATH)
+            # set cmake variables (respects naming convention)
+            list(APPEND PARSEC_LIBRARIES "${PARSEC_${parsec_lib}_LIBRARY}")
+            list(APPEND PARSEC_LIBRARY_DIRS "${${parsec_lib}_lib_path}")
+
+        else (PARSEC_${parsec_lib}_LIBRARY)
+
+            if(NOT PARSEC_FIND_QUIETLY)
+                message(STATUS "Looking for parsec -- lib ${parsec_lib} not found")
+            endif()
+
+        endif (PARSEC_${parsec_lib}_LIBRARY)
+
+        mark_as_advanced(PARSEC_${parsec_lib}_LIBRARY)
+
+    endforeach(parsec_lib ${PARSEC_libs_to_find})
+
+    list(REMOVE_DUPLICATES PARSEC_LIBRARIES)
+    if (PARSEC_LIBRARY_DIRS)
+        list(REMOVE_DUPLICATES PARSEC_LIBRARY_DIRS)
+    endif ()
+
+    # Looking for parsec compilers
+    # ----------------------------
+
+    # Add system bin paths to search drivers
+    # --------------------------------------
+    unset(_bin_env)
+    if(ENV_PARSEC_DIR)
+        list(APPEND _bin_env "${ENV_PARSEC_DIR}")
+        list(APPEND _bin_env "${ENV_PARSEC_DIR}/bin")
+    else()
+        string(REPLACE ":" ";" _bin_env "$ENV{PATH}")
+    endif()
+    list(REMOVE_DUPLICATES _bin_env)
+
+    # create list of binaries to find
+    set(PARSEC_bins_to_find "daguepp")
+
+    # call cmake macro to find the bin path
+    if(PARSEC_DIR)
+        foreach(parsec_bin ${PARSEC_bins_to_find})
+            set(PARSEC_${parsec_bin}_BIN_DIR "PARSEC_${parsec_bin}_BIN_DIR-NOTFOUND")
+            find_path(PARSEC_${parsec_bin}_BIN_DIR
+                    NAMES ${parsec_bin}
+                    HINTS ${PARSEC_DIR}
+                    PATH_SUFFIXES "bin")
+        endforeach()
+    else()
+        foreach(parsec_bin ${PARSEC_bins_to_find})
+            set(PARSEC_${parsec_bin}_BIN_DIR "PARSEC_${parsec_bin}_BIN_DIR-NOTFOUND")
+            find_path(PARSEC_${parsec_bin}_BIN_DIR
+                      NAMES ${parsec_bin}
+                      HINTS ${_bin_env})
+        endforeach()
+    endif()
+    if (PARSEC_daguepp_BIN_DIR)
+        if (NOT PARSEC_FIND_QUIETLY)
+            message(STATUS "Look for PARSEC - compiler daguepp found in ${PARSEC_daguepp_BIN_DIR}")
+        endif()
+    else()
+        if (PARSEC_FIND_REQUIRED)
+            message(FATAL_ERROR "Look for PARSEC - compiler daguepp not found while required")
+        endif()
+    endif()
+
+    # check a function to validate the find
+    if(PARSEC_LIBRARIES)
+
+        set(REQUIRED_FLAGS)
+        set(REQUIRED_LDFLAGS)
+        set(REQUIRED_INCDIRS)
+        set(REQUIRED_LIBDIRS)
+        set(REQUIRED_LIBS)
+
+        # PARSEC
+        if (PARSEC_INCLUDE_DIRS)
+            set(REQUIRED_INCDIRS "${PARSEC_INCLUDE_DIRS}")
+        endif()
+        set(CMAKE_REQUIRED_FLAGS)
+        foreach(libdir ${PARSEC_LIBRARY_DIRS})
+            if (libdir)
+                list(APPEND REQUIRED_LIBDIRS "${libdir}")
+            endif()
+        endforeach()
+        set(REQUIRED_LIBS "${PARSEC_LIBRARIES}")
+        # HWLOC
+        if (HWLOC_FOUND AND PARSEC_LOOK_FOR_HWLOC)
+            if (HWLOC_INCLUDE_DIRS)
+                list(APPEND REQUIRED_INCDIRS "${HWLOC_INCLUDE_DIRS}")
+            endif()
+            if (HWLOC_LIBRARY_DIRS)
+                list(APPEND REQUIRED_LIBDIRS "${HWLOC_LIBRARY_DIRS}")
+            endif()
+            foreach(lib ${HWLOC_LIBRARIES})
+                if (EXISTS ${lib} OR ${lib} MATCHES "^-")
+                    list(APPEND REQUIRED_LIBS "${lib}")
+                else()
+                    list(APPEND REQUIRED_LIBS "-l${lib}")
+                endif()
+            endforeach()
+        endif()
+        # MPI
+        if (MPI_FOUND AND PARSEC_LOOK_FOR_MPI)
+            if (MPI_C_INCLUDE_PATH)
+                list(APPEND REQUIRED_INCDIRS "${MPI_C_INCLUDE_PATH}")
+            endif()
+            if (MPI_C_LINK_FLAGS)
+                if (${MPI_C_LINK_FLAGS} MATCHES "  -")
+                    string(REGEX REPLACE " -" "-" MPI_C_LINK_FLAGS ${MPI_C_LINK_FLAGS})
+                endif()
+                list(APPEND REQUIRED_LDFLAGS "${MPI_C_LINK_FLAGS}")
+            endif()
+            list(APPEND REQUIRED_LIBS "${MPI_C_LIBRARIES}")
+        endif()
+        # CUDA
+        if (CUDA_FOUND AND PARSEC_LOOK_FOR_CUDA)
+            if (CUDA_INCLUDE_DIRS)
+                list(APPEND REQUIRED_INCDIRS "${CUDA_INCLUDE_DIRS}")
+            endif()
+            if (CUDA_LIBRARY_DIRS)
+                list(APPEND REQUIRED_LIBDIRS "${CUDA_LIBRARY_DIRS}")
+            endif()
+            list(APPEND REQUIRED_LIBS "${CUDA_CUBLAS_LIBRARIES};${CUDA_CUDART_LIBRARY};${CUDA_CUDA_LIBRARY}")
+        endif()
+        # Fortran
+        if (CMAKE_Fortran_COMPILER MATCHES ".+gfortran.*")
+            find_library(
+                FORTRAN_gfortran_LIBRARY
+                NAMES gfortran
+                HINTS ${_lib_env}
+                )
+            mark_as_advanced(FORTRAN_gfortran_LIBRARY)
+            if (FORTRAN_gfortran_LIBRARY AND CMAKE_C_COMPILER_ID STREQUAL "GNU")
+                list(APPEND REQUIRED_LIBS "-lgfortran")
+            endif()
+        elseif (CMAKE_Fortran_COMPILER MATCHES ".+ifort.*")
+            find_library(
+                FORTRAN_ifcore_LIBRARY
+                NAMES ifcore
+                HINTS ${_lib_env}
+                )
+            mark_as_advanced(FORTRAN_ifcore_LIBRARY)
+            if (FORTRAN_ifcore_LIBRARY)
+                list(APPEND REQUIRED_LIBS "-lifcore")
+            endif()
+        endif()
+        # EXTRA LIBS such that pthread, m, rt
+        list(APPEND REQUIRED_LIBS ${PARSEC_EXTRA_LIBRARIES})
+
+        # set required libraries for link
+        set(CMAKE_REQUIRED_INCLUDES "${REQUIRED_INCDIRS}")
+        set(CMAKE_REQUIRED_LIBRARIES)
+        list(APPEND CMAKE_REQUIRED_LIBRARIES "${REQUIRED_LDFLAGS}")
+        foreach(lib_dir ${REQUIRED_LIBDIRS})
+            list(APPEND CMAKE_REQUIRED_LIBRARIES "-L${lib_dir}")
+        endforeach()
+        list(APPEND CMAKE_REQUIRED_LIBRARIES "${REQUIRED_LIBS}")
+        list(APPEND CMAKE_REQUIRED_FLAGS "${REQUIRED_FLAGS}")
+        string(REGEX REPLACE "^ -" "-" CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
+
+        # test link
+        unset(PARSEC_WORKS CACHE)
+        include(CheckFunctionExists)
+        check_function_exists(dague_init PARSEC_WORKS)
+        mark_as_advanced(PARSEC_WORKS)
+
+        if(PARSEC_WORKS)
+            # save link with dependencies
+            if (REQUIRED_FLAGS)
+                set(PARSEC_LIBRARIES_DEP "${REQUIRED_FLAGS};${REQUIRED_LIBS}")
+            else()
+                set(PARSEC_LIBRARIES_DEP "${REQUIRED_LIBS}")
+            endif()
+            set(PARSEC_LIBRARY_DIRS_DEP "${REQUIRED_LIBDIRS}")
+            set(PARSEC_INCLUDE_DIRS_DEP "${REQUIRED_INCDIRS}")
+            set(PARSEC_LINKER_FLAGS "${REQUIRED_LDFLAGS}")
+            list(REMOVE_DUPLICATES PARSEC_LIBRARY_DIRS_DEP)
+            list(REMOVE_DUPLICATES PARSEC_INCLUDE_DIRS_DEP)
+            list(REMOVE_DUPLICATES PARSEC_LINKER_FLAGS)
+        else()
+            if(NOT PARSEC_FIND_QUIETLY)
+                message(STATUS "Looking for parsec : test of dague_init fails")
+                message(STATUS "CMAKE_REQUIRED_LIBRARIES: ${CMAKE_REQUIRED_LIBRARIES}")
+                message(STATUS "CMAKE_REQUIRED_INCLUDES: ${CMAKE_REQUIRED_INCLUDES}")
+                message(STATUS "Check in CMakeFiles/CMakeError.log to figure out why it fails")
+                message(STATUS "Maybe PARSEC is linked with specific libraries. "
+                "Have you tried with COMPONENTS (HWLOC, CUDA, MPI)? "
+                "See the explanation in FindPARSEC.cmake.")
+            endif()
+        endif()
+        set(CMAKE_REQUIRED_INCLUDES)
+        set(CMAKE_REQUIRED_FLAGS)
+        set(CMAKE_REQUIRED_LIBRARIES)
+    endif(PARSEC_LIBRARIES)
+
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT PARSEC_FOUND) OR (PARSEC_GIVEN_BY_USER) )
+
+if (PARSEC_LIBRARIES)
+    if (PARSEC_LIBRARY_DIRS)
+        foreach(dir ${PARSEC_LIBRARY_DIRS})
+            if ("${dir}" MATCHES "parsec")
+                set(first_lib_path "${dir}")
+            endif()
+        endforeach()
+    else()
+        list(GET PARSEC_LIBRARIES 0 first_lib)
+        get_filename_component(first_lib_path "${first_lib}" PATH)
+    endif()
+    if (${first_lib_path} MATCHES "/lib(32|64)?$")
+        string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
+        set(PARSEC_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of PARSEC library" FORCE)
+    else()
+        set(PARSEC_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of PARSEC library" FORCE)
+    endif()
+endif()
+
+# check that PARSEC has been found
+# --------------------------------
+include(FindPackageHandleStandardArgs)
+if (PKG_CONFIG_EXECUTABLE AND PARSEC_FOUND)
+    find_package_handle_standard_args(PARSEC DEFAULT_MSG
+                                      PARSEC_LIBRARIES
+                                      PARSEC_daguepp_BIN_DIR)
+else()
+    find_package_handle_standard_args(PARSEC DEFAULT_MSG
+                                      PARSEC_LIBRARIES
+                                      PARSEC_daguepp_BIN_DIR
+                                      PARSEC_WORKS)
+endif()
diff --git a/CMakeModules/morse/find/FindPASTIX.cmake b/CMakeModules/morse/find/FindPASTIX.cmake
index c2ee44cf386270cd64a0c4d8b57528fdba06dad2..1212c5b8444b94226917fc21c7d18be86ef0bdb6 100644
--- a/CMakeModules/morse/find/FindPASTIX.cmake
+++ b/CMakeModules/morse/find/FindPASTIX.cmake
@@ -617,9 +617,25 @@ if(PASTIX_LIBRARIES)
     endif()
     # Fortran
     if (CMAKE_Fortran_COMPILER MATCHES ".+gfortran.*")
-        list(APPEND REQUIRED_LIBS "-lgfortran")
+        find_library(
+            FORTRAN_gfortran_LIBRARY
+            NAMES gfortran
+            HINTS ${_lib_env}
+            )
+        mark_as_advanced(FORTRAN_gfortran_LIBRARY)
+        if (FORTRAN_gfortran_LIBRARY AND CMAKE_C_COMPILER_ID STREQUAL "GNU")
+            list(APPEND REQUIRED_LIBS "-lgfortran")
+        endif()
     elseif (CMAKE_Fortran_COMPILER MATCHES ".+ifort.*")
-        list(APPEND REQUIRED_LIBS "-lifcore")
+        find_library(
+            FORTRAN_ifcore_LIBRARY
+            NAMES ifcore
+            HINTS ${_lib_env}
+            )
+        mark_as_advanced(FORTRAN_ifcore_LIBRARY)
+        if (FORTRAN_ifcore_LIBRARY)
+            list(APPEND REQUIRED_LIBS "-lifcore")
+        endif()
     endif()
     # EXTRA LIBS such that pthread, m, rt
     list(APPEND REQUIRED_LIBS ${PASTIX_EXTRA_LIBRARIES})
diff --git a/CMakeModules/morse/find/FindSCALAPACK.cmake b/CMakeModules/morse/find/FindSCALAPACK.cmake
index fc0c4273523e3de645a85ccffb9ed8da4c019ff6..0c1863132f0d26b560d40f7c092860ae00dc601b 100644
--- a/CMakeModules/morse/find/FindSCALAPACK.cmake
+++ b/CMakeModules/morse/find/FindSCALAPACK.cmake
@@ -361,7 +361,12 @@ endif ()
 #intel scalapack
 if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
   if (UNIX AND NOT WIN32)
-    set(LM "-lm")
+    find_library(M_LIBRARY NAMES m)
+    if(M_LIBRARY)
+        set(LM "-lm")
+    else()
+        set(LM "")
+    endif()
   endif ()
   if (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX)
     if(SCALAPACK_FIND_QUIETLY OR NOT SCALAPACK_FIND_REQUIRED)
diff --git a/CMakeModules/morse/find/FindSTARPU.cmake b/CMakeModules/morse/find/FindSTARPU.cmake
index a98926b168d87c9604975c3ef272a605ded35c13..5907b5f183f0eaec29adad63b5a7a155a5d7576f 100644
--- a/CMakeModules/morse/find/FindSTARPU.cmake
+++ b/CMakeModules/morse/find/FindSTARPU.cmake
@@ -750,9 +750,25 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND)
         endif()
         # Fortran
         if (CMAKE_Fortran_COMPILER MATCHES ".+gfortran.*")
-            list(APPEND REQUIRED_LIBS "-lgfortran")
+            find_library(
+                FORTRAN_gfortran_LIBRARY
+                NAMES gfortran
+                HINTS ${_lib_env}
+                )
+            mark_as_advanced(FORTRAN_gfortran_LIBRARY)
+            if (FORTRAN_gfortran_LIBRARY AND CMAKE_C_COMPILER_ID STREQUAL "GNU")
+                list(APPEND REQUIRED_LIBS "-lgfortran")
+            endif()
         elseif (CMAKE_Fortran_COMPILER MATCHES ".+ifort.*")
-            list(APPEND REQUIRED_LIBS "-lifcore")
+            find_library(
+                FORTRAN_ifcore_LIBRARY
+                NAMES ifcore
+                HINTS ${_lib_env}
+                )
+            mark_as_advanced(FORTRAN_ifcore_LIBRARY)
+            if (FORTRAN_ifcore_LIBRARY)
+                list(APPEND REQUIRED_LIBS "-lifcore")
+            endif()
         endif()
 
         # set required libraries for link
diff --git a/CMakeModules/morse/find/RulesJDF.cmake b/CMakeModules/morse/find/RulesJDF.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..760e0d174df291deb1a2be9005c1966de441d310
--- /dev/null
+++ b/CMakeModules/morse/find/RulesJDF.cmake
@@ -0,0 +1,50 @@
+#
+# Internal module for DAGuE.
+# Setup the minimal environment to compile and generate .JDF files.
+#
+
+#
+# This macro creates a rule for every jdf basename passed in SOURCES.
+# The OUTPUTLIST contains the list of files generated by the maxro.
+#
+macro(jdf_rules jdf_rules_OUTPUTLIST jdf_rules_SOURCES)
+
+  foreach(jdf_rules_SOURCE ${jdf_rules_SOURCES})
+    # Remove .jdf if present
+    string(REGEX REPLACE ".jdf" "" jdf_rules_SRC ${jdf_rules_SOURCE}) 
+    string(REGEX REPLACE "^(.*/)*(.+)\\.*.*" "\\2" jdf_rules_BSRC ${jdf_rules_SRC})
+    set(jdf_rules_OSRC "${jdf_rules_BSRC}")
+    GET_PROPERTY(ADDITIONAL_DAGUEPP_CFLAGS SOURCE ${jdf_rules_SOURCE} PROPERTY ADDITIONAL_DAGUEPP_CFLAGS)
+ 
+    get_source_file_property(jdf_rules_IsInBinaryDir ${jdf_rules_SOURCE} IS_IN_BINARY_DIR )
+
+    # If the file is generated in a different binary dir, 
+    # we force the dependency on the generated file
+    # otherwise we let cmake choose the correct file, it is so good for that.
+    if( jdf_rules_IsInBinaryDir )
+
+      add_custom_command(
+        OUTPUT ${jdf_rules_OSRC}.h ${jdf_rules_OSRC}.c
+        COMMAND ${daguepp_EXE} ${DAGUEPP_CFLAGS} ${ADDITIONAL_DAGUEPP_CFLAGS} -i ${jdf_rules_SRC}.jdf -o ${jdf_rules_OSRC} -f ${jdf_rules_BSRC}
+        MAIN_DEPENDENCY ${CMAKE_CURRENT_BINARY_DIR}/${jdf_rules_SRC}.jdf
+        DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${jdf_rules_SRC}.jdf ${daguepp_EXE})
+
+    else( jdf_rules_IsInBinaryDir )
+
+      add_custom_command(
+        OUTPUT ${jdf_rules_OSRC}.h ${jdf_rules_OSRC}.c
+        COMMAND ${daguepp_EXE} ${DAGUEPP_CFLAGS} ${ADDITIONAL_DAGUEPP_CFLAGS} -i ${jdf_rules_SRC}.jdf -o ${jdf_rules_OSRC} -f ${jdf_rules_BSRC}
+        MAIN_DEPENDENCY ${jdf_rules_SRC}.jdf
+        DEPENDS ${jdf_rules_SRC}.jdf ${daguepp_EXE})
+
+    endif( jdf_rules_IsInBinaryDir )
+
+    list(APPEND ${jdf_rules_OUTPUTLIST} "${CMAKE_CURRENT_BINARY_DIR}/${jdf_rules_OSRC}.h;${CMAKE_CURRENT_BINARY_DIR}/${jdf_rules_OSRC}.c")
+
+  endforeach()
+  #
+  # Mark all generated files as such.
+  #
+  set_source_files_properties(${jdf_rules_OUTPUTLIST} PROPERTIES GENERATED 1)
+endmacro(jdf_rules)
+
diff --git a/CMakeModules/morse/precision_generator/subs.py b/CMakeModules/morse/precision_generator/subs.py
index fe0d0effd93ab6b2970f1cb17a4a63b42ee7bdfb..4df0a6f236c490c9acb02a7fd075cbb233dc2467 100644
--- a/CMakeModules/morse/precision_generator/subs.py
+++ b/CMakeModules/morse/precision_generator/subs.py
@@ -310,6 +310,7 @@ subs = {
     ('CORE_s',         'CORE_d',         'CORE_s',         'CORE_d'          ),
     ('cpu_gpu_s',      'cpu_gpu_d',      'cpu_gpu_c',      'cpu_gpu_z'       ),
     ('cublasS',        'cublasD',        'cublasC',        'cublasZ'         ),
+    ('CUDA_s',         'CUDA_d',         'CUDA_c',         'CUDA_z'          ),
     ('example_s',      'example_d',      'example_c',      'example_z'       ),
     ('ipt_s',          'ipt_d',          'ipt_c',          'ipt_z'           ),
     ('LAPACKE_s',      'LAPACKE_d',      'LAPACKE_c',      'LAPACKE_z'       ),
@@ -625,6 +626,10 @@ subs = {
     ('ssytrd',         'dsytrd',         'chetrd',         'zhetrd'          ),
     ('ssytrf',         'dsytrf',         'chetrf',         'zhetrf'          ),
 
+    # ----- Auxiliary routines with precision
+    ('sgemerge',       'dgemerge',       'cgemerge',       'zgemerge'        ),
+    ('sparfb',         'dparfb',         'cparfb',         'zparfb'          ),
+
     # BLAS, without precision
     # must be after BLAS with precision
     # Ex: cublasZhemm -> cublasShemm -> cublasSsymm