Try to get around that.. Ugly for now.
if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
set(SMPI_Fortran_FLAGS "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
set(SMPI_Fortran_LIBS "\"-lgfortran\"")
+ set(SMPI_GFORTRAN 1)
elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
set(SMPI_Fortran_FLAGS "\"-fPIC\" \"-nofor-main\"")
set(SMPI_Fortran_LIBS "\"-lifcore\"")
+ set(SMPI_IFORT 1)
elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
set(SMPI_Fortran_FLAGS "\"-fPIC\"")
set(SMPI_Fortran_LIBS "")
+ set(SMPI_FLANG 1)
endif()
set(SMPI_FORTRAN 1)
#include <boost/tokenizer.hpp>
#include <boost/algorithm/string.hpp> /* trim_right / trim_left */
-#if defined(__INTEL_COMPILER) || defined(__ICC)
+#if SMPI_IFORT
extern "C" void for_rtl_init_ (int *, char **);
-#elif defined(__FLANG)
+#elif SMPI_FLANG
extern "C" void __io_set_argc(int);
extern "C" void __io_set_argv(char **);
-#elif defined(__GNUC__)
+#elif SMPI_GFORTRAN
extern "C" void _gfortran_set_args(int, char **);
#endif
argv[argc] = nullptr;
char ** argvptr=argv.get();
simgrid::smpi::ActorExt::init(&argc, &argvptr);
-#if defined(__INTEL_COMPILER) || defined(__ICC)
+#if SMPI_IFORT
for_rtl_init_ (&argc, argvptr);
-#elif defined(__FLANG)
+#elif SMPI_FLANG
__io_set_argc(argc);
__io_set_argv(argvptr);
-#elif defined(__GNUC__)
+#elif SMPI_GFORTRAN
_gfortran_set_args(argc, argvptr);
#endif
int res = entry_point(argc, argvptr);
/* SMPI variables */
/* SMPI enabled */
#cmakedefine01 HAVE_SMPI
-/* Fortran language is available for SMPI */
+/* Fortran language is available for SMPI, and which one */
#cmakedefine01 SMPI_FORTRAN
+#cmakedefine01 SMPI_GFORTRAN
+#cmakedefine01 SMPI_FLANG
+#cmakedefine01 SMPI_IFORT
/* We have mmap and objdump to handle privatization */
#cmakedefine01 HAVE_PRIVATIZATION
/* We have PAPI to fine-grain trace execution time */