Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Huge hack for call of smpi_simulated_main.
authornavarro <pierre.navarro@imag.fr>
Wed, 24 Oct 2012 16:04:21 +0000 (09:04 -0700)
committernavarro <pierre.navarro@imag.fr>
Thu, 25 Oct 2012 17:21:56 +0000 (10:21 -0700)
-> Fix WIN32 compilation with smpi

include/smpi/smpi.h
include/smpi/smpi_main.h [new file with mode: 0644]
src/smpi/smpi_global.c

index 07dd2b0..6a4bd09 100644 (file)
@@ -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 (file)
index 0000000..0e5d259
--- /dev/null
@@ -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
index a6ca1dc..3b0d652 100644 (file)
@@ -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 <windows.h>
-
 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();