From c1c3fc047aadfc578d48f036ccb26ff06cfb72db Mon Sep 17 00:00:00 2001 From: Thomas Gastine Date: Thu, 1 Feb 2024 13:40:19 +0100 Subject: [PATCH] add support for Cray compilers in CMakeLists.txt --- CMakeLists.txt | 47 ++++++++++++++++++++++++++++++++-- cmake/FindOpenMP_Fortran.cmake | 2 ++ src/CMakeLists.txt | 10 ++++++-- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 14912f51..8b16536c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,6 +55,22 @@ if(CMAKE_Fortran_COMPILER_ID MATCHES GNU) set(FFLAG_FPE "-ffpe-trap=invalid,zero,overflow") set(FFLAG_OPT "-march=native") endif() +if(CMAKE_Fortran_COMPILER_ID MATCHES Cray) + set(FFLAG_ARCH " ") + set(FFLAG_STD "-en") + set(FFLAG_NO_STD " ") + set(FFLAG_TRACEBACK " ") + set(FFLAG_CONVERT "-h byteswapio") + set(FFLAG_PREPROCESSOR "-eZ") + set(FFLAG_WARN_ALL " ") + set(FFLAG_CHECK_ALL "-G 0 -R b") + set(FFLAG_FPE "-K trap=fp") + set(FFLAG_OPT " ") + #set(CMAKE_EXE_LINKER_FLAGS "-h dynamic") + # Remove -rdynamic option (workaround for test machine): + # https://cmake.org/pipermail/cmake/2014-November/059154.html + #set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "") +endif() if(CMAKE_Fortran_COMPILER_ID MATCHES PGI) set(FFLAG_ARCH "-m${ARCH}") set(FFLAG_STD " ") @@ -101,13 +117,16 @@ set(_MPI_Intel_Fortran_COMPILER_NAMES "mpiifort") # PGI compiler names set(_MPI_PGI_C_COMPILER_NAMES "mpipgcc|mppgcc") set(_MPI_PGI_Fortran_COMPILER_NAMES "mpipgf|mppgf") +# Cray compiler names +set(_MPI_Cray_C_COMPILER_NAMES "cc") +set(_MPI_Cray_Fortran_COMPILER_NAMES "ftn") # XLC MPI Compiler names set(_MPI_XL_C_COMPILER_NAMES "mpxlc|mpxlc_r|mpixlc|mpixlc_r") set(_MPI_XL_Fortran_COMPILER_NAMES "mpxlf|mpixlf") # Find CC, CXX and Fortran MPI wrappers -string(REGEX MATCH "${_MPI_C_COMPILER_NAMES}|${_MPI_GNU_C_COMPILER_NAMES}|${_MPI_Intel_C_COMPILER_NAMES}|${_MPI_PGI_C_COMPILER_NAMES}|${_MPI_XL_C_COMPILER_NAMES}" MPICC_COMPILER "${CMAKE_C_COMPILER}") -string(REGEX MATCH "${_MPI_Fortran_COMPILER_NAMES}|${_MPI_GNU_Fortran_COMPILER_NAMES}|${_MPI_Intel_Fortran_COMPILER_NAMES}|${_MPI_PGI_Fortran_COMPILER_NAMES}|${_MPI_XL_Fortran_COMPILER_NAMES}" MPIFORTRAN_COMPILER "${CMAKE_Fortran_COMPILER}") +string(REGEX MATCH "${_MPI_C_COMPILER_NAMES}|${_MPI_GNU_C_COMPILER_NAMES}|${_MPI_Intel_C_COMPILER_NAMES}|${_MPI_PGI_C_COMPILER_NAMES}|${_MPI_XL_C_COMPILER_NAMES}|${_MPI_Cray_C_COMPILER_NAMES}" MPICC_COMPILER "${CMAKE_C_COMPILER}") +string(REGEX MATCH "${_MPI_Fortran_COMPILER_NAMES}|${_MPI_GNU_Fortran_COMPILER_NAMES}|${_MPI_Intel_Fortran_COMPILER_NAMES}|${_MPI_PGI_Fortran_COMPILER_NAMES}|${_MPI_XL_Fortran_COMPILER_NAMES}|${_MPI_Cray_Fortran_COMPILER_NAMES}" MPIFORTRAN_COMPILER "${CMAKE_Fortran_COMPILER}") # Check whether compiler_options() is available file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCompOpt.f90" @@ -198,6 +217,7 @@ if(USE_LAPACKLIB MATCHES MKL OR USE_FFTLIB MATCHES MKL) endif() endif() + # Detect BLIS and LIBFLAME if(USE_LAPACKLIB MATCHES LIBFLAME) find_library(FLAME NAME flame @@ -216,6 +236,20 @@ if(USE_LAPACKLIB MATCHES LIBFLAME) endif() endif() +# Detect LIBSCI (Cray) +#if(USE_LAPACKLIB MATCHES LIBSCI) + #find_library(SCI NAME sci_cray_mp + #PATHS $ENV{CRAY_LIBSCI_PREFIX}/lib + # $ENV{HOME}/local/lib + # $ENV{HOME}/local/lib64) + #if ( SCI MATCHES SCI-NOTFOUND ) + #message(STATUS "LIBSCI was not found") + #set(USE_LAPACKLIB "LAPACK") + #else() + #message(STATUS "LIBSCI: '${SCI}'") + #endif() +#endif() + # Detect LAPACK if(USE_LAPACKLIB MATCHES LAPACK) find_package(LAPACK) @@ -254,6 +288,7 @@ endif() if( USE_FFTLIB MATCHES FFTW ) + include_directories(/usr/include) if ( FFTW3-NOTFOUND ) message(STATUS "FFTW3 was not found") set(USE_FFTLIB "JW") @@ -263,6 +298,14 @@ if( USE_FFTLIB MATCHES FFTW ) endif() endif() +#if ( USE_FFTLIB MATCHES MKL ) +# set(USE_DCTLIB "MKL") +#elseif( USE_FFTLIB MATCHES FFTW ) +# set(USE_DCTLIB "FFTW") +#else() +# set(USE_DCTLIB "JW") +#endif() + message(STATUS "Use '${USE_FFTLIB}' for the FFTs") message(STATUS "Use '${USE_DCTLIB}' for the DCTs") message(STATUS "Use '${USE_LAPACKLIB}' for the LU factorisations") diff --git a/cmake/FindOpenMP_Fortran.cmake b/cmake/FindOpenMP_Fortran.cmake index 7efa0a0b..18145f33 100644 --- a/cmake/FindOpenMP_Fortran.cmake +++ b/cmake/FindOpenMP_Fortran.cmake @@ -29,6 +29,8 @@ INCLUDE (${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) SET (OpenMP_Fortran_FLAG_CANDIDATES + #Cray + "-h omp" #Future Intel "-qopenmp" #Gnu diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 23df9a5d..d2d624b9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -25,7 +25,7 @@ endif() # Lapack if(USE_LAPACKLIB MATCHES JW) set(lapack algebra.f90) -elseif(USE_LAPACKLIB MATCHES LAPACK OR USE_LAPACKLIB MATCHES MKL OR USE_LAPACKLIB MATCHES LIBFLAME) +elseif(USE_LAPACKLIB MATCHES LAPACK OR USE_LAPACKLIB MATCHES MKL OR USE_LAPACKLIB MATCHES LIBFLAME OR USE_LAPACKLIB MATCHES LIBSCI) set(lapack algebra_lapack.f90) endif() @@ -97,6 +97,8 @@ endif() # Link LIBFLAME and BLIS if(USE_LAPACKLIB MATCHES LIBFLAME) target_link_libraries (${EXEC} ${FLAME} ${BLIS}) +#elseif(USE_LAPACKLIB MATCHES LIBSCI) + #target_link_libraries (${EXEC} ${SCI}) endif() if(USE_SHTNS MATCHES yes AND NOT SHTNS MATCHES SHTNS-NOTFOUND) @@ -141,6 +143,10 @@ if(USE_SHTNS MATCHES yes AND NOT SHTNS MATCHES SHTNS-NOTFOUND) target_link_libraries(${EXEC} ${SHTNS_DEPS}) else() if(USE_FFTLIB MATCHES FFTW) - target_link_libraries(${EXEC} ${FFTW3_OMP} ${FFTW3}) + if(USE_OMP) + target_link_libraries(${EXEC} ${FFTW3_OMP} ${FFTW3}) + else() + target_link_libraries(${EXEC} ${FFTW3}) + endif() endif() endif()