libclamav/c++/GenList.pl
8449b08d
 #!/usr/bin/perl
 use strict;
 use warnings;
 
 my $path = $ARGV[0];
b8fd8f07
 `(cd $path/tools/llvm-config; make ENABLE_OPTIMIZED=0 llvm-config-perobjincl)`;
8449b08d
 
 my %compdeps;
5f20ee8c
 my @codegencomponents = ('x86codegen','powerpccodegen');
5b91dc34
 my @allnonsys = ('support','jit','fullcodegen',@codegencomponents);
8449b08d
 my @allcomponents= ('system',@allnonsys);
556eaf04
 my $allJIT="jit core lib/Support/SourceMgr.o lib/Analysis/PointerTracking.o lib/Transforms/Scalar/DCE.o lib/Analysis/IPA/CallGraph.o";
8449b08d
 for my $component (@allcomponents) {
     $/ = " ";
5b91dc34
     $component =~ s/^fullcodegen/codegen interpreter jit target/;
     if ($component =~ "^jit") {
8449b08d
 	open DEPS, "$path/tools/llvm-config/llvm-config-perobjincl --libnames $allJIT|";
     } else {
 	open DEPS, "$path/tools/llvm-config/llvm-config-perobjincl --libnames $component|";
     }
5b91dc34
     $component =~ s/^codegen.+/fullcodegen/;
8449b08d
     while (<DEPS>) {
 	chomp;
 	s/[\n\r]//;
 	next if (!/\.o$/);
         s/Support\/reg(.*).o/Support\/reg$1.c/;
 	s/\.o$/.cpp/;
 	$compdeps{$component}{$_}=1;
     }
     close DEPS or die "llvm-config failed";
 }
 
 # System is always linked in, so remove it from all else
 foreach my $systemcomp (keys %{$compdeps{'system'}}) {
     foreach my $component (@allnonsys) {
 	delete $compdeps{$component}{$systemcomp} if defined $compdeps{$component}{$systemcomp};
     }
 }
 
 # Eliminate components from codegen that are in JIT already.
 # and compute common codegen components.
 my %intersection = ();
 my %count = ();
 
 foreach my $codegen (@codegencomponents) {
     my %newdeps;
     for my $depobj (keys %{$compdeps{$codegen}}) {
 	next if $compdeps{'jit'}{$depobj};
 	$newdeps{$depobj}=1;
 	$count{$depobj}++;
     }
     $compdeps{$codegen} = \%newdeps;
 }
 foreach my $element (keys %count) {
     $intersection{$element}=1 if $count{$element} > 1;
 }
 
 foreach my $codegen (@codegencomponents) {
     foreach my $element (keys %intersection) {
        delete $compdeps{$codegen}{$element};
     }
     # Move the system and support objs required (even if not common) to codegen,
     # since these were already built for tblgen.
     foreach my $element (keys %{$compdeps{'system'}}) {
        next unless defined $compdeps{$codegen}{$element};
        delete $compdeps{$codegen}{$element};
        $intersection{$element}=1;
     }
     foreach my $element (keys %{$compdeps{'support'}}) {
        next unless defined $compdeps{$codegen}{$element};
        delete $compdeps{$codegen}{$element};
        $intersection{$element}=1;
     }
 }
 
 @allcomponents=(@allcomponents,'codegen');
 $compdeps{'codegen'}=\%intersection;
5b91dc34
 foreach my $comp (keys %{$compdeps{'codegen'}}) {
     delete $compdeps{'fullcodegen'}{$comp};
 }
 foreach my $comp (keys %{$compdeps{'jit'}}) {
     delete $compdeps{'fullcodegen'}{$comp};
 }
df476c79
 foreach my $comp (keys %{$compdeps{'support'}}) {
     $compdeps{'support_nodups'}{$comp}=1;
 }
 
 foreach my $comp (keys %{$compdeps{'jit'}}) {
     next unless defined $compdeps{'support_nodups'}{$comp};
     delete $compdeps{'support_nodups'}{$comp};
 }
 @allcomponents=(@allcomponents,'codegen','support_nodups');
8449b08d
 
 foreach my $comp (@allcomponents) {
     print "libllvm$comp"."_la_SOURCES=";
     foreach my $dep (sort keys %{$compdeps{$comp}}) {
 	print "\\\n\tllvm/$dep";
     }
     print "\n\n";
 }
5b91dc34