Mercurial > hg > GearsTemplate
view src/parallel_execution/generate_context.pl @ 208:b6ffdd99e525
fix generate_context
author | mir3636 |
---|---|
date | Tue, 20 Dec 2016 19:39:51 +0900 (2016-12-20) |
parents | 42dbe54332a0 |
children | ba56dab79dc4 |
line wrap: on
line source
#!/usr/bin/perl # CodeGear # # *.c # __code taskManager_stub(struct Context* context) { # # context.h # C_taskManager, # # context.c # extern __code taskManager_stub(struct Context*); # # context->code[C_taskManager] = taskManager_stub; # # DataGear # # context.h # struct Worker { # int id; # struct Context* contexts; # enum Code execute; # enum Code taskSend; # enum Code taskRecive; # enum Code shutdown; # struct Queue* tasks; # } Worker; # # typedef struct Worker Worker; # D_Worker, # # context.c # ALLOC_DATA(context, Worker); system "rm -rf c"; system "mkdir c"; while (<*.c test/*.c>) { next if (/context.c/); &getStubInfo($_); } &generateContext(); sub getStubInfo { my ($filename) = @_; open my $fd,"<",$filename or die("can't open $filename $!"); while (<$fd>) { if (/^__code (\w+)_stub\(struct Context\* context\)/ or /^\s__code (\w+)_stub\(struct Context\* context\)/) { $codeGear{$1} = $filename; } } open my $cx,"<","context.h" or die("can't open context.h $!"); while (<$cx>) { if (! $inUnionData) { if ( /^union Data/) { $inUnionData = 1; } next; } last if (/union Data end/); if (/struct (\w+) \{/) { $dataGear{$1} = $1; } } } sub generateContext { open my $fd,">","c/extern.h" or die("can't open c/extern.h $!"); for my $code ( sort keys %codeGear ) { print $fd "extern __code ${code}_stub(struct Context*);\n"; } print $fd "\n"; open my $fd,">","c/enumCode.h" or die("can't open c/enumCode.h $!"); print $fd "enum Code {\n"; for my $code ( sort keys %codeGear ) { print $fd " C_${code},\n"; } print $fd "};\n"; open my $fd,">","c/codeGearInit.c" or die("can't open c/codeGearInit.c $!"); for my $code ( sort keys %codeGear ) { print $fd " context->code[C_${code}] = ${code}_stub;\n"; } open my $fd,">","c/enumData.h" or die("can't open c/enumData.h $!"); print $fd "enum DataType {\n"; for my $data ( sort keys %dataGear ) { print $fd " D_${data},\n"; } print $fd "};\n\n"; open my $fd,">","c/typedefData.h" or die("can't open c/typedefData.h $!"); for my $data ( sort keys %dataGear ) { print $fd "typedef struct ${data} ${data};\n"; } open my $fd,">","c/dataGearInit.c" or die("can't open c/dataGearInit.c $!"); for my $data ( sort keys %dataGear ) { print $fd " ALLOC_DATA(context, ${data});\n"; } } # end