--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/GenBuild.pm Mon Oct 18 16:16:46 2010 +0800
@@ -0,0 +1,850 @@
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+package GenBuild;
+
+use strict;
+use Carp;
+use IO::File;
+
+# Global Variables
+
+my @components;
+my $iIDCount;
+my $iStageCount;
+my %arm_assplist;
+my $savespace="";
+my $keepgoing="";
+my $build_tools=0;
+my $build_cwtools=0;
+my $build_winc=0;
+my $build_thumb=0;
+my $build_armi=0;
+my $build_arm4=0;
+my $build_arm4t=0;
+my $build_armv5=0;
+my $build_arm3=0;
+my $epoc_only=0;
+my $build_winscw=0;
+my $build_wins=0;
+my $build_bootstrap;
+my $basename;
+my $iSourceDir;
+my $build_UREL=0;
+my $build_UDEB=0;
+my $build_urel_udeb="";
+my $build_test=0;
+
+my ($XMLFileH, $gLogFileH);
+
+my ($gHiResTimer) = 0; #Flag - true (1) if HiRes Timer module available
+
+# Check if HiRes Timer is available
+if (eval "require Time::HiRes;") {
+ $gHiResTimer = 1;
+} else {
+ print "Cannot load HiResTimer Module\n";
+}
+
+sub Start
+{
+ my ($iDataSource, $iDataOutput, $iLogFile, $iSourceDir, $iReallyClean, $iClean) = @_;
+
+ # Copied from genbuild.pl
+
+ # Check for EPOCROOT
+ # It's not used directly by GENBUILD, but this is a good early stage at which
+ # to discover that it hasn't been set...
+
+ my $epocroot = $ENV{EPOCROOT};
+ die "ERROR: Must set the EPOCROOT environment variable\n" if (!defined($epocroot));
+ $epocroot =~ s-/-\\-go; # for those working with UNIX shells
+ die "ERROR: EPOCROOT must not include a drive letter\n" if ($epocroot =~ /^.:/);
+ die "ERROR: EPOCROOT must be an absolute path without a drive letter\n" if ($epocroot !~ /^\\/);
+ die "ERROR: EPOCROOT must not be a UNC path\n" if ($epocroot =~ /^\\\\/);
+ die "ERROR: EPOCROOT must end with a backslash\n" if ($epocroot !~ /\\$/);
+ die "ERROR: EPOCROOT must specify an existing directory\n" if (!-d $epocroot);
+
+ # $iSourceDir must en in a \
+ # Add a \ if not present
+ if ($iSourceDir !~ /\\$/)
+ {
+ $iSourceDir .= "\\";
+ }
+
+ for(my $j = 0; $j < scalar(@$iDataSource); $j++)
+ {
+ $GenBuild::basename .= " " if ($j > 0);
+ my ($iFile) = @$iDataSource[$j] =~ m#.*([\\\/]|^)(.*?)\..*$#;
+ $GenBuild::basename .= @$iDataSource[$j];
+ }
+
+ #Set the global iSourceDir
+ $GenBuild::iSourceDir = $iSourceDir;
+
+ # Open Log file
+ $GenBuild::gLogFileH = IO::File->new("> $iLogFile")
+ or croak "Couldn't open $iLogFile for writing: $!\n";
+
+ print $GenBuild::gLogFileH "===-------------------------------------------------\n";
+ print $GenBuild::gLogFileH "=== Genxml\n";
+ print $GenBuild::gLogFileH "===-------------------------------------------------\n";
+ print $GenBuild::gLogFileH "=== Genxml started ".localtime()."\n";
+
+ for(my $j = 0; $j < scalar(@$iDataSource); $j++)
+ {
+ # Open DataSource
+ my ($iFile) = @$iDataSource[$j];
+ open FILE, "< $iFile" or die "Can't read $iFile\n";
+
+ print $GenBuild::gLogFileH "=== Genxml == $iFile\n";
+
+ print $GenBuild::gLogFileH "-- Genxml\n";
+ # Add the per command start timestamp
+ print $GenBuild::gLogFileH "++ Started at ".localtime()."\n";
+ # Add the per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ print $GenBuild::gLogFileH "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer missing statement
+ print $GenBuild::gLogFileH "+++ HiRes Time Unavailable\n";
+ }
+
+ # Process the Txt file in the same manner as the old genbuild
+ # Note:
+ # Additional options 'udeb', 'urel' and 'test' were added in response
+ # to a specific request, but are not otherwise supported by Symbian.
+ while (<FILE>)
+ {
+ s/\s*#.*$//;
+ s/^\s*//;
+ my $line = lc $_;
+ if ($line =~ /^$/)
+ {
+ next;
+ }
+
+ if ($line =~ /<option (\w+)\s*(.*)>/)
+ {
+ my $option = $1;
+ my $optargs= $2;
+ if ($option =~ "savespace")
+ {
+ $GenBuild::savespace = "-savespace";
+ next;
+ }
+ if ($option =~ "keepgoing")
+ {
+ $GenBuild::keepgoing = "-keepgoing";
+ next;
+ }
+ if ($option =~ "tools")
+ {
+ $GenBuild::build_tools = 1;
+ next;
+ }
+ if ($option eq "cwtools")
+ {
+ $GenBuild::build_cwtools = 1;
+ next;
+ }
+ if ($option =~ "winc")
+ {
+ $GenBuild::build_winc = 1;
+ next;
+ }
+
+ # Do not build winc, wins or winscw
+ if ($option =~ "epoconly")
+ {
+ $GenBuild::build_winc = 0;
+ $GenBuild::epoc_only = 1;
+ next;
+ }
+ if ($option =~ "thumb")
+ {
+ $GenBuild::build_thumb = 1;
+ next;
+ }
+
+ # ARMI option
+ if ($option =~ "armi")
+ {
+ $GenBuild::build_armi = 1;
+ next;
+ }
+
+ # ARM4
+ if ($option eq "arm4")
+ {
+ $GenBuild::build_arm4 = 1;
+ next;
+ }
+
+ # ARM4T
+ if ($option eq "arm4t")
+ {
+ $GenBuild::build_arm4t = 1;
+ next;
+ }
+
+ # ARMv5
+ if ($option =~ "armv5")
+ {
+ $GenBuild::build_armv5 = 1;
+ next;
+ }
+
+ if ($option =~ "arm3")
+ {
+ $GenBuild::build_arm3 = 1;
+ next;
+ }
+
+ # Use Visual Studio
+ if ($option eq "wins")
+ {
+ $GenBuild::build_wins = 1;
+ next;
+ }
+
+ # Use CodeWarrior
+ if ($option eq "winscw")
+ {
+ $GenBuild::build_winscw = 1;
+ next;
+ }
+
+ if ($option eq "udeb")
+ {
+ $GenBuild::build_UDEB = 1;
+ next;
+ }
+
+ if ($option eq "urel")
+ {
+ $GenBuild::build_UREL = 1;
+ next;
+ }
+
+ if ($option eq "test")
+ {
+ $GenBuild::build_test = 1;
+ next;
+ }
+
+ if ($option =~ "arm_assp")
+ {
+ $GenBuild::arm_assplist{$optargs} = 1;
+ next;
+ }
+
+
+ print "Option $1 not yet implemented\n";
+ next;
+ }
+ if ($line =~ /^([^<]\S+)\s+(\S+)/)
+ {
+ if (!-e "$GenBuild::iSourceDir$2\\bld.inf")
+ {
+ print $GenBuild::gLogFileH "MISSING COMPONENT $1: can't find $GenBuild::iSourceDir$2\\bld.inf\n";
+ next;
+ }
+ }
+ if ($line =~ /<special bldfiles e32toolp group>/)
+ {
+ # Handle Special
+ $GenBuild::build_bootstrap = 1;
+ next;
+ }
+
+ push @GenBuild::components, $line;
+ }
+
+ close(FILE);
+ # Add the per command end HiRes timestamp if available
+ print $GenBuild::gLogFileH "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the per command end timestamp
+ print $GenBuild::gLogFileH "++ Finished at ".localtime()."\n";
+ }
+
+ print $GenBuild::gLogFileH "=== Genxml == Output\n";
+
+ print $GenBuild::gLogFileH "-- Genxml\n";
+ # Add the per command start timestamp
+ print $GenBuild::gLogFileH "++ Started at ".localtime()."\n";
+ # Add the per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ print $GenBuild::gLogFileH "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer missing statement
+ print $GenBuild::gLogFileH "+++ HiRes Missing\n";
+ }
+
+ &PBuildLevels($iDataOutput);
+
+ # Generate additional ReallyClean and Clean XML files if required
+ &GenReallyClean($iReallyClean) if (defined $iReallyClean);
+ &GenClean($iClean) if (defined $iClean);
+
+ # Close file handles
+ close($GenBuild::gLogFileH);
+
+}
+
+# PBuildLevels
+#
+# Inputs
+# $iDataOutput - Filename for normal build xml
+#
+# Outputs
+#
+# Description
+# This function generates a xml file to run normal buildon all components
+sub PBuildLevels
+{
+ my ($iDataOutput) = @_;
+ # Print the XML file
+ $GenBuild::XMLFileH = IO::File->new("> $iDataOutput")
+ or croak "Couldn't open $iDataOutput for writing: $!\n";
+
+ $GenBuild::iIDCount = 1;
+ $GenBuild::iStageCount = 1;
+
+ my ($epocroot) = $ENV{'EPOCROOT'};
+
+ &PrintXMLHeader($GenBuild::XMLFileH);
+
+ if (($GenBuild::build_UREL) && (!$GenBuild::build_UDEB))
+ {
+ $GenBuild::build_urel_udeb = " UREL";
+ }
+ elsif ((!$GenBuild::build_UREL) && ($GenBuild::build_UDEB))
+ {
+ $GenBuild::build_urel_udeb = " UDEB";
+ }
+
+ if ($GenBuild::build_bootstrap)
+ {
+ # Do the BootStrapping
+ # Temporary workaround for non-common code between old setup and Beech
+ # Defaults to old setup
+ # This will be removed when final functionality is added
+ if ($ENV{'Platform'} eq 'beech')
+ {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{beech\\generic\\tools\\e32toolp\\group" CommandLine="setupprj.bat"/>\n};
+ } elsif ($ENV{'Platform'} eq 'cedar') {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{os\\buildtools\\sbsv1_os\\e32toolp\\group" CommandLine="setupprj.bat"/>\n};
+ } else {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{tools\\e32toolp\\group" CommandLine="setupprj.bat"/>\n};
+ }
+ $GenBuild::iIDCount++;
+ $GenBuild::iStageCount++;
+ # Temporary workaround for non-common code between old setup and Beech
+ # Defaults to old setup
+ # This will be removed when final functionality is added
+ if ($ENV{'Platform'} eq 'beech')
+ {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{beech\\generic\\tools\\e32toolp\\group" CommandLine="bld.bat rel"/>\n};
+ } elsif ($ENV{'Platform'} eq 'cedar') {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{os\\buildtools\\sbsv1_os\\e32toolp\\group" CommandLine="bld.bat rel"/>\n};
+ } else {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{tools\\e32toolp\\group" CommandLine="bld.bat rel"/>\n};
+ }
+ $GenBuild::iIDCount++;
+ $GenBuild::iStageCount++;
+ }
+
+ &BuildLevels("0", "bldmake bldfiles $GenBuild::keepgoing");
+ $GenBuild::iStageCount++;
+ &BuildLevels("0", "abld export $GenBuild::keepgoing");
+ &BuildLevels("0", "abld test export $GenBuild::keepgoing") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+
+ if ($GenBuild::build_tools)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "tools");
+ $GenBuild::iStageCount++;
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "tools");
+ &BuildLevels("1", "abld target $GenBuild::keepgoing $GenBuild::savespace", "tools", "rel");
+ &BuildLevels("0", "abld -what build", "tools", "rel");
+ &BuildLevels("0", "abld -check build", "tools", "rel");
+ $GenBuild::iStageCount++;
+ }
+
+ if ($GenBuild::build_cwtools)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "cwtools");
+ $GenBuild::iStageCount++;
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "cwtools");
+ &BuildLevels("1", "abld target $GenBuild::keepgoing $GenBuild::savespace", "cwtools", "rel");
+ &BuildLevels("0", "abld -what build", "cwtools", "rel");
+ &BuildLevels("0", "abld -check build", "cwtools", "rel");
+ $GenBuild::iStageCount++;
+ }
+
+ if ($GenBuild::build_winc)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "winc");
+ $GenBuild::iStageCount++;
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "winc");
+ &BuildLevels("1", "abld target $GenBuild::keepgoing $GenBuild::savespace", "winc");
+ &BuildLevels("0", "abld -what build", "winc");
+ &BuildLevels("0", "abld -check build", "winc");
+ $GenBuild::iStageCount++;
+
+ }
+
+ unless ($epoc_only)
+ {
+ # Emulator things, WINS, up to resources
+ if ($GenBuild::build_wins)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "wins");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "wins") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "wins$GenBuild::build_urel_udeb");
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "wins$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "wins");
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "wins") if ($GenBuild::build_test);
+ }
+
+ # Emulator things, WINSCW, up to resources
+ if ($GenBuild::build_winscw)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "winscw");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "winscw") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "winscw$GenBuild::build_urel_udeb");
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "winscw$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "winscw");
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "winscw") if ($GenBuild::build_test);
+ }
+ }
+ # Arm Stuff
+ if ($GenBuild::build_arm4)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "arm4");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "arm4") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ if ($GenBuild::build_arm4t)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "arm4t");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "arm4t") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ if ($GenBuild::build_armv5)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "armv5");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "arm5") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ if ($GenBuild::build_armi)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "armi");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "armi") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ if ($GenBuild::build_thumb)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "thumb");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "thumb") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ if ($GenBuild::build_arm3)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "arm3");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "arm3") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", $iAssp);
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", $iAssp) if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "arm4$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "arm4$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "arm4t$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4t);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "arm4t$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4t) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "armv5$GenBuild::build_urel_udeb") if ($GenBuild::build_armv5);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "armv5$GenBuild::build_urel_udeb") if (($GenBuild::build_armv5) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "armi$GenBuild::build_urel_udeb") if ($GenBuild::build_armi);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "armi$GenBuild::build_urel_udeb") if (($GenBuild::build_armi) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "thumb$GenBuild::build_urel_udeb") if ($GenBuild::build_thumb);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "thumb$GenBuild::build_urel_udeb") if (($GenBuild::build_thumb) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "arm3$GenBuild::build_urel_udeb") if ($GenBuild::build_arm3);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "arm3$GenBuild::build_urel_udeb") if (($GenBuild::build_arm3) && ($GenBuild::build_test));
+
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "$iAssp$GenBuild::build_urel_udeb");
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "$iAssp$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ }
+
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "arm4") if ($GenBuild::build_arm4);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "arm4") if (($GenBuild::build_arm4) &&($GenBuild::build_test));
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "arm4t") if ($GenBuild::build_arm4t);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "arm4t") if (($GenBuild::build_arm4t) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "armv5") if ($GenBuild::build_armv5);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "armv5") if (($GenBuild::build_armv5) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "armi") if ($GenBuild::build_armi);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "armi") if (($GenBuild::build_armi) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "thumb") if ($GenBuild::build_thumb);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "thumb") if (($GenBuild::build_thumb) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "arm3") if ($GenBuild::build_arm3);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "arm3") if (($GenBuild::build_arm3) && ($GenBuild::build_test));
+
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", $iAssp);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", $iAssp) if ($GenBuild::build_test);
+ }
+
+ # Build all targets
+ my @iTargets;
+ # Push the defaults on
+ push @iTargets, "wins$GenBuild::build_urel_udeb" if (($GenBuild::build_wins) && (!$GenBuild::epoc_only));
+ push @iTargets, "arm4$GenBuild::build_urel_udeb" if ($GenBuild::build_arm4);
+ push @iTargets, "arm4t$GenBuild::build_urel_udeb" if ($GenBuild::build_arm4t);
+ push @iTargets, "armv5$GenBuild::build_urel_udeb" if ($GenBuild::build_armv5);
+ push @iTargets, "armi$GenBuild::build_urel_udeb" if ($GenBuild::build_armi);
+ push @iTargets, "winscw$GenBuild::build_urel_udeb" if (($GenBuild::build_winscw) && (!$GenBuild::epoc_only));
+ push @iTargets, "thumb$GenBuild::build_urel_udeb" if ($GenBuild::build_thumb);
+ push @iTargets, "arm3$GenBuild::build_urel_udeb" if ($GenBuild::build_arm3);
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ push @iTargets, "$iAssp$GenBuild::build_urel_udeb";
+ }
+ &BuildTargets("0", "abld target $GenBuild::keepgoing $GenBuild::savespace", @iTargets);
+ &BuildTargets("0", "abld test target $GenBuild::keepgoing $GenBuild::savespace", @iTargets) if ($GenBuild::build_test);
+
+ unless ($epoc_only)
+ {
+ if ($GenBuild::build_wins)
+ {
+ # Final Part of WINS
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "wins","$GenBuild::build_urel_udeb");
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "wins","$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ &BuildLevels("0", "abld -what build", "wins","$GenBuild::build_urel_udeb");
+ &BuildLevels("0", "abld test -what build", "wins","$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ &BuildLevels("0", "abld -check build", "wins","$GenBuild::build_urel_udeb");
+ &BuildLevels("0", "abld test -check build", "wins","$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+
+ if ($GenBuild::build_winscw)
+ {
+ # Final Part of WINSCW
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "winscw$GenBuild::build_urel_udeb");
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "winscw$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ &BuildLevels("0", "abld -what build", "winscw$GenBuild::build_urel_udeb");
+ &BuildLevels("0", "abld test -what build", "winscw$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ &BuildLevels("0", "abld -check build", "winscw$GenBuild::build_urel_udeb");
+ &BuildLevels("0", "abld test -check build", "winscw$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ }
+
+ # Other Final Parts
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "arm4$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "arm4$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "arm4t$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4t);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "arm4t$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4t) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "armv5$GenBuild::build_urel_udeb") if ($GenBuild::build_armv5);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "armv5$GenBuild::build_urel_udeb") if (($GenBuild::build_armv5) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "armi$GenBuild::build_urel_udeb") if ($GenBuild::build_armi);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "armi$GenBuild::build_urel_udeb") if (($GenBuild::build_armi) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "thumb$GenBuild::build_urel_udeb") if ($GenBuild::build_thumb);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "thumb$GenBuild::build_urel_udeb") if (($GenBuild::build_thumb) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "arm3$GenBuild::build_urel_udeb") if ($GenBuild::build_arm3);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "arm3$GenBuild::build_urel_udeb") if (($GenBuild::build_arm3) && ($GenBuild::build_test));
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", $iAssp);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", $iAssp) if ($GenBuild::build_test);
+ }
+
+ &BuildLevels("0", "abld -what build", "arm4$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4);
+ &BuildLevels("0", "abld test -what build", "arm4$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -what build", "arm4t$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4t);
+ &BuildLevels("0", "abld test -what build", "arm4t$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4t) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -what build", "armv5$GenBuild::build_urel_udeb") if ($GenBuild::build_armv5);
+ &BuildLevels("0", "abld test -what build", "armv5$GenBuild::build_urel_udeb") if (($GenBuild::build_armv5) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -what build", "armi$GenBuild::build_urel_udeb") if ($GenBuild::build_armi);
+ &BuildLevels("0", "abld test -what build", "armi$GenBuild::build_urel_udeb") if (($GenBuild::build_armi) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -what build", "thumb$GenBuild::build_urel_udeb") if ($GenBuild::build_thumb);
+ &BuildLevels("0", "abld test -what build", "thumb$GenBuild::build_urel_udeb") if (($GenBuild::build_thumb) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -what build", "arm3$GenBuild::build_urel_udeb") if ($GenBuild::build_arm3);
+ &BuildLevels("0", "abld test -what build", "arm3$GenBuild::build_urel_udeb") if (($GenBuild::build_arm3) && ($GenBuild::build_test));
+
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("0", "abld -what build", $iAssp);
+ &BuildLevels("0", "abld test -what build", $iAssp) if ($GenBuild::build_test);
+ }
+ $GenBuild::iStageCount++;
+
+ &BuildLevels("0", "abld -check build", "arm4$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4);
+ &BuildLevels("0", "abld test -check build", "arm4$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -check build", "arm4t$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4t);
+ &BuildLevels("0", "abld test -check build", "arm4t$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4t) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -check build", "armv5$GenBuild::build_urel_udeb") if ($GenBuild::build_armv5);
+ &BuildLevels("0", "abld test -check build", "armv5$GenBuild::build_urel_udeb") if (($GenBuild::build_armv5) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -check build", "armi$GenBuild::build_urel_udeb") if ($GenBuild::build_armi);
+ &BuildLevels("0", "abld test -check build", "armi$GenBuild::build_urel_udeb") if (($GenBuild::build_armi) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -check build", "thumb$GenBuild::build_urel_udeb") if ($GenBuild::build_thumb);
+ &BuildLevels("0", "abld test -check build", "thumb$GenBuild::build_urel_udeb") if (($GenBuild::build_thumb) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -check build", "arm3$GenBuild::build_urel_udeb") if ($GenBuild::build_arm3);
+ &BuildLevels("0", "abld test -check build", "arm3$GenBuild::build_urel_udeb") if (($GenBuild::build_arm3) && ($GenBuild::build_test));
+
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("0", "abld -check build", $iAssp);
+ &BuildLevels("0", "abld test -check build", $iAssp) if ($GenBuild::build_test);
+ }
+
+ # Print the XML Footer
+ print $GenBuild::XMLFileH qq{\t</Commands>\n</Product>};
+
+ # Add the per command end HiRes timestamp if available
+ print $GenBuild::gLogFileH "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the per command end timestamp
+ print $GenBuild::gLogFileH "++ Finished at ".localtime()."\n";
+
+ # Print Genxml log footer
+ print $GenBuild::gLogFileH "=== Genxml finished ".localtime()."\n";
+
+ # Close XML File
+ close($GenBuild::XMLFileH);
+}
+
+sub BuildLevels
+{
+ my ($iIncStage, $action, $arg1, $arg2, $arg3) = @_;
+
+ for(my $j = 0; $j < scalar(@GenBuild::components); $j++)
+ {
+ my $line = $GenBuild::components[$j];
+ my @MyList;
+ my $tempvar;
+
+ @MyList = split(/\s+/,$line);
+ $tempvar= lc $MyList[$#MyList];
+ $tempvar =~ s/\\group//;
+ push @MyList, $tempvar;
+
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="$MyList[2]" Cwd="$GenBuild::iSourceDir$MyList[1]" CommandLine="$action $arg1 $arg2 $arg3"/>\n};
+ $GenBuild::iIDCount++;
+
+ if ( $iIncStage )
+ {
+ $GenBuild::iStageCount++;
+ }
+ }
+
+}
+
+sub BuildTargets
+{
+ my ($iIncStage, $action, @iTargets) = @_;
+
+
+ for(my $j = 0; $j < scalar(@GenBuild::components); $j++)
+ {
+ my $line = $GenBuild::components[$j];
+ my @MyList;
+ my $tempvar;
+
+ @MyList = split(/\s+/,$line);
+ $tempvar= lc $MyList[$#MyList];
+ $tempvar =~ s/\\group//;
+ push @MyList, $tempvar;
+
+ # Process target list
+ foreach my $iTarget (@iTargets)
+ {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="$MyList[2]" Cwd="$GenBuild::iSourceDir$MyList[1]" CommandLine="$action $iTarget"/>\n};
+ $GenBuild::iIDCount++;
+ }
+ if ( $iIncStage )
+ {
+ $GenBuild::iStageCount++;
+ }
+ }
+ $GenBuild::iStageCount++ if (!$iIncStage);
+
+}
+
+# GenReallyClean
+#
+# Inputs
+# $iReallyClean - Filename for reallyclean xml
+#
+# Outputs
+#
+# Description
+# This function generates a xml file to run abld reallyclean on all components
+sub GenReallyClean
+{
+ my ($iReallyClean) = @_;
+
+ # Reset ID and Stage Counf for New XML File
+ $GenBuild::iIDCount = 1;
+ $GenBuild::iStageCount = 1;
+
+
+ # Add the section header
+ print $GenBuild::gLogFileH "=== Genxml == ReallyClean\n";
+
+ print $GenBuild::gLogFileH "-- Genxml\n";
+ # Add the per command start timestamp
+ print $GenBuild::gLogFileH "++ Started at ".localtime()."\n";
+ # Add the per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ print $GenBuild::gLogFileH "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer missing statement
+ print $GenBuild::gLogFileH "+++ HiRes Missing\n";
+ }
+
+ # Open XML file
+ $GenBuild::XMLFileH = IO::File->new("> $iReallyClean")
+ or croak "Couldn't open $iReallyClean for writing: $!\n";
+
+ # Write Header
+ &PrintXMLHeader($GenBuild::XMLFileH);
+ # Generate XML file
+ &BuildLevels("0", "abld reallyclean");
+ # Write Footer and Close XML File
+ print $GenBuild::XMLFileH qq{\t</Commands>\n</Product>};
+ close($GenBuild::XMLFileH);
+
+
+ # Add the per command end HiRes timestamp if available
+ print $GenBuild::gLogFileH "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the per command end timestamp
+ print $GenBuild::gLogFileH "++ Finished at ".localtime()."\n";
+
+ # Print Genxml log footer
+ print $GenBuild::gLogFileH "=== Genxml finished ".localtime()."\n";
+}
+
+# GenClean
+#
+# Inputs
+# $iClean - Filename for reallyclean xml
+#
+# Outputs
+#
+# Description
+# This function generates a xml file to run abld reallyclean on all components
+sub GenClean
+{
+ my ($iClean) = @_;
+
+ # Reset ID and Stage Counf for New XML File
+ $GenBuild::iIDCount = 1;
+ $GenBuild::iStageCount = 1;
+
+ # Add the section header
+ print $GenBuild::gLogFileH "=== Genxml == Clean\n";
+
+ print $GenBuild::gLogFileH "-- Genxml\n";
+ # Add the per command start timestamp
+ print $GenBuild::gLogFileH "++ Started at ".localtime()."\n";
+ # Add the per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ print $GenBuild::gLogFileH "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer missing statement
+ print $GenBuild::gLogFileH "+++ HiRes Missing\n";
+ }
+
+ # Open XML file
+ $GenBuild::XMLFileH = IO::File->new("> $iClean")
+ or croak "Couldn't open $iClean for writing: $!\n";
+
+ # Write Header
+ &PrintXMLHeader($GenBuild::XMLFileH);
+ # Generate XML file
+ &BuildLevels("0", "abld clean");
+
+ # Write Footer and Close XML File
+ print $GenBuild::XMLFileH qq{\t</Commands>\n</Product>};
+ close($GenBuild::XMLFileH);
+
+
+ # Add the per command end HiRes timestamp if available
+ print $GenBuild::gLogFileH "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the per command end timestamp
+ print $GenBuild::gLogFileH "++ Finished at ".localtime()."\n";
+
+ # Print Genxml log footer
+ print $GenBuild::gLogFileH "=== Genxml finished ".localtime()."\n";
+}
+
+# PrintXMLHeader
+#
+# Inputs
+# $iFileHandle
+#
+# Outputs
+#
+# Description
+# This function print the common start of the XML File
+sub PrintXMLHeader
+{
+ my ($iFileHandle) = @_;
+
+ my ($epocroot) = $ENV{'EPOCROOT'};
+
+ # Print the XML Header
+ print $iFileHandle qq{<?xml version="1.0"?>\n};
+ print $iFileHandle <<DTD_EOF;
+<!DOCTYPE Build [
+ <!ELEMENT Product (Commands)>
+ <!ATTLIST Product name CDATA #REQUIRED>
+ <!ELEMENT Commands (Execute+ | SetEnv*)>
+ <!ELEMENT Execute EMPTY>
+ <!ATTLIST Execute ID CDATA #REQUIRED>
+ <!ATTLIST Execute Stage CDATA #REQUIRED>
+ <!ATTLIST Execute Component CDATA #REQUIRED>
+ <!ATTLIST Execute Cwd CDATA #REQUIRED>
+ <!ATTLIST Execute CommandLine CDATA #REQUIRED>
+ <!ELEMENT SetEnv EMPTY>
+ <!ATTLIST SetEnv Order ID #REQUIRED>
+ <!ATTLIST SetEnv Name CDATA #REQUIRED>
+ <!ATTLIST SetEnv Value CDATA #REQUIRED>
+]>
+DTD_EOF
+ print $iFileHandle qq{<Product Name="$GenBuild::basename">\n\t<Commands>\n};
+
+ #Set EPOCROOT
+ print $iFileHandle qq{\t\t<SetEnv Order="1" Name="EPOCROOT" Value="$epocroot"/>\n};
+
+ #Add Tools to the path using EPOCROOT
+ print $iFileHandle qq{\t\t<SetEnv Order="2" Name="PATH" Value="}.$epocroot.qq{epoc32\\gcc\\bin;}.$epocroot.qq{epoc32\\tools;%PATH%"/>\n};
+
+}
+1;