Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Search typedefs of pointer to function where they now live
[simgrid.git] / tools / gras / stub_generator.c
index fde4e0f..c2ae9d2 100644 (file)
@@ -8,11 +8,10 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include"xbt/sysdep.h"
-#include"xbt/dict.h"
-#include"xbt/dynar.h"
-#include"xbt/error.h"
-#include "surf/surf_parse.h"
+#include "xbt/sysdep.h"
+#include "xbt/function_types.h"
+#include "xbt/log.h"
+#include "surf/surfxml_parse.h"
 #include "surf/surf.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(stubgen,gras,"Stub generator");
@@ -67,23 +66,6 @@ const char *SIM_PREEMBULE =
 "  return retcode;\n" \
 "}\n"
 
-#define SIM_MAIN_PREEMBULE \
-"int main (int argc,char *argv[]) {\n" \
-"  int i,j;\n" \
-"\n" \
-"  /*  Simulation setup */\n" \
-"  MSG_global_init_args(&argc,argv);\n" \
-"  if (argc != 3) {\n" \
-"    fprintf(stderr, \"Usage: %%s platform_file application_description.txt [--gras-log=...]\\n\",argv[0]);\n" \
-"    exit(1);\n" \
-"  }\n" \
-"\n" \
-"  MSG_paje_output(\"%s.trace\");\n" \
-"  MSG_set_channel_number(10); /* Using at most 10 channel (ports) per host. Change it here if needed */\n" \
-"  MSG_create_environment(argv[1]);\n" \
-"\n" \
-"  /*  Application deployment */\n"
-
 const char *SIM_MAIN_POSTEMBULE = "\n"
 "\n"
 "  MSG_launch_application(argv[2]);\n"
@@ -130,14 +112,14 @@ static void parse_process_init(void)
   parse_argv = NULL;
   parse_argc++;
   parse_argv = xbt_realloc(parse_argv, (parse_argc) * sizeof(char *));
-  parse_argv[(parse_argc) - 1] = xbt_strdup(A_process_function);
+  parse_argv[(parse_argc) - 1] = xbt_strdup(A_surfxml_process_function);
 }
 
 static void parse_argument(void)
 {
   parse_argc++;
   parse_argv = xbt_realloc(parse_argv, (parse_argc) * sizeof(char *));
-  parse_argv[(parse_argc) - 1] = xbt_strdup(A_argument_value);
+  parse_argv[(parse_argc) - 1] = xbt_strdup(A_surfxml_argument_value);
 }
 
 static void parse_process_finalize(void)
@@ -145,11 +127,11 @@ static void parse_process_finalize(void)
   s_process_t process;
   void *p = (void *) 1234;
 
-  xbt_dict_set(process_function_set, A_process_function, p, NULL);
-  xbt_dict_set(machine_set, A_process_host, p, NULL);
+  xbt_dict_set(process_function_set, A_surfxml_process_function, p, NULL);
+  xbt_dict_set(machine_set, A_surfxml_process_host, p, NULL);
   process.argc=parse_argc;
   process.argv=parse_argv;
-  process.host=strdup(A_process_host);
+  process.host=strdup(A_surfxml_process_host);
   xbt_dynar_push(process_list,&process);
 }
 
@@ -181,7 +163,22 @@ static void generate_sim(char *project)
   }
   fprintf(OUT, "\n%s\n",warning);
 
-  fprintf(OUT, SIM_MAIN_PREEMBULE, project);
+  fprintf(OUT, "%s", "int main (int argc,char *argv[]) {\n" 
+                     "\n" 
+                    "  /*  Simulation setup */\n" 
+                     "  MSG_global_init(&argc,argv);\n" 
+                     "  if (argc != 3) {\n" 
+                     "    fprintf(stderr, \"Usage: %s platform_file application_description.txt [--gras-log=...]\\n\",argv[0]);\n" 
+                     "    exit(1);\n" 
+                     "  }\n"
+                     "\n");
+   fprintf(OUT, 
+          "  MSG_paje_output(\"%s.trace\");\n" 
+          "  MSG_set_channel_number(XBT_MAX_CHANNEL); /* Using at most 10 channel (ports) per host. Change it here if needed */\n" 
+          "  MSG_create_environment(argv[1]);\n" 
+          "\n" 
+          "  /*  Application deployment */\n",
+          project);
   xbt_dict_foreach(process_function_set,cursor,key,data) {
     fprintf(OUT,"  MSG_function_register(\"%s\", launch_%s);\n",key,key);
   }
