Subversion Repositories DevTools

Rev

Rev 7299 | Rev 7304 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
279 dpurdie 1
########################################################################
7300 dpurdie 2
# COPYRIGHT - VIX IP PTY LTD ("VIX"). ALL RIGHTS RESERVED.
279 dpurdie 3
#
4
# Module name   : PLATFORM_CFG.PM
5
# Module type   : Makefile system
6
# Compiler(s)   : Perl
7
# Environment(s): jats
8
#
9
# Description   : Provides platform configuration information
10
#
11
#                 The main pupose of this configuration information is to
12
#                 prevent JATS from attempting to build software on
13
#                 a platform that does not support the required compilers
14
#
15
#                 ie: Its not possible to build PPC_302E on a windows
16
#                     Nor is it possbile to build WIN32 on a Sun Sparc
17
#
18
#                 This can be done via GBE_BUILDFILTER, but results in
19
#                 an unwieldy GBE_BUILDFILTER. Better to prune the
20
#                 targets at the start
21
#
22
#......................................................................#
23
 
24
require 5.008_002;
25
use strict;
26
use warnings;
27
 
28
package PlatformConfig;
29
use JatsError;
30
 
31
#
32
#   The following structure is a hash of arrays
33
#   The hash key is a supported machine type - one per machine
34
#   The data is an array of supported PLATFORMS
6133 dpurdie 35
#   Each platform may have a : seperated list of tags
36
#   Known tags include:
37
#       TOOLSET - Sutable for building JATS tools
38
#       NATIVE  - Can be expected to run on the build machine
39
#       KNOWN - Indicated platform is known to this machine type. Used to test existence 
40
#       GENERIC - Can be built on any machine
41
#       DEVLINUX - Part of the DEVLINUX alias
42
#       LINUX - Part of the LINUX alias 
7300 dpurdie 43
#       LMOS - Bastard Platforms from Hell
44
#       PKG_DEB - Install Debian Packages   
45
#       PKG_RPM - Install RPM Packages
46
#       PKG_WIN - Install Windows Installers
279 dpurdie 47
#
48
my %BuildAvailability = (
49
    'linux_i386' => [
6133 dpurdie 50
        'ANDROIDARM:ANDROIDNDK',
51
        'ANDROIDMIPS:ANDROIDNDK',
52
        'ANDROIDX86:ANDROIDNDK',
4324 dpurdie 53
        'ANDROID',
7300 dpurdie 54
        'ARM9TDMI:DEVLINUX:LMOS:PKG_DEB',
55
        'COBRA:DEVLINUX:LMOS:PKG_DEB',
56
        'COBRA2:DEVLINUX:LMOS:PKG_DEB',
57
        'HAMMERHEAD:PKG_DEB',
4728 dpurdie 58
        'JAVA:NATIVE',
279 dpurdie 59
        'LINUX86',
60
        'LINUX_ARMV4',
61
        'LINUX_EMU',
6133 dpurdie 62
        'LINUX_ETX:DEVLINUX:LMOS',
63
        'LINUX_I386:NATIVE:TOOLSET',
7300 dpurdie 64
        'PPC_603E:DEVLINUX:LMOS:PKG_DEB',
65
        'SK20:DEVLINUX:PKG_DEB',
66
        'SK20V41:DEVLINUX:PKG_DEB',
67
        'UBUNTU12:NATIVE:TOOLSET:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 68
        'UBUNTU12_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 69
        'UBUNTU12C11:NATIVE:TOOLSET:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 70
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 71
        'VIPER2:DEVLINUX:PKG_DEB',
279 dpurdie 72
        ],
73
 
4162 dpurdie 74
    'linux_x64' => [
7300 dpurdie 75
        'LINUX_I386:NATIVE:PKG_DEB',
6133 dpurdie 76
        'JAVA:NATIVE',
7300 dpurdie 77
        'UBUNTU14:NATIVE:TOOLSET:LINUX:PKG_DEB',
6133 dpurdie 78
        'UBUNTU14_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
7300 dpurdie 79
        'UBUNTU16:NATIVE:TOOLSET:LINUX:PKG_DEB',
6133 dpurdie 80
        'UBUNTU16_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
81
        'ANDROIDARM:ANDROIDNDK',
82
        'ANDROIDMIPS:ANDROIDNDK',
83
        'ANDROIDX86:ANDROIDNDK',
84
        'ANDROID',
85
        'ARM9TDMI:DEVLINUX:LMOS',
7300 dpurdie 86
        'COBRA:DEVLINUX:LMOS:PKG_DEB',
87
        'COBRA2:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 88
        'HAMMERHEAD',
89
        'LINUX_ETX:DEVLINUX:LMOS',
7300 dpurdie 90
        'PPC_603E:DEVLINUX:LMOS:PKG_DEB',
91
        'SK20:DEVLINUX:PKG_DEB',
92
        'SK20V41:DEVLINUX:PKG_DEB',
93
        'UBUNTU12C11:NATIVE:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 94
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 95
        'VIPER2:DEVLINUX:PKG_DEB',
4162 dpurdie 96
        ],
97
 
7300 dpurdie 98
    'linux_el7_x64' => [
99
        'RHEL7:LINUX:TOOLSET:NATIVE:PKG_RPM',
100
        'RHEL7_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
101
        ],
102
 
279 dpurdie 103
    'solaris10_sparc32' => [
6133 dpurdie 104
        'SOLARIS10_SPARC32:NATIVE:TOOLSET',
4728 dpurdie 105
        'SOLARIS10_SPARC64:NATIVE',
106
        'JAVA:NATIVE',
279 dpurdie 107
        ],
108
 
109
    'solaris10_x86' => [
6133 dpurdie 110
        'SOLARIS10_X86:NATIVE:TOOLSET',
4728 dpurdie 111
        'SOLARIS10_X64:NATIVE',
279 dpurdie 112
        'JAVA',
113
        ],
114
 
115
    'sparc' => [
6133 dpurdie 116
        'SOLARIS:NATIVE:TOOLSET',
279 dpurdie 117
        'SOLARIS_I386',
118
        'SOLARIS_SPARC',
4728 dpurdie 119
        'JAVA:NATIVE',
279 dpurdie 120
        ],
121
 
122
    'win32' => [
4928 dpurdie 123
        'ANDROID',
279 dpurdie 124
        'ACEX',
125
        'AMX',
363 dpurdie 126
        'ARM_I5100',
279 dpurdie 127
        'AVR_IAR',
128
        'BORLAND',
129
        'CMOS386',
130
        'CMOS68K',
5679 dpurdie 131
        'CORTEXM3_IAR',
4728 dpurdie 132
        'CSHARP:NATIVE',
133
        'CSHARP2005:NATIVE',
134
        'CSHARP2008:NATIVE',
135
        'CSHARP2010:NATIVE',
136
        'CSHARP2012:NATIVE',
6133 dpurdie 137
        'CSHARP2015:NATIVE',
279 dpurdie 138
        'DAFBR_MOS',
139
        'DAFBR_WIN',
289 dpurdie 140
        'DELPHI7',
279 dpurdie 141
        'DF4OBE',
142
        'DOS16',
143
        'DOS32',
144
        'EEPP386',
145
        'EETP386',
146
        'EOS',
147
        'EOSM68K',
148
        'EOSP386',
149
        'GMPCA',
150
        'GO32',
151
        'H8S',
283 dpurdie 152
        'H400',
279 dpurdie 153
        'HK386PC',
154
        'HKAVM',
155
        'HKAVM2',
156
        'HKBCP',
157
        'HKDDU',
158
        'HKGAK',
159
        'HKMPR',
160
        'HKPCA',
161
        'INGEN',
3832 dpurdie 162
        'INTELLECT',
4728 dpurdie 163
        'JAVA:NATIVE',
279 dpurdie 164
        'MCR',
165
        'MERG',
166
        'MOS68K',
167
        'MOS68KRM',
168
        'MOSCF',
169
        'MPT',
3564 dpurdie 170
        'VSDEVRC',
279 dpurdie 171
        'NGBCP',
172
        'NGDDU',
173
        'PHARLAP',
345 dpurdie 174
        'PHP',
371 dpurdie 175
        'RIORDS',
279 dpurdie 176
        'THYRON',
315 dpurdie 177
        'VB6',
279 dpurdie 178
        'VERIX',
383 dpurdie 179
        'VIXITP',
4728 dpurdie 180
        'VS2003:NATIVE',
181
        'VS2005:NATIVE',
182
        'VS2008:NATIVE',
183
        'VS2010:NATIVE',
7300 dpurdie 184
        'VS2012:NATIVE:TOOLSET:MSWIN32:PKG_WIN',
185
        'VS2015:NATIVE:TOOLSET:MSWIN32:PKG_WIN',
6133 dpurdie 186
        'WCEIPA280:WINCE',
187
        'WCEIT3000:WINCE',
399 dpurdie 188
        'WCENAUTIZX5',
6133 dpurdie 189
        'WCEPA961:WINCE',
190
        'WCEPA962:WINCE',
191
        'WCEPA962_500:WINCE',
192
        'WCEPCM7220:WINCE',
279 dpurdie 193
        'WCEPSION_420',
6133 dpurdie 194
        'WCEPSION_500:WINCE',
195
        'WCEPSION_500_emu:WINCE',
196
        'WCEPSION_500_VS2005:WINCE',
197
        'WCEPSPC_arm:WINCE',
198
        'WCEPSPC_emu:WINCE',
199
        'WCEX86A420:WINCE',
200
        'WCEX86A500:WINCE',
201
        'WCEX86A500_SOM4455:WINCE',
7300 dpurdie 202
        'WIN32:NATIVE:TOOLSET:MSWIN32:LMOS:PKG_WIN',
203
        'VS2012_X64:NATIVE:MSWIN64:PKG_WIN',
204
        'VS2015_X64:NATIVE:MSWIN64:PKG_WIN',
279 dpurdie 205
        ],
4814 dpurdie 206
 
279 dpurdie 207
);
208
 
