sbsv1_os/e32toolp/platform/armutl.pm
author Mike Kinghan <mikek@symbian.org>
Tue, 16 Nov 2010 14:32:12 +0000
branchGCC_SURGE
changeset 79 f7dee603db09
parent 0 83f4b4db085c
child 10 d4b442d23379
permissions -rw-r--r--
[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) 2002-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 armedg modules
# 
#

package Armutl;

require Exporter;
@ISA=qw(Exporter);
@EXPORT=qw(
	Armutl_Help_Mmp

	Armutl_DoMmp

	Armutl_ArmIncDir
	Armutl_ArmLibList
	Armutl_ArmRT
	Armutl_AsmFileList
	Armutl_ArmVersion
	Armutl_RVCTMajorVersion
	Armutl_RVCTMinorVersion
	Armutl_RVCTPatchLevel
	Armutl_RVCTBuildNumber
	Armutl_ArmLibDir
);

use strict;
use RVCT_plat2set;

my $ArmInc='';
my @ArmLibList=();
my $ArmRT=0;
my @AsmFileList=();

# make sure that some of the tool subroutines  still work in case of Plat() does not exists in namespace main
my $Plat = main::Plat() if defined &main::Plat;

my ($RVCTMajorVersion, $RVCTMinorVersion, $RVCTBuildNumber) = RVCT_plat2set::get_version_list($Plat);

my $RVCTVersion = "$RVCTMajorVersion.$RVCTMinorVersion";
my $RVCTPatchLevel = 0;


sub Armutl_Help_Mmp {
# provide the help text for START <armedg platforms> END blocks

	print
		"ARMINC  // include value of RVCT*INC environment variable to search paths\n",
		"ARMLIBS // list the ARM supplied libraries to be linked against\n",
		"ARMRT   // indicates this target froms part of the runtime and so\n",
                "        // shouldn't be linked against itself or other runtime libs\n",
	        "ARMNAKEDASM // list .cpp files subject to auto-translation from GCC inline asm to ARM embedded asm\n"
	;
}

sub Armutl_DoMmp (@) { # takes platform text
	my @PlatTxt=@_;

	my $BaseTrg=&main::BaseTrg;
	my $BasicTrgType=&main::BasicTrgType;
	my $MakeFilePath=&main::MakeFilePath;
	my $MMPFILE=&main::MmpFile;
	my @UidList=&main::UidList;

	# set up START ARMV5|THUMB2 ... END block module variables
	my @MmpWarn=();
	my $Line;

	LINE: foreach $Line (@PlatTxt) {
		my $LineInfo=shift @$Line;
		$_=shift @$Line;
		if (/^ARMINC$/o) {
			$ArmInc = RVCT_plat2set::get_inc_path($Plat);
			next LINE;
		}
		if (/^ARMRT$/o) {
		    $ArmRT = 1;
		    next LINE;
		}
		if (/^ARMLIBS$/o) {
			my $LibVar = "RVCT${RVCTMajorVersion}${RVCTMinorVersion}LIB";
			my $ArmLibDir = RVCT_plat2set::get_lib_path($Plat);

			push @MmpWarn, "$LineInfo : No libraries specified for keyword ARMLIBS\n" unless @$Line;

			while (@$Line) {
			  my $lib = shift @$Line;

              my $lib_path = RVCT_plat2set::find_lib( $Plat, $lib );

              if ($lib_path)
              {
				  push @ArmLibList, $lib_path;
              }
              else
              {
				  push @MmpWarn, "$LineInfo : arm library file $lib not found.\n" ;
              }
			}
			next LINE;
		      }
		if (/^ARMNAKEDASM$/o) {
		    push @MmpWarn, "$LineInfo : No files specified for keyword ARMNAKEDASM\n" unless @$Line;
		    push @AsmFileList, @$Line;
		    next LINE;
		}
		push @MmpWarn, "$LineInfo : Unrecognised Keyword \"$_\"\n";
	}

	undef $Line;
	if (@MmpWarn) {
		warn
			"\nMMPFILE \"$MMPFILE\"\n",
			"START .. END BLOCK WARNINGS(S)\n",
			@MmpWarn,
			"\n"
		;
	}
	undef @MmpWarn;
    }

sub Armutl_ArmIncDir() {
    $ArmInc;
}

sub Armutl_ArmLibList() {
    @ArmLibList;
}

sub Armutl_ArmRT() {
    $ArmRT;
}

sub Armutl_AsmFileList() {
    @AsmFileList;
}

sub Armutl_ArmVersion() {
  return $RVCTVersion;
}

sub Armutl_RVCTMajorVersion() {
  return $RVCTMajorVersion;
}

sub Armutl_RVCTMinorVersion() {
  return $RVCTMinorVersion;
}

sub Armutl_RVCTPatchLevel() {
  return $RVCTPatchLevel;
}

sub Armutl_RVCTBuildNumber() {
  return $RVCTBuildNumber;
}

sub Armutl_ArmLibDir() {
  my $LibVar = "RVCT${RVCTMajorVersion}${RVCTMinorVersion}LIB";
  my $ArmLibDir = $ENV{$LibVar};
  return $ArmLibDir;
}

1;