3 # gras_stub_generator - creates the main() to use a GRAS program
5 # Authors: Martin Quinson
6 # Copyright (C) 2003 the OURAGAN project.
8 # This program is free software; you can redistribute it and/or modify it
9 # under the terms of the license (GNU LGPL) which comes with this package.
14 }; # warnings not defined in 5.00503/sun4-solaris
18 die ($msg? "gras_stub_generator: $msg\n":"").
19 "gras_stub_generator: USAGE\n".
20 " gras_stub_generator project_name deployment_file\n"
23 my ($project,$deploy_file)=@ARGV;
25 $project && $deploy_file || usage();
29 open (DEPLOY, $deploy_file) || usage("Cannot open $deploy_file: $!");
33 /^\W*\w*\W*(\w*)/ || usage("$deploy_file:$linenum: Parse error");
37 my $warn="/***********\n * DO NOT EDIT! THIS FILE WERE AUTOMATICALLY GENERATED FROM $deploy_file BY gras_stub_generator\n ***********/\n";
40 # Generate the file for the simulator
43 open (OUT,">_${project}_simulator.c") || die "Cannot open _${project}_simulator,c: $!";
56 foreach (keys %process) { print OUT "int $_(int argc,char *argv[]);\n"; }
58 foreach (keys %process) { print OUT "int launch_$_(int argc,char *argv[]);\n"; }
59 print OUT "\n$warn\n";
61 foreach (keys %process) {
63 int launch_$_(int argc, char **argv) {
70 myargv=malloc((argc+1) * sizeof(char**));
71 for (i=0; i<argc; i++)
73 myargv[myargc++] = gras_log;
75 retcode = $_(myargc,myargv);
84 print OUT "\n$warn\n";
87 int main (int argc,char *argv[]) {
90 /* Save the gras-log argument of real command line to pass it to all processes */
91 for (i=1; i<argc; i++) {
92 if (!strncmp(argv[i],"--gras-log=",strlen("--gras-log="))) {
94 char *tmp=malloc(strlen(gras_log)+strlen(argv[i])+2);
95 sprintf(tmp,"%s %s",gras_log, argv[i]);
99 gras_log = strdup(argv[i]);
101 for (j=i+1; j<argc; j++) {
106 i--; /* compensate effect of next loop incrementation */
111 fprintf(stderr, "Usage: %s platform_file application_description.txt [--gras-log=...]\\n",argv[0]);
115 /* Simulation setup */
117 MSG_set_verbosity(MSG_SILENT);
118 MSG_set_channel_number(10); // GRAS_MAX_CHANNEL hardcoded since Alvin killed its definition
119 MSG_create_environment(argv[1]);
121 /* Application deployment */
124 foreach (keys %process) {
125 print OUT " MSG_function_register(\"$_\", launch_$_);\n";
129 MSG_launch_application(argv[2]);
131 /* Run the simulation */
134 /* cleanup the place */
143 close OUT || die "Cannot write _${project}_simulator,c: $!";
146 # Generate the files for the real life
148 foreach my $pname (keys %process) {
149 open (OUT,">_${project}_$pname.c") || die "Cannot open _${project}_$pname,c: $!";
157 int $pname(int argc, char *argv[]);
161 int main(int argc, char *argv[]){
164 errcode=$pname(argc,argv);
172 close OUT || die "Cannot write _${project}_$pname,c: $!";
176 # Outputs the Makefile.am snippet
179 print ">>> Files for project '$project' successfully generated.\n";
180 print ">>> Add (and edit) the following to you Makefile.am:\n\n";
182 print "# AUTOMAKE variable definition\n";
183 print "INCLUDES= \@CFLAGS_GRAS\@ \@CFLAGS_XML\@ \@CFLAGS_SimGrid\@\n\n";
184 print "PROGRAMS=${project}_simulator ";
186 foreach (keys %process) {
187 print "${project}_$_ ";
189 print "\n\n${project}_simulator_SOURCES=\t_${project}_simulator.c $project.c\n";
190 foreach (keys %process) {
191 print "${project}_${_}_SOURCES=\t_${project}_${_}.c $project.c\n";
194 print "\n\n${project}_simulator_LDADD=\tpath/to/libgrassg.a \@LIBS_SimGrid\@ \@LIBS_XML\@\n";
195 foreach (keys %process) {
196 print "${project}_${_}_LDADD=\tpath/to/libgrasrl.a\n";
199 print "\n# cleanup temps\n";
200 print "CLEANFILES= _${project}_simulator.c ";
201 foreach (keys %process) {
202 print "_${project}_$_.c ";
206 print "\n# generate temps\n";
207 # A rule to generate the source file each time the deployment file changes
208 foreach (keys %process) {
209 print "_${project}_$_.c ";
211 print "_${project}_simulator.c: $deploy_file\n";
212 print "\tgras_stub_generator $project $deploy_file >/dev/null\n";