[GCCE] We need a way for the HAL config extension to parameterise the HAL config file (.hcf) that will be used, depending upon
the toolchain we are building with. E.g. if we are building BeagleBoard with RVCT we can configure hardware floating point
because we have ARM's vfp math libraries; if we are building it with GCC, we lack this library support.
# Copyright (c) 1999-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:
# Launcher for the Symbian Emulator, including
# functionality to read the $ENV{EPOCROOT}epoc32\data\BuildInfo.txt
# file to find out information regarding the current Emulator.
# Depends on the current working directory providing
# the drive of the currently used SDK.
#
#
use Cwd;
#
# Check the argument(s), if any.
#
$numArgs = $#ARGV + 1;
if($numArgs == 0)
{
&launchEmulator("udeb","winscw");
exit(0);
}
if($numArgs > 2)
{
&printHelp;
die "ERROR: Too many arguments.\n";
}
if($numArgs == 1)
{
if(lc($ARGV[0]) eq "-rel")
{
&launchEmulator("urel","winscw");
exit(0);
}
if (lc($ARGV[0]) eq "-version")
{
&printVersion;
exit(0);
}
if(lc($ARGV[0]) eq "-wins")
{
&launchEmulator("udeb", "wins");
exit(0);
}
if(lc($ARGV[0]) eq "-winscw")
{
&launchEmulator("udeb", "winscw");
exit(0);
}
if(lc($ARGV[0]) eq "-help")
{
&printHelp;
exit(0);
}
}
if ($numArgs == 2)
{
if(lc($ARGV[0]) eq "-rel")
{
if (lc($ARGV[1]) eq "-wins")
{
&launchEmulator("urel","wins");
exit(0);
}
if (lc($ARGV[1]) eq "-winscw")
{
&launchEmulator("urel","winscw");
exit(0);
}
}
if (lc($ARGV[0]) eq "-winscw")
{
if (lc($ARGV[1] eq "-rel"))
{
&launchEmulator("urel","winscw");
exit(0);
}
}
if (lc($ARGV[0]) eq "-wins")
{
if (lc($ARGV[1] eq "-rel"))
{
&launchEmulator("urel","wins");
exit(0);
}
}
}
# Error, unknown argument.
&printHelp;
die "ERROR: Unknown argument " . "\"" . $ARGV[0] . "\".\n";
sub launchEmulator
{
my ($type,$win) = @_;
my $epocroot = &getEpocroot;
my $drive = &getDrive;
my $emu = $drive . $epocroot . "epoc32" . "\\"
. "release\\" . $win . "\\" . $type . "\\" . "epoc.exe";
-e $emu ||
die "ERROR: File \"$emu\" not found.\n\n" .
"The EPOCROOT environment variable does not identify\n" .
"a valid Symbian emulator installation on this drive.\n" .
"EPOCROOT must be an absolute path to an existing\n" .
"directory - it should have no drive qualifier and\n" .
"must end with a backslash.\n";
# If the execute is successful, this never returns.
exec("\"" . $emu . "\"") || die "Failed to execute the emulator \"$emu\": $!";
}
sub printHelp
{
print "Symbian Platform Emulator Launcher\n";
print "Syntax :\tepoc [-rel] [-wins|-winscw] [-version] [-help]\n";
print "(no options)\tLaunch active winscw debug emulator\n";
print "-rel\t\tLaunch active release emulator\n";
print "-wins\t\tLaunch active wins emulator\n";
print "-winscw\t\tLaunch active winscw emulator\n";
print "-version\tDisplay active emulator details\n";
print "-help\tOutput this help message\n";
}
sub printVersion
{
my $epocroot = &getEpocroot;
my $drive = &getDrive;
my $binfo = $drive . $epocroot . "epoc32" . "\\"
. "data" . "\\" . "BuildInfo.txt";
-e $binfo || die "ERROR: File \"" . $binfo . "\" does not exist.\n";
open(IFILE, $binfo) ||
die "ERROR: Failed to open file \"" . $binfo . "\": $!";
my $DeviceFamily = "";
my $DeviceFamilyRev = "";
my $ManufacturerSoftwareRev = "";
my $ManufacturerSoftwareBuild = "";
while(<IFILE>) {
if(/DeviceFamily\s+(.*\S)\s*$/i) {
$DeviceFamily = $1;
}
if(/DeviceFamilyRev\s+(.*\S)\s*$/i) {
$DeviceFamilyRev = $1;
}
if(/ManufacturerSoftwareRev\s+(.*\S)\s*$/i) {
$ManufacturerSoftwareRev = $1;
}
if(/ManufacturerSoftwareBuild\s+(.*\S)\s*$/i) {
$ManufacturerSoftwareBuild = $1;
}
}
close(IFILE);
#
# Verify that we got everything we should have.
#
$DeviceFamily ne "" ||
die "ERROR: Device family not specified in file \"" . $binfo .
"\".\n";
$DeviceFamilyRev ne "" ||
die "ERROR: Device family revision not specified in file \"" . $binfo .
"\".\n";
$ManufacturerSoftwareBuild ne "" ||
die "ERROR: Manufacturer software build not specified in file \"" .
$binfo . "\".\n";
$Revision = (($ManufacturerSoftwareRev eq "")?($DeviceFamilyRev):
($ManufacturerSoftwareRev));
$DeviceFamily = getDFRDName($DeviceFamily);
#
# Make the standard revision representation prettier,
# but leave other representations untouched.
#
if($Revision =~ /^0x([0-9])([0-9][0-9])$/) {
$Revision = $1 . "." . $2;
}
print $DeviceFamily . " " .
"version " . $Revision . " " .
"build " . $ManufacturerSoftwareBuild . "\n";
}
#
# Determines, validates, and returns EPOCROOT.
#
sub getEpocroot
{
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 be an absolute path, " .
"not containing 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);
return $epocroot;
}
#
# Determines and returns the current drive, if any.
#
sub getDrive
{
my $wd = cwd;
my $drive;
if($wd =~ /^([a-zA-Z]:)/) {
$drive = $1;
} else {
# Perhaps we're on a machine that has no drives.
$drive = "";
}
return $drive;
}
#
# The DFRD may be represented by a numeric value, as defined by HAL.
# Changes known numeric values to the name of the DFRD,
# and leaves all other values untouched.
#
sub getDFRDName
{
my $dfrd = shift;
return "Crystal" if $dfrd eq "0";
return "Pearl" if $dfrd eq "1";
return "Quartz" if $dfrd eq "2";
return $dfrd; # as fallback
}