From a9c65b08e46ce0c97c9b50ce35a8b35eecddf51e Mon Sep 17 00:00:00 2001 From: Matthieu Volat Date: Tue, 23 May 2017 20:10:18 +0200 Subject: [PATCH] Add support for flang and ifort Fortran compilers. Require to properly set flags/libs in the wrappers. Tested with flang under FreeBSD and ifort under Linux. --- CMakeLists.txt | 17 +++++++++++++++-- src/smpi/smpif90.in | 6 +++--- src/smpi/smpiff.in | 6 +++--- tools/cmake/GCCFlags.cmake | 7 ++++++- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cde287ef96..8fede4c2b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,8 +80,21 @@ if ((NOT DEFINED enable_smpi) OR enable_smpi) if(CMAKE_Fortran_COMPILER) # Fortran compiler detected: save it, then replace by smpiff - set(SAVED_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler") + set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler") set(CMAKE_Fortran_COMPILER smpiff) + + # Set flags/libs to be used in smpiff + if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + set(SMPI_Fortran_FLAGS "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"") + set(SMPI_Fortran_LIBS "\"-lgfortran\"") + elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + set(SMPI_Fortran_FLAGS "\"-fPIC\" \"-nofor-main\"") + set(SMPI_Fortran_LIBS "\"-lifcore\"") + elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI") # flang + set(SMPI_Fortran_FLAGS "\"-fPIC\"") + set(SMPI_Fortran_LIBS "") + endif() + set(SMPI_FORTRAN 1) endif(CMAKE_Fortran_COMPILER) @@ -943,7 +956,7 @@ else() endif() endif() if(CMAKE_Fortran_COMPILER) - message(" Compiler: Fortran ...........: ${SAVED_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})") + message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})") message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}") endif() message(" Linker: .....................: ${CMAKE_LINKER}") diff --git a/src/smpi/smpif90.in b/src/smpi/smpif90.in index 459cac3a0f..22869c30b3 100644 --- a/src/smpi/smpif90.in +++ b/src/smpi/smpif90.in @@ -9,15 +9,15 @@ SIMGRID_VERSION="@SIMGRID_VERSION_STRING@" SIMGRID_GITHASH="@SIMGRID_GITHASH@" -F90=@SAVED_Fortran_COMPILER@ +F90=@SMPI_Fortran_COMPILER@ INCLUDEARGS="@includeflag@" CMAKE_LINKARGS="-L@libdir@" @SMPITOOLS_SH@ -list_set FFLAGS "-fpic" "-ff2c" "-fno-second-underscore" -list_set LINKARGS "-shared" "-lsimgrid" "-lm" "-lgfortran" +list_set FFLAGS @SMPI_Fortran_FLAGS@ +list_set LINKARGS "-shared" "-lsimgrid" @SMPI_Fortran_LIBS@ "-lm" list_set TMPFILES main_name=main diff --git a/src/smpi/smpiff.in b/src/smpi/smpiff.in index f78ffbda4d..eb28bc8f4a 100644 --- a/src/smpi/smpiff.in +++ b/src/smpi/smpiff.in @@ -9,15 +9,15 @@ SIMGRID_VERSION="@SIMGRID_VERSION_STRING@" SIMGRID_GITHASH="@SIMGRID_GITHASH@" -F77=@SAVED_Fortran_COMPILER@ +F77=@SMPI_Fortran_COMPILER@ INCLUDEARGS="@includeflag@" CMAKE_LINKARGS="-L@libdir@" @SMPITOOLS_SH@ -list_set FFLAGS "-fpic" "-ff2c" "-fno-second-underscore" -list_set LINKARGS "-shared" "-lsimgrid" "-lm" "-lgfortran" +list_set FFLAGS @SMPI_Fortran_FLAGS@ +list_set LINKARGS "-shared" "-lsimgrid" @SMPI_Fortran_LIBS@ "-lm" list_set TMPFILES main_name=main diff --git a/tools/cmake/GCCFlags.cmake b/tools/cmake/GCCFlags.cmake index 01ece5c264..82c286ec8f 100644 --- a/tools/cmake/GCCFlags.cmake +++ b/tools/cmake/GCCFlags.cmake @@ -38,7 +38,12 @@ if(enable_compile_warnings) # the one specific to C but refused by C++ set(warnCFLAGS "${warnCFLAGS} -Wmissing-prototypes") - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wall") + if(CMAKE_Fotran_COMPILER_ID MATCHES "GCC|PGI") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wall") + endif() + if(CMAKE_Fotran_COMPILER_ID MATCHES "Intel") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -warn all") + endif() set(CMAKE_JAVA_COMPILE_FLAGS "-Xlint") endif() -- 2.20.1