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