Mercurial > hg > Gears > Gears
changeset 671:dbefe3a266ec
use warnings at generate_context.pl
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 19 Aug 2020 09:20:43 +0900 |
parents | f8b98e469256 |
children | ea992fc94130 |
files | src/parallel_execution/generate_context.pl |
diffstat | 1 files changed, 65 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/src/parallel_execution/generate_context.pl Wed Aug 19 08:59:07 2020 +0900 +++ b/src/parallel_execution/generate_context.pl Wed Aug 19 09:20:43 2020 +0900 @@ -2,26 +2,27 @@ use Getopt::Long; use strict; +use warnings; -# +# # generrate Gears OS context heaader and initializer from CbC sources # # CodeGear -# +# # get stub information from # *.c # __code taskManager_stub(struct Context* context) { -# +# # generate CodeGear indexn in context.h # C_taskManager, -# +# # generate CodeGear stub reference in context.h # extern __code taskManager_stub(struct Context*); -# +# # generate CodeGear stub reference in $name-context.h for each module # context->code[C_taskManager] = taskManager_stub; -# +# # DataGear -# +# # get DataGear information from context.h # struct Worker { # int id; @@ -32,11 +33,11 @@ # enum Code shutdown; # struct Queue* tasks; # } Worker; -# +# # generate typedefs and DataGear index in context.h # typedef struct Worker Worker; # D_Worker, -# +# # generate DataGear allocator in context.h # ALLOC_DATA(context, Worker); # @@ -168,6 +169,16 @@ $codeGear{"exit_code"} = "$ddir/$name-context.c"; $mCodeGear{"start_code"} = "$ddir/$name-context.c"; $mCodeGear{"exit_code"} = "$ddir/$name-context.c"; + + generateExtern(); + generateEnumCode(); + generateContextCsource(); + generateEnumData(); + generateTypedefData(); + generateDataGearInit(); +} + +sub generateExtern { open my $fd,">","$ddir/extern.h" or die("can't open $ddir/extern.h $!"); for my $code ( sort keys %codeGear ) { print $fd "extern __code ${code}_stub(struct Context*);\n"; @@ -177,15 +188,24 @@ print $fd "extern ${interface}* create${impl}($constructorArgs);\n"; } print $fd "\n"; + close $fd; +} +sub generateEnumCode { open my $fd,">","$ddir/enumCode.h" or die("can't open $ddir/enumCode.h $!"); print $fd "enum Code {\n"; for my $code ( sort keys %codeGear ) { print $fd " C_${code},\n"; } print $fd "};\n"; - - my $code_init = ''; + + close $fd; +} + + +sub generateContextCsource { + open my $fd,">","$ddir/$name-context.c" or die("can't open $ddir/$name-context.c $!"); + my $code_init = ''; for my $code ( sort keys %mCodeGear ) { $code_init .= " ${context_name}->code[C_${code}] = ${code}_stub;\n"; } @@ -203,7 +223,7 @@ $context_c .= << "EOFEOF"; #include <stdlib.h> EOFEOF -} + } $context_c .= << "EOFEOF"; @@ -223,11 +243,9 @@ ${context_name}\->dataNum = $data_num; } EOFEOF - - open my $fd,">","$ddir/$name-context.c" or die("can't open $ddir/$name-context.c $!"); print $fd $context_c; -my $meta_call = <<"EOFEOF"; + my $meta_call = <<"EOFEOF"; __code meta(struct Context* ${context_name}, enum Code next) { // printf("meta %d\\n",next); goto (${context_name}\->code[next])(${context_name}); @@ -248,8 +266,8 @@ } EOFEOF -if ($project->{name} eq "gears") { - $meta_call .= <<"EOFEOF"; + if ($project->{name} eq "gears") { + $meta_call .= <<"EOFEOF"; __code exit_code(struct Context* ${context_name}) { free(${context_name}->code); free(${context_name}->data); @@ -258,7 +276,7 @@ } EOFEOF -} else { + } else { $meta_call .= <<"EOFEOF"; __code exit_code(struct Context* ${context_name}) { @@ -268,37 +286,48 @@ goto exit_code(cbc_context); } EOFEOF -} + } $meta_call .= <<"EOFEOF"; __code exit_code_stub(struct Context* ${context_name}) { goto exit_code(${context_name}); -} +} // end context_c EOFEOF -print $fd $meta_call; - -open my $fd,">","$ddir/enumData.h" or die("can't open $ddir/enumData.h $!"); -print $fd "enum DataType {\n"; -print $fd " D_Code,\n"; -for my $data ( sort keys %dataGear ) { - print $fd " D_${data},\n"; + print $fd $meta_call; + close $fd; } -print $fd "};\n\n"; -open my $fd,">","$ddir/typedefData.h" or die("can't open $ddir/typedefData.h $!"); -for my $data ( sort keys %dataGear ) { - if ($dataGear{$data} eq 'struct') { - print $fd "typedef struct ${data} ${data};\n"; +sub generateEnumData { + open my $fd,">","$ddir/enumData.h" or die("can't open $ddir/enumData.h $!"); + print $fd "enum DataType {\n"; + print $fd " D_Code,\n"; + for my $data ( sort keys %dataGear ) { + print $fd " D_${data},\n"; } + print $fd "};\n\n"; + close $fd; } -open my $fd,">","$ddir/dataGearInit.c" or die("can't open $ddir/dataGearInit.c $!"); -for my $data ( sort keys %dataGear ) { - print $fd " ALLOC_DATA(${context_name}, ${data});\n"; -} +sub generateTypedefData { + open my $fd,">","$ddir/typedefData.h" or die("can't open $ddir/typedefData.h $!"); + for my $data ( sort keys %dataGear ) { + if ($dataGear{$data} eq 'struct') { + print $fd "typedef struct ${data} ${data};\n"; + } + } + close $fd; } +sub generateDataGearInit { + open my $fd,">","$ddir/dataGearInit.c" or die("can't open $ddir/dataGearInit.c $!"); + for my $data ( sort keys %dataGear ) { + print $fd " ALLOC_DATA(${context_name}, ${data});\n"; + } + close $fd; +} + + # end