--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv1/abld/platform/bpabiutl.pm Fri Jun 25 17:29:25 2010 +0800
@@ -0,0 +1,141 @@
+# Copyright (c) 1997-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:
+# This package does various ancillary things for BPABI (Base Platform ABI) platforms
+#
+#
+
+package BPABIutl;
+
+require Exporter;
+@ISA=qw(Exporter);
+@EXPORT=qw(
+ BPABIutl_Plat_List
+ BPABIutl_Config_Path
+ BPABIutl_Get_Config_Variables
+);
+
+use E32Variant;
+require E32Plat;
+
+my %ConfigPath;
+my $variantABIV2Keyword = &Variant_GetMacro();
+
+sub BPABIutl_Plat_List {
+
+# Identify the BPABI platforms to be supported based on the compiler configuration files
+# present in the location specified by the environment variable "SYMBIAN_COMPILATION_CONFIG_DIR"
+# and in the directory $EPOCROOT\epoc32\tools\compilation_config
+
+ my @CompilerConfigPath;
+
+ if (exists($ENV{'SYMBIAN_COMPILATION_CONFIG_DIR'}))
+ {
+ my $Path = $ENV{SYMBIAN_COMPILATION_CONFIG_DIR};
+ @CompilerConfigPath = split(/;/, $Path);
+ }
+
+ push @CompilerConfigPath, "$ENV{EPOCROOT}epoc32\\tools\\compilation_config";
+
+ my $ConfigDir;
+ my @BPABIPlats = ();
+
+ foreach $ConfigDir (@CompilerConfigPath)
+ {
+ opendir DIR, "$ConfigDir";
+ my @Plats=grep /\.mk$/i, readdir DIR;
+ my $Plat;
+ foreach $Plat (@Plats)
+ {
+# The platform name will be same as the name of the configuration file <config.mk>
+# with the suffix '.mk' removed
+ $Plat =~ s/\.mk//;
+ if ($variantABIV2Keyword) {
+ if ($Plat =~ /^armv5_abiv2$/i) {
+ $Plat = "ARMV5";
+ }
+ }
+ else {
+ if ($Plat =~ /^armv5$/i) {
+ $Plat = "ARMV5_ABIV2";
+ }
+ }
+ unless (grep /$Plat$/i, @BPABIPlats) {
+ $Plat = uc $Plat;
+ push @BPABIPlats, $Plat;
+ if (!$variantABIV2Keyword && $Plat =~ /^ARMV5_ABIV2$/i) {
+ $ConfigPath{$Plat} = "$ConfigDir\\ARMV5.mk";
+ }
+ else {
+ $ConfigPath{$Plat} = "$ConfigDir\\$Plat.mk";
+ }
+ }
+ }
+ }
+ closedir DIR;
+ return @BPABIPlats;
+}
+
+sub BPABIutl_Config_Path($) {
+ my ($plat) = @_;
+# Returns the Path of the compiler configuration file
+ if (!keys(%ConfigPath))
+ {
+ # Running for first time so initialise ConfigPath
+ BPABIutl_Plat_List();
+ }
+ if (!$ConfigPath{$plat})
+ {
+ # Get the root platform name to support hierarchy of customizations
+ my $CustomizedPlat = &E32Plat::Plat_Root($plat);
+
+# In default ABIV1 mode, the platform name for v2 mode of ARMV5 is ARMV5_ABIV2
+ if ( !$variantABIV2Keyword && $CustomizedPlat =~ /^ARMV5$/i ){
+ $ConfigPath{$plat} = $ConfigPath{ARMV5_ABIV2};
+ }
+
+# In default ABIV2 mode, the platform name for v2 mode of ARMV5 is ARMV5
+ elsif ( $variantABIV2Keyword && $CustomizedPlat =~ /^ARMV5$/i) {
+ $ConfigPath{$plat} = $ConfigPath{ARMV5};
+ }
+ else{
+ $ConfigPath{$plat}=$ConfigPath{$CustomizedPlat};
+ }
+ }
+ return "$ConfigPath{$plat}";
+}
+
+# routine to extract a set of variables from the compilation configuration
+# file. The variables extracted are determined by the extractvars.make file.
+# The variables are returned in a hash.
+sub BPABIutl_Get_Config_Variables
+{
+ my ($plat) = @_;
+ my $configfile = BPABIutl_Config_Path($plat);
+ my $extractvars = "$ENV{EPOCROOT}epoc32\\tools\\compilation_config\\extractvars.make";
+ my $command = "make CONFIG_FILE=$configfile -s -f $extractvars" ;
+ my $result = `$command`;
+ my %vars;
+ my @lines = split('\n', $result);
+ foreach my $line (@lines)
+ {
+ chomp $line;
+ if ($line =~ /(\w+)=(.*)/)
+ {
+ $vars{$1} = $2;
+ }
+ }
+ return %vars;
+}
+
+1;