#include <boost/tokenizer.hpp>
#include <boost/algorithm/string.hpp> /* trim_right / trim_left */
+#if defined(__GNUC__)
+ extern "C" void _gfortran_set_args(int, char **);
+#elif defined(__FLANG)
+ extern "C" void __io_set_argc(int);
+ extern "C" void __io_set_argv(char **);
+#elif defined(__INTEL_COMPILER) || defined(__ICC)
+ extern "C" void for_rtl_init_ (int *, char **);
+#endif
+
#ifndef RTLD_DEEPBIND
/* RTLD_DEEPBIND is a bad idea of GNU ld that obviously does not exist on other platforms
* See https://www.akkadia.org/drepper/dsohowto.pdf
argv[i] = args[i].empty() ? noarg : &args[i].front();
argv[argc] = nullptr;
char ** argvptr=argv.get();
-
simgrid::smpi::ActorExt::init(&argc, &argvptr);
-
+#if defined(__GNUC__)
+ _gfortran_set_args(argc, argvptr);
+#elif defined(__FLANG)
+ __io_set_argc(argc);
+ __io_set_argv(argvptr);
+#elif defined(__INTEL_COMPILER) || defined(__ICC)
+ for_rtl_init_ (&argc, argvptr);
+#endif
int res = entry_point(argc, argvptr);
if (res != 0){
XBT_WARN("SMPI process did not return 0. Return value : %d", res);
PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/simgrid)
install(TARGETS smpimain # install that binary without breaking the rpath on Mac
RUNTIME DESTINATION lib/simgrid)
+
+ if(SMPI_FORTRAN)
+ if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
+ SET(SIMGRID_DEP "${SIMGRID_DEP} -lgfortran")
+ elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
+ SET(SIMGRID_DEP "${SIMGRID_DEP} -lifcore")
+ elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang")
+ SET(SIMGRID_DEP "${SIMGRID_DEP} -lflang")
+ endif()
+ endif()
+
endif()
if(enable_smpi AND APPLE)