Line 52... |
Line 52... |
use sys::lib;
|
use sys::lib;
|
use yp::lib;
|
use yp::lib;
|
|
|
$OUTPUT_AUTOFLUSH = 1; # set autoflush of stdout to TRUE.
|
$OUTPUT_AUTOFLUSH = 1; # set autoflush of stdout to TRUE.
|
|
|
my $home = cwd();
|
|
|
|
|
|
#/*********************************************************************************************/
|
#/*********************************************************************************************/
|
#/ We never generate files into a RCS database. */
|
#/ We never generate files into a RCS database. */
|
#/ */
|
#/ */
|
#/ A special work area is created that is the image of the database using symbolic links */
|
#/ A special work area is created that is the image of the database using symbolic links */
|
#/ */
|
#/ */
|
#/*********************************************************************************************/
|
#/*********************************************************************************************/
|
|
|
|
my $home = cwd();
|
|
my $root = $ARGV[0];
|
|
my $prefix = $ARGV[1];
|
|
|
my $project = $ARGV[0];
|
chomp($root);
|
my $vendor = $ARGV[1];
|
chomp($prefix);
|
chomp($project);
|
|
chomp($vendor);
|
|
|
|
unless ($project) {$project ="fpgas";}
|
|
unless ($vendor) {$vendor ="opencores.org";}
|
|
|
|
|
$_ = $root;
|
|
|
my $root = "projects/${vendor}/${project}";
|
if(/\/(\S+)\/(\S+)\/(\S+)/)
|
|
{
|
|
$projects_dir = $1;
|
|
$vendor = $2;
|
|
$project = $3;
|
|
}
|
|
|
my $prefix = "/work/";
|
$root = "${projects_dir}/${vendor}/${project}/";
|
|
|
|
|
my $lib_comp_sep = yp::lib::find_lib_comp_sep($vendor,$project);
|
unless ( -e $root )
|
|
{
|
|
print "ERROR: Project $root does not exist \n";
|
|
exit(0);
|
|
}
|
|
|
|
|
|
unless ( $prefix )
|
|
{
|
|
$prefix = "/work";
|
|
}
|
|
|
|
|
my $path = "${home}${prefix}";
|
my $path = "${home}${prefix}";
|
mkdir $path,0755 unless( -e $path );
|
|
|
|
|
mkdir $path,0755 unless( -e $path );
|
|
|
|
|
$path = "${home}${prefix}${project}";
|
$path = "${home}${prefix}/${vendor}__${project}";
|
mkdir $path,0755 unless( -e $path );
|
mkdir $path,0755 unless( -e $path );
|
|
|
|
|
print "Building a work area for ${home}/${root} in ${home}${prefix} \n" ;
|
print "Building Workspace ${prefix}/${vendor}__${project} from ./${projects_dir}/${vendor}/${project}/ \n";
|
|
|
|
|
&link_sub( $root,$root, "work/${project}" );
|
&link_sub( $root,$root, ".${prefix}/${vendor}__${project}" );
|
|
|
|
|
#/*********************************************************************************************/
|
#/*********************************************************************************************/
|
#/ */
|
#/ */
|
#/ Each project is given access to the system tools by giving each of them a link to the */
|
#/ Each project is given access to the system tools by giving each of them a link to the */
|
Line 105... |
Line 120... |
#/ */
|
#/ */
|
#/*********************************************************************************************/
|
#/*********************************************************************************************/
|
|
|
|
|
|
|
|
if (system("chmod 755 ${home}/${projects_dir}/${vendor}/${project}/bin/* \n" )) {}
|
|
|
|
|
{
|
symlink( "${home}/tools/bin/Makefile.root", "${home}${prefix}/${vendor}__${project}/bin/Makefile.root");
|
symlink( "${home}/tools/bin/Makefile.root", "${home}/work/${project}/bin/Makefile.root");
|
symlink( "${home}/tools/bin/Makefile", "${home}${prefix}/${vendor}__${project}/bin/Makefile");
|
symlink( "${home}/tools/bin/Makefile", "${home}/work/${project}/bin/Makefile");
|
|
|
|
$cmd ="chmod 755 ${home}/projects/${vendor}/${project}/bin/* \n";
|
|
if (system($cmd)) {}
|
|
|
|
my $path = "${home}${prefix}${project}/children";
|
|
|
my $path = "${home}${prefix}/${vendor}__${project}/children";
|
mkdir $path,0755 unless( -e $path );
|
mkdir $path,0755 unless( -e $path );
|
|
|
|
|
|
|
my @components = yp::lib::find_components("socgen:ip",$vendor,$project);
|
my @components = yp::lib::find_components("socgen:ip",$vendor,$project);
|
foreach my $component (@components)
|
foreach my $component (@components)
|
{
|
{
|
$cmd ="./tools/sys/build_geda $project $component $vendor /n";
|
|
if (system($cmd)) {}
|
|
|
|
my $parser = XML::LibXML->new();
|
my $parser = XML::LibXML->new();
|
|
|
|
|
my $socgen_ip_file = $parser->parse_file(yp::lib::find_socgen("socgen:ip",$vendor,$project,$component));
|
my $socgen_ip_file = $parser->parse_file(yp::lib::find_socgen("socgen:ip",$vendor,$project,$component));
|
|
|
#/*********************************************************************************************/
|
|
#/ */
|
|
#/ */
|
|
#/*********************************************************************************************/
|
|
|
|
my @versions = yp::lib::find_versions("spirit:component",$vendor,$project,$component);
|
my @versions = yp::lib::find_versions("spirit:component",$vendor,$project,$component);
|
|
|
|
|
foreach $comp_version (@versions)
|
foreach $comp_version (@versions)
|
{
|
{
|
$cmd ="./tools/sys/soc_link_child -vendor $vendor -project $project -component $component -version $comp_version /n";
|
$cmd ="./tools/sys/soc_link_child -prefix $prefix -vendor $vendor -project $project -component $component -version $comp_version $projects_dir \n";
|
if (system($cmd)) {}
|
if (system($cmd)) {}
|
}
|
}
|
|
|
|
print "Linking simulations for $vendor $project $component \n";
|
|
|
|
foreach my $i_name ($socgen_ip_file->findnodes("//socgen:testbenches/socgen:testbench/socgen:version"))
|
foreach my $i_name ($socgen_ip_file->findnodes("//socgen:testbenches/socgen:testbench/name"))
|
|
{
|
{
|
my($tb_name) = $i_name ->findnodes('./text()')->to_literal ;
|
|
my($tb_version) = $i_name ->findnodes('../version/text()')->to_literal ;
|
|
|
|
$cmd ="./tools/sys/soc_link_child -vendor ${vendor} -project $project -component $component -version $tb_version /n";
|
my($tb_version) = $i_name ->findnodes('./text()')->to_literal ;
|
|
|
|
$cmd ="./tools/sys/soc_link_child -prefix $prefix -vendor ${vendor} -project $project -component $component -version $tb_version $projects_dir \n";
|
if (system($cmd)) {}
|
if (system($cmd)) {}
|
}
|
}
|
|
|
#/*********************************************************************************************/
|
#/*********************************************************************************************/
|
#/ link chip files for synthesys */
|
#/ link chip files for synthesys */
|
Line 164... |
Line 167... |
#/ */
|
#/ */
|
#/ */
|
#/ */
|
#/ */
|
#/ */
|
#/*********************************************************************************************/
|
#/*********************************************************************************************/
|
|
|
print "Linking targets for $project $component \n";
|
print "Linking synthesys targets for $vendor $project $component \n";
|
foreach my $i_name ($socgen_ip_file->findnodes("//chips/chip/name"))
|
my $lib_comp_sep = yp::lib::find_lib_comp_sep($vendor,$project);
|
|
|
|
|
|
foreach my $i_name ($socgen_ip_file->findnodes("//socgen:chips/socgen:chip/socgen:name"))
|
{
|
{
|
my($chip_name) = $i_name ->findnodes('./text()')->to_literal ;
|
my($chip_name) = $i_name ->findnodes('./text()')->to_literal ;
|
my($chip_target) = $i_name ->findnodes('../target/text()')->to_literal ;
|
my($chip_target) = $i_name ->findnodes('../socgen:target/socgen:library/text()')->to_literal ;
|
my($chip_part) = $i_name ->findnodes('../socgen:target/socgen:part/text()')->to_literal ;
|
my($chip_part) = $i_name ->findnodes('../socgen:target/socgen:part/text()')->to_literal ;
|
my($chip_configuration) = $i_name ->findnodes('../configuration/text()')->to_literal;
|
$outfile ="${home}${prefix}/${vendor}__${project}${lib_comp_sep}/${component}/syn/ise/${chip_name}/Makefile";
|
my($chip_variant) = $i_name ->findnodes('../variant/text()')->to_literal ;
|
|
|
|
chdir "${home}${prefix}${project}${lib_comp_sep}/${component}/syn/ise/${chip_variant}";
|
|
|
|
$cmd ="echo \"run -ifn ./filelist.syn -ifmt mixed -top $chip_name -ofn ${chip_name}.ngc -ofmt NGC -p $chip_part -opt_mode Speed -opt_level 1 \" > Xst; \n";
|
|
|
|
if (system($cmd)) {}
|
|
|
|
chdir $home;
|
|
|
|
|
|
|
|
$outfile ="${home}${prefix}${project}${lib_comp_sep}/${component}/syn/ise/${chip_name}/Makefile";
|
|
open MAKSYNFILE,">$outfile" or die "unable to open $outfile";
|
open MAKSYNFILE,">$outfile" or die "unable to open $outfile";
|
|
|
print MAKSYNFILE "include ../../../../../bin/Makefile.root\n";
|
print MAKSYNFILE "include ../../../../../bin/Makefile.root\n";
|
print MAKSYNFILE "Part=${chip_part}\n";
|
print MAKSYNFILE "Part=${chip_part}\n";
|
print MAKSYNFILE "board=${chip_target}\n";
|
print MAKSYNFILE "board=${chip_target}\n";
|
print MAKSYNFILE "Design=${chip_target}_${chip_configuration}\n";
|
print MAKSYNFILE "Design=${chip_name}\n";
|
my $path = "${home}${prefix}${project}${lib_comp_sep}/${component}/syn/ise/${chip_name}/target";
|
my $path = "${home}${prefix}/${vendor}__${project}${lib_comp_sep}/${component}/syn/ise/${chip_name}/target";
|
mkdir $path,0755 unless( -e $path );
|
mkdir $path,0755 unless( -e $path );
|
|
&sys::lib::link_dir( "${home}/tools/synthesys/targets/ip/${chip_target}", "${home}${prefix}/${vendor}__${project}${lib_comp_sep}/${component}/syn/ise/${chip_name}/target" );
|
&link_dir( "${home}/projects/${vendor}/targets/ip/${chip_target}", "${home}${prefix}${project}${lib_comp_sep}/${component}/syn/ise/${chip_name}/target" );
|
&sys::lib::link_dir( "${home}/tools/Jtag_programmers/debug", "${home}${prefix}/${vendor}__${project}${lib_comp_sep}/${component}/syn/ise/${chip_name}/debug" );
|
|
|
&link_dir( "${home}/tools/Jtag_programmers/debug", "${home}${prefix}${project}${lib_comp_sep}/${component}/syn/ise/${chip_name}/debug" );
|
|
}
|
|
}
|
}
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
#/*********************************************************************************************/
|
#/*********************************************************************************************/
|
#/ recursively map directory information */
|
#/ recursively map directory information */
|
#/ */
|
#/ */
|
#/ */
|
#/ */
|
#/ */
|
#/ */
|
Line 219... |
Line 212... |
return unless( -e $path );
|
return unless( -e $path );
|
|
|
my $dest_path = $path;
|
my $dest_path = $path;
|
$dest_path =~ s/$root/$dest/;
|
$dest_path =~ s/$root/$dest/;
|
|
|
if( -d $path ) {
|
if( -d $path )
|
|
{
|
mkdir $dest_path,0755;
|
mkdir $dest_path,0755;
|
|
|
my @contents = ( );
|
my @contents = ( );
|
opendir( DIR, $path );
|
opendir( DIR, $path );
|
while( my $item = readdir( DIR )) {
|
while( my $item = readdir( DIR ))
|
|
{
|
next if( $item eq '.' or $item eq '..' or $item eq '.svn' );
|
next if( $item eq '.' or $item eq '..' or $item eq '.svn' );
|
push( @contents, $item );
|
push( @contents, $item );
|
}
|
}
|
closedir( DIR );
|
closedir( DIR );
|
|
|
# recurse on items in the directory
|
# recurse on items in the directory
|
foreach my $item ( @contents ) { &link_sub($root, "$path/$item", $dest );}
|
foreach my $item ( @contents ) { &link_sub($root, "$path/$item", $dest );}
|
|
|
|
|
} else {
|
|
|
|
symlink( "${home}/${path}", $dest_path);
|
|
}
|
|
}
|
}
|
|
else
|
|
|
#/*********************************************************************************************/
|
|
#/ */
|
|
#/ */
|
|
#/ */
|
|
#/ */
|
|
#/ */
|
|
#/ */
|
|
#/*********************************************************************************************/
|
|
|
|
# recursively map directory information
|
|
|
|
sub link_dir {
|
|
my $src = shift;
|
|
my $dest = shift;
|
|
return unless( -e $src );
|
|
|
|
if( -d $src )
|
|
{
|
|
|
|
mkdir $dest,0755;
|
|
my @contents = ( );
|
|
opendir( DIR, $src );
|
|
while( my $item = readdir( DIR ))
|
|
{
|
{
|
next if( $item eq '.' or $item eq '..' or $item eq '.svn' );
|
symlink( "${home}/${path}", $dest_path);
|
push( @contents, $item );
|
|
}
|
|
closedir( DIR );
|
|
|
|
# recurse on items in the directory
|
|
foreach my $item ( @contents ) { &link_dir("$src/$item", "$dest/$item" );}
|
|
|
|
}
|
}
|
else {symlink( "${src}", "${dest}") unless( -e "${dest}" ); }
|
|
}
|
}
|
|
|
|
|