209
#
210
#   The above data will be reorganised and placed into the following
6133 dpurdie 211
#   hashes to simplify data access
279 dpurdie 212
#
6133 dpurdie 213
my %TargetByTag;
214
my %TagByTarget;
279 dpurdie 215
 
216
#-------------------------------------------------------------------------------
217
# Function        : InitData
218
#
219
# Description     : Init data structures
220
#                   Done once
221
#
4551 dpurdie 222
#                   Convert the $BuildAvailability entry array into a hash to 
6133 dpurdie 223
#                   simplify lookup. Add in the GENERIC target:
4551 dpurdie 224
#                       GENERIC         - can be built on ANY machine
279 dpurdie 225
#
226
# Inputs          : None
227
#
228
# Returns         : Nothing
229
#
230
sub InitData
231
{
232
    #
233
    #   Only do this work once
234
    #
6133 dpurdie 235
    return if exists $TagByTarget{'GENERIC'};
279 dpurdie 236
    #
237
    #   Validate build machine
238
    #
239
    Error (__PACKAGE__ . " : Unknown build machine type: $::GBE_MACHTYPE")
240
        unless ( exists $BuildAvailability{$::GBE_MACHTYPE} );
241
 
242
    #
4551 dpurdie 243
    #   Convert the array into a hash to speed up access later
6133 dpurdie 244
    #   Create GENERIC platform
279 dpurdie 245
    #
6133 dpurdie 246
    push @{$BuildAvailability{$::GBE_MACHTYPE}}, 'GENERIC:GENERIC';
247
 
248
    #
249
    #   Create Machine Type specific Generic
250
    #       GENERIC_XXXX:GENERIC_MACHTYPE:TOOLSET
251
    #   
252
    my $genericMachTypes = 'GENERIC_' . uc ($::GBE_MACHTYPE);
253
    push @{$BuildAvailability{$::GBE_MACHTYPE}}, join (':', $genericMachTypes, 'GENERIC_MACHTYPE', 'TOOLSET' );
254
 
279 dpurdie 255
    foreach ( @{$BuildAvailability{$::GBE_MACHTYPE}}  )
256
    {
4728 dpurdie 257
        my @data = split(':', $_ );
6133 dpurdie 258
        my $target = shift @data;
259
 
260
        $TagByTarget{$target}{'KNOWN'} = 1;
261
        foreach my $item ( @data )
4728 dpurdie 262
        {
6133 dpurdie 263
            $TagByTarget{$target}{uc($item)} = 1;
264
            push @{$TargetByTag{uc($item)}}, $target;
4728 dpurdie 265
        }
279 dpurdie 266
    }
4551 dpurdie 267
 
6133 dpurdie 268
    #DebugDumpData("TagByTarget", \%TagByTarget);
269
    #DebugDumpData("TargetByTag", \%TargetByTag);
279 dpurdie 270
}
271
 
