Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Allow users to have several source files (by overriding PRECIOUS_C_FILES in a makefil...
[simgrid.git] / tools / gras / stub_generator.c
index 5ae761e..2bd1608 100644 (file)
@@ -103,36 +103,30 @@ static void s_process_free(void *process)
   free(((s_process_t*)process)->host);
 }
 
-static int parse_argc = -1 ;
-static char **parse_argv = NULL;
+static s_process_t process;
 
 static void parse_process_init(void)
 {
-  parse_argc = 0 ;
-  parse_argv = NULL;
-  parse_argc++;
-  parse_argv = xbt_realloc(parse_argv, (parse_argc) * sizeof(char *));
-  parse_argv[(parse_argc) - 1] = xbt_strdup(A_surfxml_process_function);
+  xbt_dict_set(process_function_set, A_surfxml_process_function, NULL, NULL);
+  xbt_dict_set(machine_set, A_surfxml_process_host, NULL, NULL);
+  process.argc = 1 ;
+  process.argv = xbt_new(char*,1);
+  process.argv[0] = xbt_strdup(A_surfxml_process_function);
+  process.host=strdup(A_surfxml_process_host);
+  VERB1("Function: %s",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_surfxml_argument_value);
+  process.argc++;
+  process.argv = xbt_realloc(process.argv, (process.argc) * sizeof(char *));
+  process.argv[(process.argc) - 1] = xbt_strdup(A_surfxml_argument_value);
 }
 
 static void parse_process_finalize(void)
 {
-  s_process_t process;
-  void *p = (void *) 1234;
-
-  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_surfxml_process_host);
   xbt_dynar_push(process_list,&process);
+  VERB1("Function: %s",process.argv[0]);
 }
 
 static void generate_sim(char *project)
@@ -168,7 +162,7 @@ static void generate_sim(char *project)
                     "  /*  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" 
+                     "    fprintf(stderr, \"Usage: %s platform.xml deployment.xml [--gras-log=...]\\n\",argv[0]);\n" 
                      "    exit(1);\n" 
                      "  }\n"
                      "\n");
@@ -324,21 +318,23 @@ static void generate_makefile_local(char *project, char *deployment)
          "# Compilation will fail if you don't do so\n" 
          "GRAS_ROOT?= $(shell echo \"\\\"<<<< GRAS_ROOT undefined !!! >>>>\\\"\")\n\n"
          "# You can fiddle the following to make it fit your taste\n"
-         "CFLAGS = -O3 -w -g\n"
          "INCLUDES = -I$(GRAS_ROOT)/include\n"
+         "CFLAGS ?= -O3 -w -g\n"
          "LIBS_SIM = -lm  -L$(GRAS_ROOT)/lib/ -lsimgrid\n"
          "LIBS_RL = -lm  -L$(GRAS_ROOT)/lib/ -lgras\n"
          "LIBS = \n"
          "\n");
 
-  fprintf(OUT, "C_FILES = ");
+  fprintf(OUT, "PRECIOUS_C_FILES ?= %s.c\n", project);
+
+  fprintf(OUT, "GENERATED_C_FILES = ");
   fprintf(OUT, SIM_SOURCENAME" ",project);
   xbt_dict_foreach(process_function_set,cursor,key,data) {
     fprintf(OUT, RL_SOURCENAME " ",project, key);
   }
-  fprintf(OUT, "%s.c\n", project);
+  fprintf(OUT, "\n");
 
-  fprintf(OUT,"OBJ_FILES = \n");
+  fprintf(OUT,"OBJ_FILES = $(patsubst %%.c,%%.o,$(PRECIOUS_C_FILES))\n");
 
   fprintf(OUT, "BIN_FILES = ");
 
@@ -364,10 +360,10 @@ static void generate_makefile_local(char *project, char *deployment)
   fprintf(OUT, "\tgras_stub_generator %s %s >/dev/null\n", project, deployment);
 
   fprintf(OUT, "\n## Generate the binaries\n");
-  fprintf(OUT, SIM_BINARYNAME ": " SIM_OBJNAME " %s.o\n",project, project, project);
+  fprintf(OUT, SIM_BINARYNAME ": " SIM_OBJNAME " $(OBJ_FILES)\n",project, project);
   fprintf(OUT, "\t$(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS_SIM) $(LIBS) $(LDADD) -o $@ \n");
   xbt_dict_foreach(process_function_set,cursor,key,data) {
-    fprintf(OUT, RL_BINARYNAME " : " RL_OBJNAME " %s.o\n", project, key, project, key, project);
+    fprintf(OUT, RL_BINARYNAME " : " RL_OBJNAME " $(OBJ_FILES)\n", project, key, project, key);
     fprintf(OUT, "\t$(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS_RL) $(LIBS) $(LDADD) -o $@ \n");
   }  
   fprintf(OUT, 
@@ -381,7 +377,7 @@ static void generate_makefile_local(char *project, char *deployment)
    
   fprintf(OUT,
          "## Rules for tarballs and cleaning\n"
-         "DIST_FILES= $(C_FILES) "MAKEFILE_FILENAME_LOCAL" " /*MAKEFILE_FILENAME_REMOTE*/"\n"
+         "DIST_FILES= $(EXTRA_DIST) $(GENERATED_C_FILES) $(PRECIOUS_C_FILES) "MAKEFILE_FILENAME_LOCAL" " /*MAKEFILE_FILENAME_REMOTE*/"\n"
          "distdir: $(DIST_FILES)\n"
          "\trm -rf $(DISTDIR)\n"
          "\tmkdir -p $(DISTDIR)\n"