| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | #!/usr/bin/perl## Extract dependency files from a Quartus .qsf file#use strict;my($infile,$project) = @ARGV;my %map_deps = ($infile);my %asm_deps = ();my %cof_list = ();my $output_dir = 'output_files';open(my $in, '<', $infile) or die;while (defined(my $l = <$in>)) {    chomp $l;    next unless ($l =~ /^\s*set_global_assignment\s+\-name\s+(\w+)\s+\"?(.*?)\"?\s*$/);    my $type = $1;    my $name = $2;    if ($type =~ /^project_output_directory$/i) {	$output_dir = $name;	next;    }        next if ($type !~ /_file$/i || $type =~ /^generate_/i);        $name =~ s/^quartus_\w+://;    $name =~ s/\s-.*$//;    if ($name =~ /\.cof$/i) {	$cof_list{$name}++;    } elsif ($type =~ /^(signaltap_file|use_signaltap_file|sld_file)$/i) {	# Skip    } elsif ($type =~ /^(mif|hex)_file$/i) {	$asm_deps{$name}++;    } else {	$map_deps{$name}++;    }}close($in);sub print_deps($%) {    my($target,%deps) = @_;    print "\n", $target, " :";    foreach my $dep (sort keys(%deps)) {	print " \\\n\t", $dep;    }    print "\n";}my $map_target = "$output_dir/$project.map.rpt";print_deps($map_target, %map_deps);my $asm_target = "$output_dir/$project.mif_update.rpt";print_deps($asm_target, %asm_deps);exit 0;
 |