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.
17 fail ($msg? "gras_stub_generator: $msg\n":"").
18 "gras_stub_generator: USAGE\n".
19 " gras_stub_generator project_name deployment_file\n"
22 my ($project,$deploy_file)=@ARGV;
24 $project && $deploy_file || usage();
28 open (DEPLOY, $deploy_file) || usage("Cannot open $deploy_file: $!");
32 /^\W*\w*\W*(\w*)/ || usage("$deploy_file:$linenum: Parse error");
36 my $warn="/***********\n * DO NOT EDIT! THIS FILE WERE AUTOMATICALLY GENERATED FROM $deploy_file BY gras_stub_generator\n ***********/\n";
39 # Generate the file for the simulator
42 open (OUT,">_${project}_simulator.c") || die "Cannot open _${project}_simulator,c: $!";
53 foreach (keys %process) { print OUT "int $_(int argc,char *argv[]);\n"; }
55 foreach (keys %process) { print OUT "int launch_$_(int argc,char *argv[]);\n"; }
56 print OUT "\n$warn\n";
58 foreach (keys %process) {
60 int launch_$_(int argc, char *argv[]) {
62 if (gras_process_init()) exit(1);
64 if (gras_process_exit()) exit(1);
72 print OUT "\n$warn\n";
75 int main (int argc,char *argv[]) {
78 fprintf(stderr, "Usage: %s platform_file application_description.txt [extra args]\\n",argv[0]);
83 gras_init(&argc, argv);
85 /* Simulation setup */
87 MSG_set_verbosity(MSG_SILENT);
88 MSG_set_channel_number(GRAS_MAX_CHANNEL);
89 MSG_create_environment(argv[1]);
91 /* Application deployment */
94 foreach (keys %process) {
95 print OUT " MSG_function_register(\"$_\", launch_$_);\n";
99 MSG_launch_application(argv[2]);
101 /* Run the simulation */
109 close OUT || die "Cannot write _${project}_simulator,c: $!";
112 # Generate the files for the real life
114 foreach my $pname (keys %process) {
115 open (OUT,">_${project}_$pname.c") || die "Cannot open _${project}_$pname,c: $!";
123 int $pname(int argc, char *argv[]);
127 int main(int argc, char *argv[]){
130 gras_init(&argc,argv);
132 errcode=$pname(argc,argv);
142 close OUT || die "Cannot write _${project}_$pname,c: $!";
146 # Outputs the Makefile.am snippet
149 print ">>> Files for project '$project' successfully generated.\n";
150 print ">>> Add (and edit) the following to you Makefile.am:\n\n";
152 print "# AUTOMAKE variable definition\n";
153 print "INCLUDES= \@CFLAGS_GRAS\@ \@CFLAGS_XML\@ \@CFLAGS_SimGrid\@\n\n";
154 print "PROGRAMS=${project}_simulator ";
156 foreach (keys %process) {
157 print "${project}_$_ ";
159 print "\n\n${project}_simulator_SOURCES=\t_${project}_simulator.c $project.c\n";
160 foreach (keys %process) {
161 print "${project}_${_}_SOURCES=\t_${project}_${_}.c $project.c\n";
164 print "\n\n${project}_simulator_LDADD=\tpath/to/libgrassg.a \@LIBS_SimGrid\@ \@LIBS_XML\@\n";
165 foreach (keys %process) {
166 print "${project}_${_}_LDADD=\tpath/to/libgrasrl.a\n";
169 print "\n# cleanup temps\n";
170 print "CLEANFILES= _${project}_simulator.c ";
171 foreach (keys %process) {
172 print "_${project}_$_.c ";
176 print "\n# generate temps\n";
177 # A rule to generate the source file each time the deployment file changes
178 foreach (keys %process) {
179 print "_${project}_$_.c ";
181 print "_${project}_simulator.c: $deploy_file\n";
182 print "\tgras_stub_generator $project $deploy_file >/dev/null\n";