130 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #!/usr/bin/perl
 | |
| # filename:          update_diamond.pl
 | |
| # created by:        Corthay Francois & Zahno Silvan & Amand Axel
 | |
| #
 | |
| #-------------------------------------------------------------------------------
 | |
| #
 | |
| # Description:
 | |
| #   Updates the file references in the .ldf Lattice project file
 | |
| #   and launches the Diamond project manager
 | |
| #   Help Parameter : <?>
 | |
| #   Parameter : update_diamond.pl <Diamond File Spec> <VHDL File Spec> <LPF File Spec>
 | |
| #-------------------------------------------------------------------------------
 | |
| #
 | |
| # History:
 | |
| #   V0.1 : cof 12.2013 -- Initial release
 | |
| #   V0.2 : zas 08.2019 -- Changed actel to libero
 | |
| #   V0.3 : ama 02.2023 -- Adapted for diamond
 | |
| #
 | |
| ################################################################################
 | |
| 
 | |
| $separator = '-' x 79;
 | |
| $indent = ' ' x 2;
 | |
| $verbose = 1;
 | |
| $| = 1; # forces flush on prints
 | |
| 
 | |
| $ENV{TZ} = ''; # needed to be able to run Synplify avoinding license error
 | |
| my $designerExe = "$ENV{DIAMOND_HOME}\\bin\\nt64\\pnmain.exe";
 | |
| $diamondFileSpec = $ARGV[0];
 | |
| $vhdlFileSpec = $ARGV[1];
 | |
| $lpfFileSpec = $ARGV[2];
 | |
| 
 | |
| use File::Basename;
 | |
| $diamond_dir  = dirname(dirname($vhdlFileSpec)) . '/diamond/'; # get up concat and into diamond
 | |
| $projectTitle = basename($diamondFileSpec, ".ldf");
 | |
| 
 | |
| 
 | |
| if ($verbose == 1) {
 | |
|   print "Script Parameters:\n";
 | |
|   print "  * diamondFileSpec: $diamondFileSpec\n";
 | |
|   print "  * vhdlFileSpec: $vhdlFileSpec\n";
 | |
|   print "  * lpfFileSpec: $lpfFileSpec\n";
 | |
|   print "  * Project title: $projectTitle\n"
 | |
| }
 | |
| 
 | |
| 
 | |
| #-------------------------------------------------------------------------------
 | |
| # Project variables
 | |
| #
 | |
| 
 | |
| $diamondWorkFileSpec = $diamondFileSpec . '.tmp';
 | |
| 															  # source directory
 | |
| my $sourceDir = "$ENV{CONCAT_DIR}";
 | |
| my $projectDir = "$ENV{DIAMOND_WORK_DIR}";
 | |
| 
 | |
| #-------------------------------------------------------------------------------
 | |
| # Update paths in the project file
 | |
| #
 | |
| 
 | |
| if ($verbose == 1) {
 | |
|   print "\n$separator\n\n";
 | |
|   print "Updating file specifications in $diamondFileSpec\n";
 | |
|   print $indent, "temporary file spec: $diamondWorkFileSpec\n";
 | |
| }
 | |
| my $line;
 | |
| if ( !open(DiamondFile, $diamondFileSpec) ){
 | |
|   print("\nCould not open $diamondFileSpec !\nExiting (failure)\n\n");
 | |
|   die "\nCould not open $diamondFileSpec !\nExiting (failure)\n\n";
 | |
| }
 | |
| 
 | |
| open(workFile, ">$diamondWorkFileSpec");
 | |
| while (chop($line = <DiamondFile>)) {
 | |
| 
 | |
|                                                         # replace title
 | |
|   if ($line =~ m/<BaliProject.*title=".*"/i) {
 | |
|     if ($verbose == 1) {print " * Replacing title line\n";}
 | |
|     $line =~ s/title=".*?"/title="$projectTitle"/;
 | |
|   }
 | |
|                                                         # replace VHDL file spec
 | |
|   if ($line =~ m/<Source\sname=".*\.vhd"/i) {
 | |
|     if ($verbose == 1) {print " * Replacing VHDL line\n";}
 | |
|     $line =~ s/".*\.vhd"/"$vhdlFileSpec"/;
 | |
|   }
 | |
|                                                          # replace LPF file spec
 | |
|   if ($line =~ m/<Source\sname=".*\.lpf"/i) {
 | |
|     if ($verbose == 1) {print " * Replacing LPF line\n";}
 | |
|     $line =~ s/".*\.lpf"/"$lpfFileSpec"/;
 | |
|   }
 | |
|                                                          # replace RVA file spec
 | |
|   if ($line =~ m/<Source\sname="(.*\.rva)"/i) {
 | |
|     if ($verbose == 1) {print " * Replacing RVA line\n";}
 | |
|     $tpath = $diamond_dir . basename($1);
 | |
|     $line =~ s/".*\.rva"/"$tpath"/;
 | |
|   }
 | |
|                                                          # replace RVL file spec
 | |
|   if ($line =~ m/<Source\sname="(.*\.rvl)"/i) {
 | |
|     if ($verbose == 1) {print " * Replacing RVL line\n";}
 | |
|     $tpath = $diamond_dir . basename($1);
 | |
|     $line =~ s/".*\.rvl"/"$tpath"/;
 | |
|   }
 | |
|                                                          # replace XCF file spec
 | |
|   if ($line =~ m/<Source\sname="(.*\.xcf)"/i) {
 | |
|     if ($verbose == 1) {print " * Replacing XCF line\n";}
 | |
|     $tpath = $diamond_dir . basename($1);
 | |
|     $line =~ s/".*\.xcf"/"$tpath"/;
 | |
|   }
 | |
|                                                          # replace strategy
 | |
|   if ($line =~ m/<Strategy\sfile="(.*\.sty)"/i) {
 | |
|     if ($verbose == 1) {print " * Replacing Strategy line\n";}
 | |
|     $tpath = $diamond_dir . basename($1);
 | |
|     $line =~ s/".*\.sty"/"$tpath"/;
 | |
|   }
 | |
| 
 | |
|   print workFile ("$line\n");
 | |
| }
 | |
| 
 | |
| close(workFile);
 | |
| close(DiamondFile);
 | |
| 
 | |
| 
 | |
| #-------------------------------------------------------------------------------
 | |
| # delete original file and rename temporary file
 | |
| #
 | |
| unlink($diamondFileSpec);
 | |
| rename($diamondWorkFileSpec, $diamondFileSpec);
 | |
| 
 | |
| if ($verbose == 1) {
 | |
|   print "\nDone\n\n";
 | |
|   print "$separator\n\n";
 | |
| }
 |