# HG changeset patch # User anatofuz # Date 1574678237 -32400 # Node ID f78ad1f8952453b3747a16ada3f2c2343fcd1a7b # Parent c86da02a73bf0ecbad24c8865fe0b75cb547e47e add static genmode diff -r c86da02a73bf -r f78ad1f89524 src/parallel_execution/auto_generate_context.pl --- a/src/parallel_execution/auto_generate_context.pl Mon Nov 25 17:06:09 2019 +0900 +++ b/src/parallel_execution/auto_generate_context.pl Mon Nov 25 19:37:17 2019 +0900 @@ -8,9 +8,25 @@ use Getopt::Std; my %opt; getopts("w" => \%opt); -my @cbc_files = ; -chomp @cbc_files; + +my $h = find_target_from_camke_list(); + +my $target = shift; +unless (exists $h->{$target}) { + map { print "$_\n" } keys %$h; + print "invalid target name\n"; + exit 0; +} +my @cbc_files; + +for my $file_name (split / /, $h->{$target}) { + if ($file_name =~ /^\s*$/) { + next; + } + chomp $file_name; + push(@cbc_files,$file_name); +} my $output = $opt{w} ? "$FindBin::Bin/context.h" : "stdout"; my $gears = Gears::Context->new(compile_sources => \@cbc_files, find_root => $FindBin::Bin, output => $output); @@ -22,14 +38,50 @@ my $tree = $gears->createImplTree_from_header($dg2path); $gears->tree2create_context_h($tree); -# -__DATA__ -/Users/anatofuz/src/firefly/hg/Gears/src/parallel_execution/examples/calc/calc.cbc -/Users/anatofuz/src/firefly/hg/Gears/src/parallel_execution/examples/calc/add.cbc -/Users/anatofuz/src/firefly/hg/Gears/src/parallel_execution/examples/calc/mult.cbc -/Users/anatofuz/src/firefly/hg/Gears/src/parallel_execution/examples/calc/initIntegerDataGears.cbc -/Users/anatofuz/src/firefly/hg/Gears/src/parallel_execution/CPUWorker.cbc -/Users/anatofuz/src/firefly/hg/Gears/src/parallel_execution/TaskManagerImpl.cbc -/Users/anatofuz/src/firefly/hg/Gears/src/parallel_execution/SingleLinkedQueue.cbc -/Users/anatofuz/src/firefly/hg/Gears/src/parallel_execution/SynchronizedQueue.cbc -/Users/anatofuz/src/firefly/hg/Gears/src/parallel_execution/AtomicReference.cbc + +sub find_target_from_camke_list { + open my $fh, '<', "CMakeLists.txt"; + my $in_gears = 0; + my $target; + my %res; + + while (my $line = <$fh>) { + if ($in_gears == 1) { + $in_gears++; + next; + } + + if ($in_gears == 2) { + $line =~ s/\s*(\w+)\s*/$1/g; + $target = $line; + chomp $target; + $in_gears++; + next; + } + + if ($in_gears == 3) { + $in_gears++; + next; + } + + if ($in_gears == 4) { + $res{$target} = $line; + chomp $res{$target}; + $in_gears = 0; + next; + } + + if ($line =~ /^GearsCommand\(/) { + $in_gears++; + } + + } + return \%res; +} + +#GearsCommand( +# TARGET +# rbtree +# SOURCES +# SingleLinkedQueue.cbc test/rbTree_test.cbc RedBlackTree.cbc SingleLinkedStack.cbc compare.c +#)