272
#-------------------------------------------------------------------------------
6133 dpurdie 273
# Function        : getTargetsByTag 
279 dpurdie 274
#
6133 dpurdie 275
# Description     : Fetch an array of build platforms that are tagged
279 dpurdie 276
#
6133 dpurdie 277
# Inputs          : $tag    - Tag to process
279 dpurdie 278
#
6133 dpurdie 279
# Returns         : An array of targets. May be empty
279 dpurdie 280
#
6133 dpurdie 281
 
282
sub getTargetsByTag
279 dpurdie 283
{
6133 dpurdie 284
    my ($tag) = @_;
285
    Error("Internal: getTargetsByTag. No tag specified") unless ($tag);
286
    InitData();
4551 dpurdie 287
 
6133 dpurdie 288
    if (exists ($TargetByTag{uc($tag)}) )
4551 dpurdie 289
    {
6133 dpurdie 290
        return @{$TargetByTag{uc($tag)}};
4551 dpurdie 291
    }
6133 dpurdie 292
 
293
    my @empty;
294
    return @empty;
279 dpurdie 295
}
296
 
4551 dpurdie 297
#-------------------------------------------------------------------------------
6133 dpurdie 298
# Function        : targetHasTag 
4551 dpurdie 299
#
6133 dpurdie 300
# Description     : Determineif the named target has the specified tag
4551 dpurdie 301
#
6133 dpurdie 302
# Inputs          : $target
303
#                   $tag 
4551 dpurdie 304
#
6133 dpurdie 305
# Returns         : Boolean
4551 dpurdie 306
#
6133 dpurdie 307
sub targetHasTag
4551 dpurdie 308
{
6133 dpurdie 309
    my ($target, $tag) = @_;
310
    Error("Internal: targetHasTag. No target specified") unless ($target);
311
    Error("Internal: targetHasTag. No tag specified") unless ($tag);
4551 dpurdie 312
 
313
    InitData();
6133 dpurdie 314
    if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag}))
4551 dpurdie 315
    {
6133 dpurdie 316
        return 1;
4551 dpurdie 317
    }
318
    return 0;
319
}
320
 
279 dpurdie 321
1;
322