Rev 7526 | 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 BASE_TARGET), @BuildAliases );## An array of platform aliases that will be expanded into multiple platforms#our @BuildFamilies = qw (ANDROIDNDK DEVLINUX GENERICS LINUX LMOS LMOS_DEVLINUX MSWIN32 MSWIN64 SOLARIS WINCE WINCE6 WINCE7 SK);## 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 - Suitable 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# GENERIC_MACHTYPE - Can be built on a specific machine type (Auto generated)# 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# SOLARIS - Part of the SOLARIS alias# MACHTYPE - Machine Type to build on (Auto generated)# BASE_TARGET - Underling platform# NOTABT - Not available on a sanctioned build machine (GBE_ABT defined)### Platforms that are nolonger supported. We have no compilers for them and they have never been in the build system.# ACEX AMX CMOS386 CMOS68K DF4OBE DOS16 DOS32 EEPP386 EETP386 EOS EOSM68K EOSP386 GMPCA GO32# HK386PC HKAVM HKAVM2 HKBCP HKDDU HKGAK HKMPR HKPCA LINUX86 LINUX_ARMV4 MERG NGBCP NGDDU PHARLAP##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','LINUX_EMU:LMOS','LINUX_ETX:DEVLINUX:LMOS','LINUX_I386:LMOS: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:PKG_DEB','UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT','VIPER2:DEVLINUX:PKG_DEB',],'linux_x64' => ['ANDROID:NOTABT','LINUX_I386:LMOS: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','ANDROIDARMV7:ANDROIDNDK','ANDROIDMIPS:ANDROIDNDK','ANDROIDX86:ANDROIDNDK','ANDROIDARM64:ANDROIDNDK','ANDROIDMIPS64:ANDROIDNDK','ANDROIDX86_64:ANDROIDNDK','ANDROID','ARM9TDMI:DEVLINUX:LMOS','COBRA:DEVLINUX:LMOS:PKG_DEB','COBRA2:DEVLINUX:LMOS:PKG_DEB','HAMMERHEAD:PKG_DEB','LINUX_ETX:DEVLINUX:LMOS','PPC_603E:DEVLINUX:LMOS:PKG_DEB','SK20:DEVLINUX:PKG_DEB:SK','SK20V41:DEVLINUX:PKG_DEB:SK','STIBAXIO:DEVLINUX:PKG_DEB','SK100:DEVLINUX:PKG_DEB:SK','UBUNTU12C11:NATIVE:DEVLINUX:PKG_DEB','UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT','VIPER2:DEVLINUX:PKG_DEB','MANSIG',],'linux_el7_x64' => ['RHEL7:TOOLSET:NATIVE:PKG_RPM','RHEL7_INSTRUMENT:NATIVE:INSTRUMENT',],'solaris10_sparc32' => ['SOLARIS10_SPARC32:SOLARIS:NATIVE:TOOLSET','SOLARIS10_SPARC64:SOLARIS:NATIVE','JAVA:NATIVE',],'solaris10_x86' => ['SOLARIS10_X86:SOLARIS:NATIVE:TOOLSET','SOLARIS10_X64:SOLARIS:NATIVE','JAVA:NATIVE',],'sparc' => ['SOLARIS8_SPARC32:SOLARIS:NATIVE:TOOLSET','JAVA:NATIVE',],'win32' => ['ANDROID','ARM_I5100','AVR_IAR','BORLAND','CORTEXM3_IAR','CSHARP:NATIVE','CSHARP2005:NATIVE','CSHARP2008:NATIVE','CSHARP2010:NATIVE','CSHARP2012:NATIVE','CSHARP2015:NATIVE','DAFBR_MOS','DAFBR_WIN','DELPHI7','H8S','H400','INGEN','INTELLECT','JAVA:NATIVE','MCR','MOS68K','MOS68KRM','MOSCF','MPT','VSDEVRC','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','WCEX86A700_SOM4466:WINCE7:WINCE','WCE6ARMV4I:WINCE6','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# Add in the GENERIC_MACHTYPE target# Add in LMOS targets## Inputs : None## Returns : Nothing#sub InitData{## Only do this work once#return if exists $TagByTarget{'GENERIC'};## Process all machine types# Processes myself first# Process linux_x64 before linux_i386#Error("GBE_MACHTYPE has not been defined ") unless defined $::GBE_MACHTYPE;foreach my $machType ( $::GBE_MACHTYPE, qw(linux_x64 linux_i386 linux_el7_x64 solaris10_sparc32 solaris10_x86 sparc win32 )){## Validate build machine#Error("GBE_MACHTYPE has not been defined ") unless defined $machType;Error (__PACKAGE__ . " : Unknown build machine type: $machType")unless ( exists $BuildAvailability{$machType} );## Convert the array into a hash to speed up access later# Create GENERIC platform#push @{$BuildAvailability{$machType}}, 'GENERIC:GENERIC';## Create Machine Type specific Generic# GENERIC_XXXX:GENERIC_MACHTYPE:TOOLSET#my $genericMachTypes = 'GENERIC_' . uc ($machType);push @{$BuildAvailability{$machType}}, join (':', $genericMachTypes, 'GENERIC_MACHTYPE', 'TOOLSET', 'GENERICS' );foreach ( @{$BuildAvailability{$machType}} ){my @data = split(':', $_ );my $target = uc shift @data;my $hasLMOS;## Add in MACHTYPE, only the first machine is processed#next if exists $TagByTarget{$target}{'MACHTYPE'};$TagByTarget{$target}{'MACHTYPE'} = $machType;## If tagged as NOTABT and we are working on a sanctioned build machine# with GBE_ABT set, then ignore this target. It cannot be built on a build# machine. Used where we can develop on multiple machines but perform sanctioned builds# only on one machine type.#if (defined $::GBE_ABT) {my $hasNotAbt = (grep $_ eq 'NOTABT', @data);if ($hasNotAbt) {Warning("NotAbt. $target is not supported in a build system under $machType" );next;}}## Add items into data structures# Allow for AAAAA=Value#foreach my $item ( @data ){if ($item eq 'LMOS') {$hasLMOS = 1;next;}($item, my $value) = split (/=/, $item,2);$value = 1 unless defined $value;$TagByTarget{$target}{uc($item)} = $value;push @{$TargetByTag{uc($item)}}, $target;}## Generate LMOS platforms entries from the base platform entry# Similar to above, but it has LMOS prefix# Some tags are not applicable to LMOS# TOOLSET - Will never have an LMOS based toolset# Some tags will not have LMOS_ prefixes# NATIVE PKG_WIN PKG_RPM PKG_DEB SK# ie: Those in @BuildAliases#if ($hasLMOS){my $lmosTarget = 'LMOS_' . $target;next if exists $TagByTarget{$lmosTarget}{'MACHTYPE'};$TagByTarget{$lmosTarget}{'MACHTYPE'} = $machType;$TagByTarget{$lmosTarget}{'BASE_TARGET'} = $target;push @{$TargetByTag{uc('LMOS')}}, $lmosTarget;foreach my $item ( @data ){next if ($item eq 'LMOS');next if ($item eq 'TOOLSET');($item, my $value) = split (/=/, $item,2);$value = 1 unless defined $value;unless (grep /^$item$/, @BuildAliases) {$item = 'LMOS_' . $item;}$TagByTarget{$lmosTarget}{uc($item)} = $value;push @{$TargetByTag{uc($item)}}, $lmosTarget;}}}}#DebugDumpData("TagByTarget", \%TagByTarget);#DebugDumpData("TargetByTag", \%TargetByTag);#DebugDumpData("BuildAvailability", \%BuildAvailability);}#-------------------------------------------------------------------------------# 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 : Determine if 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) = @_;my $value = 0;Error("Internal: targetHasTag. No target specified") unless ($target);Error("Internal: targetHasTag. No tag specified") unless ($tag);InitData();$target = uc ($target);if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag})){$value = $TagByTarget{$target}{$tag};}Debug3("targetHasTag: @_ -> $value");return $value;}#-------------------------------------------------------------------------------# Function : validMachType## Description : Determine if a given machType is known to the system## Inputs : machType - to be tested## Returns : true - known to the system# false - no known.#sub validMachType {my ($machType) = @_;return exists $BuildAvailability{lc $machType};}#-------------------------------------------------------------------------------# Function : getGenericMachType## Description : Calculate the generic machine type(s) for a specified target(s)## Inputs : A target to process## Returns : An array of machine types#sub getGenericMachType {my ($target) = @_;my $machType;if (exists $TagByTarget{$target}) {$machType = 'GENERIC_' . uc ($TagByTarget{$target}{MACHTYPE});}return $machType;}1;