@@ -316,7 +313,7 @@ static void generate_makefile_local(char *project, char *deployment)
   fprintf(OUT, 
          "DISTDIR=gras-$(PROJECT_NAME)\n\n"
          "GRAS_ROOT?= $(shell echo \"\\\"<<<< GRAS_ROOT undefined !!! >>>>\\\"\")\n"
-         "CFLAGS = -O3 -w\n"
+         "CFLAGS = -O3 -w -g\n"
          "INCLUDES = -I$(GRAS_ROOT)/include\n"
          "LIBS_SIM = -lm  -L$(GRAS_ROOT)/lib/ -lsimgrid\n"
          "LIBS_RL = -lm  -L$(GRAS_ROOT)/lib/ -lgras\n"
@@ -366,15 +363,22 @@ static void generate_makefile_local(char *project, char *deployment)
          "\n"
          "dist: clean distdir\n"
          "\ttar c $(DISTDIR) | gzip -c > $(DISTDIR).tar.gz\n"
-         "\n"
+         "\n", project, project);
+
+  fprintf(OUT,
          "clean:\n"
-         "\trm -f $(BIN_FILES) $(OBJ_FILES) *~\n"
+         "\trm -f $(BIN_FILES) $(OBJ_FILES) *~ %s.o " SIM_OBJNAME, project, project);
+  xbt_dict_foreach(process_function_set,cursor,key,data) {
+     fprintf(OUT, " " RL_OBJNAME, project, key);
+  }
+  fprintf(OUT,   
+         "\n"
          "\trm -rf $(DISTDIR)\n"
          "\n"
          ".SUFFIXES:\n"
          ".PHONY : clean\n"
-         "\n", project, project);
-
+         "\n");
+   
   fprintf(OUT, "############ REMOTE COMPILING #########\n");
   fprintf(OUT, 
          "MACHINES ?= ");
@@ -434,9 +438,6 @@ static void generate_makefile_local(char *project, char *deployment)
 
 static void generate_makefile_remote(char *project, char *deployment)
 {
-  xbt_dict_cursor_t cursor=NULL;
-  char *key = NULL;
-  void *data = NULL;
   char *filename = NULL;
   FILE *OUT = NULL;
 
@@ -560,24 +561,28 @@ int main(int argc, char *argv[])
 {
   char *project_name = NULL;
   char *deployment_file = NULL;
-
+  int i;
+   
   surf_init(&argc, argv);
 
-  xbt_assert1((argc ==3),"Usage: %s project_name deployment_file\n",argv[0]);
+  xbt_assert1((argc >= 3),"Usage: %s project_name deployment_file [deployment_file...]\n",argv[0]);
 
   project_name = argv[1];
-  deployment_file = argv[2];
 
   process_function_set = xbt_dict_new();
   process_list = xbt_dynar_new(sizeof(s_process_t),s_process_free);
   machine_set = xbt_dict_new();
 
-  STag_process_fun = parse_process_init;
-  ETag_argument_fun = parse_argument;
-  ETag_process_fun = parse_process_finalize;
-  surf_parse_open(deployment_file);
-  if(surf_parse()) xbt_assert1(0,"Parse error in %s",deployment_file);
-  surf_parse_close();
+  STag_surfxml_process_fun = parse_process_init;
+  ETag_surfxml_argument_fun = parse_argument;
+  ETag_surfxml_process_fun = parse_process_finalize;
+  for(i=2; i<argc; i++) {
+     deployment_file = argv[i];
+     surf_parse_open(deployment_file);
+     if(surf_parse()) xbt_assert1(0,"Parse error in %s",deployment_file);
+     surf_parse_close();
+  }
+
 
   warning = xbt_new(char,strlen(WARN)+strlen(deployment_file)+10);
   sprintf(warning,WARN,deployment_file);
@@ -603,6 +608,6 @@ int main(int argc, char *argv[])
   generate_deployment(project_name, deployment_file);
 
   free(warning);
-  surf_finalize();
+  surf_exit();
   return 0;
 }