Rev 6177 | Rev 6276 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
######################################################################### COPYRIGHT - VIX IP PTY LTD ("VIX"). ALL RIGHTS RESERVED.## Module name : PLATFORM_CFG.PM# Module type : Makefile system# Compiler(s) : Perl# Environment(s): jats## Description : Provides platform configuration information## The main pupose of this configuration information is to# prevent JATS from attempting to build software on# a platform that does not support the required compilers## ie: Its not possible to build PPC_302E on a windows# Nor is it possbile to build WIN32 on a Sun Sparc## This can be done via GBE_BUILDFILTER, but results in# an unwieldy GBE_BUILDFILTER. Better to prune the# targets at the start##......................................................................#require 5.008_002;use strict;use warnings;package PlatformConfig;use JatsError;## An array of known Keywords and Aliases# Keywords should not be used for platform names# Aliases are set up for the user#our @BuildAliases = qw (NATIVE INSTRUMENT PKG_WIN PKG_RPM PKG_DEB SK );our @BuildKeywords = ( qw (TOOLSET GENERIC GENERIC_MACHTYPE), @BuildAliases );## The following structure is a hash of arrays# The hash key is a supported machine type - one per machine# The data is an array of supported PLATFORMS# Each platform may have a : seperated list of tags# Known tags include:# TOOLSET - Sutable for building JATS tools# NATIVE - Can be expected to run on the build machine# KNOWN - Indicated platform is known to this machine type. Used to test existence# GENERIC - Can be built on any machine# DEVLINUX - Part of the DEVLINUX alias# LINUX - Part of the LINUX alias# LMOS - Bastard Platforms from Hell# PKG_DEB - Install Debian Packages# PKG_RPM - Install RPM Packages# PKG_WIN - Install Windows Installers# SK - The SK familty of platforms#our %BuildAvailability = ('linux_i386' => ['ANDROIDARM:ANDROIDNDK','ANDROIDMIPS:ANDROIDNDK','ANDROIDX86:ANDROIDNDK','ANDROID','ARM9TDMI:DEVLINUX:LMOS:PKG_DEB','COBRA:DEVLINUX:LMOS:PKG_DEB','COBRA2:DEVLINUX:LMOS:PKG_DEB','HAMMERHEAD:PKG_DEB','JAVA:NATIVE','LINUX86','LINUX_ARMV4','LINUX_EMU','LINUX_ETX:DEVLINUX:LMOS','LINUX_I386:NATIVE:TOOLSET','PPC_603E:DEVLINUX:LMOS:PKG_DEB','SK20:DEVLINUX:PKG_DEB:SK','SK20V41:DEVLINUX:PKG_DEB:SK','UBUNTU12:NATIVE:TOOLSET:DEVLINUX:LMOS:PKG_DEB','UBUNTU12_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT','UBUNTU12C11:NATIVE:TOOLSET:DEVLINUX:LMOS:PKG_DEB','UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT','VIPER2:DEVLINUX:PKG_DEB',],'linux_x64' => ['LINUX_I386:NATIVE:PKG_DEB','JAVA:NATIVE','UBUNTU14:NATIVE:TOOLSET:LINUX:PKG_DEB','UBUNTU14_INSTRUMENT:NATIVE:LINUX:INSTRUMENT','UBUNTU16:NATIVE:TOOLSET:LINUX:PKG_DEB','UBUNTU16_INSTRUMENT:NATIVE:LINUX:INSTRUMENT','ANDROIDARM:ANDROIDNDK','ANDROIDMIPS:ANDROIDNDK','ANDROIDX86:ANDROIDNDK','ANDROID','ARM9TDMI:DEVLINUX:LMOS','COBRA:DEVLINUX:LMOS:PKG_DEB','COBRA2:DEVLINUX:LMOS:PKG_DEB','HAMMERHEAD','LINUX_ETX:DEVLINUX:LMOS','PPC_603E:DEVLINUX:LMOS:PKG_DEB','SK20:DEVLINUX:PKG_DEB:SK','SK20V41:DEVLINUX:PKG_DEB:SK','SK100:DEVLINUX:PKG_DEB:SK','UBUNTU12C11:NATIVE:DEVLINUX:LMOS:PKG_DEB','UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT','VIPER2:DEVLINUX:PKG_DEB',],'linux_el7_x64' => ['RHEL7:LINUX:TOOLSET:NATIVE:PKG_RPM','RHEL7_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',],'solaris10_sparc32' => ['SOLARIS10_SPARC32:NATIVE:TOOLSET','SOLARIS10_SPARC64:NATIVE','JAVA:NATIVE',],'solaris10_x86' => ['SOLARIS10_X86:NATIVE:TOOLSET','SOLARIS10_X64:NATIVE','JAVA',],'sparc' => ['SOLARIS:NATIVE:TOOLSET:TARGET_CFG=SOLARIS8_SPARC32','SOLARIS_I386','SOLARIS_SPARC','JAVA:NATIVE',],'win32' => ['ANDROID','ACEX','AMX','ARM_I5100','AVR_IAR','BORLAND','CMOS386','CMOS68K','CORTEXM3_IAR','CSHARP:NATIVE','CSHARP2005:NATIVE','CSHARP2008:NATIVE','CSHARP2010:NATIVE','CSHARP2012:NATIVE','CSHARP2015:NATIVE','DAFBR_MOS','DAFBR_WIN','DELPHI7','DF4OBE','DOS16','DOS32','EEPP386','EETP386','EOS','EOSM68K','EOSP386','GMPCA','GO32','H8S','H400','HK386PC','HKAVM','HKAVM2','HKBCP','HKDDU','HKGAK','HKMPR','HKPCA','INGEN','INTELLECT','JAVA:NATIVE','MCR','MERG','MOS68K','MOS68KRM','MOSCF','MPT','VSDEVRC','NGBCP','NGDDU','PHARLAP','PHP','RIORDS','THYRON','VB6','VERIX','VIXITP','VS2003:NATIVE','VS2005:NATIVE:MSWIN32','VS2008:NATIVE','VS2010:NATIVE','VS2012:NATIVE:TOOLSET:MSWIN32:PKG_WIN','VS2015:NATIVE:TOOLSET:MSWIN32:PKG_WIN','WCEIPA280:WINCE','WCEIT3000:WINCE','WCENAUTIZX5','WCEPA961:WINCE','WCEPA962:WINCE','WCEPA962_500:WINCE','WCEPCM7220:WINCE','WCEPSION_420','WCEPSION_500:WINCE','WCEPSION_500_emu:WINCE','WCEPSION_500_VS2005:WINCE','WCEPSPC_arm:WINCE','WCEPSPC_emu:WINCE','WCEX86A420:WINCE','WCEX86A500:WINCE','WCEX86A500_SOM4455:WINCE','WIN32:NATIVE:TOOLSET:MSWIN32:LMOS:PKG_WIN','VS2012_X64:NATIVE:MSWIN64:PKG_WIN','VS2015_X64:NATIVE:MSWIN64:PKG_WIN',],);## The above data will be reorganised and placed into the following# hashes to simplify data access#my %TargetByTag;my %TagByTarget;#-------------------------------------------------------------------------------# Function : InitData## Description : Init data structures# Done once## Convert the $BuildAvailability entry array into a hash to# simplify lookup. Add in the GENERIC target:# GENERIC - can be built on ANY machine## Inputs : None## Returns : Nothing#sub InitData{## Only do this work once#return if exists $TagByTarget{'GENERIC'};## Validate build machine#Error("GBE_MACHTYPE has not been defined ") unless defined $::GBE_MACHTYPE;Error (__PACKAGE__ . " : Unknown build machine type: $::GBE_MACHTYPE")unless ( exists $BuildAvailability{$::GBE_MACHTYPE} );## Convert the array into a hash to speed up access later# Create GENERIC platform#push @{$BuildAvailability{$::GBE_MACHTYPE}}, 'GENERIC:GENERIC';## Create Machine Type specific Generic# GENERIC_XXXX:GENERIC_MACHTYPE:TOOLSET#my $genericMachTypes = 'GENERIC_' . uc ($::GBE_MACHTYPE);push @{$BuildAvailability{$::GBE_MACHTYPE}}, join (':', $genericMachTypes, 'GENERIC_MACHTYPE', 'TOOLSET' );foreach ( @{$BuildAvailability{$::GBE_MACHTYPE}} ){my @data = split(':', $_ );my $target = shift @data;$TagByTarget{$target}{'KNOWN'} = 1;foreach my $item ( @data ){($item, my $value) = split (/=/, $item,2);$value = 1 unless defined $value;$TagByTarget{$target}{uc($item)} = $value;push @{$TargetByTag{uc($item)}}, $target;}}#DebugDumpData("TagByTarget", \%TagByTarget);#DebugDumpData("TargetByTag", \%TargetByTag);}#-------------------------------------------------------------------------------# Function : getTargetsByTag## Description : Fetch an array of build platforms that are tagged## Inputs : $tag - Tag to process## Returns : An array of targets. May be empty#sub getTargetsByTag{my ($tag) = @_;Error("Internal: getTargetsByTag. No tag specified") unless ($tag);InitData();if (exists ($TargetByTag{uc($tag)}) ){return @{$TargetByTag{uc($tag)}};}my @empty;return @empty;}#-------------------------------------------------------------------------------# Function : targetHasTag## Description : Determineif the named target has the specified tag## Inputs : $target# $tag## Returns : Value of the Tag. May be 1# Tags of the form NAME=VALUE wull return 'VALUE'#sub targetHasTag{my ($target, $tag) = @_;Error("Internal: targetHasTag. No target specified") unless ($target);Error("Internal: targetHasTag. No tag specified") unless ($tag);InitData();if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag})){return $TagByTarget{$target}{$tag};}return 0;}1;