From 2e54bf19d3fefb2bd6fbaba11fff0ea3e6f82f0e Mon Sep 17 00:00:00 2001 From: navarro Date: Wed, 24 Oct 2012 09:04:21 -0700 Subject: [PATCH] Huge hack for call of smpi_simulated_main. -> Fix WIN32 compilation with smpi --- include/smpi/smpi.h | 3 +-- include/smpi/smpi_main.h | 6 ++++++ src/smpi/smpi_global.c | 33 ++++++++------------------------- 3 files changed, 15 insertions(+), 27 deletions(-) create mode 100644 include/smpi/smpi_main.h diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 07dd2b08fc..6a4bd096ff 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -454,7 +454,6 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Pcontrol, (const int level )); //FIXME: End of all the not yet implemented stuff // smpi functions -XBT_IMPORT_NO_EXPORT(int) smpi_simulated_main(int argc, char **argv); XBT_PUBLIC(MPI_Comm) smpi_process_comm_self(void); /* XBT_PUBLIC(void) smpi_exit(int); @@ -495,7 +494,7 @@ XBT_PUBLIC(void*) smpi_shared_set_call(const char* func, const char* input, void : smpi_shared_set_call(#func, input, func(__VA_ARGS__))) /* Fortran specific stuff */ -XBT_PUBLIC(int) MAIN__(void); +XBT_PUBLIC(int) MAIN__(int (*realmain) (int argc, char *argv[]),int *argc, char *argv[]); XBT_PUBLIC(int) smpi_process_index(void); diff --git a/include/smpi/smpi_main.h b/include/smpi/smpi_main.h new file mode 100644 index 0000000000..0e5d259aa5 --- /dev/null +++ b/include/smpi/smpi_main.h @@ -0,0 +1,6 @@ +#define main smpi_simulated_main(int argc, char **argv);\ +int main(int argc, char **argv){\ +MAIN__(&smpi_simulated_main,&argc,argv);\ +return 0;\ +}\ +int smpi_simulated_main diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c index a6ca1dc21a..3b0d6527b9 100644 --- a/src/smpi/smpi_global.c +++ b/src/smpi/smpi_global.c @@ -282,33 +282,16 @@ void smpi_global_destroy(void) /* Fortran specific stuff */ /* With smpicc, the following weak symbols are used */ /* With smpiff, the following weak symbols are replaced by those in libf2c */ -int __attribute__((weak)) xargc; -char** __attribute__((weak)) xargv; - -int __attribute__((weak)) main(int argc, char** argv) { - xargc = argc; - xargv = argv; - return MAIN__(); -} - -#ifdef WIN32 -#include - int __attribute__((weak)) smpi_simulated_main(int argc, char** argv) { xbt_die("Should not be in this smpi_simulated_main"); return 1; } -/* TODO FOR WIN32 */ -/* Dummy prototype to make gcc happy */ -int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE hInst2,LPSTR lpstr01,int nCmdShow) -{ - return MAIN__(); +int __attribute__((weak)) main(int argc, char** argv) { + return MAIN__(&smpi_simulated_main,argc,argv); } -#endif - -int MAIN__(void) +int MAIN__(int (*realmain) (int argc, char *argv[]),int *argc, char *argv[]) { srand(SMPI_RAND_SEED); @@ -332,20 +315,20 @@ int MAIN__(void) XBT_LOG_CONNECT(smpi_replay); #ifdef HAVE_TRACING - TRACE_global_init(&xargc, xargv); + TRACE_global_init(argc, argv); #endif - SIMIX_global_init(&xargc, xargv); + SIMIX_global_init(argc, argv); #ifdef HAVE_TRACING TRACE_start(); #endif // parse the platform file: get the host list - SIMIX_create_environment(xargv[1]); + SIMIX_create_environment(argv[1]); - SIMIX_function_register_default(smpi_simulated_main); - SIMIX_launch_application(xargv[2]); + SIMIX_function_register_default(realmain); + SIMIX_launch_application(argv[2]); smpi_global_init(); -- 2.20.1