Subversion Repositories DevTools

Rev

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

Rev Author Line No. Line
279 dpurdie 1
########################################################################
2
# Copyright (C) 2008 ERG Limited, All rights reserved
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
35
#
36
my %BuildAvailability = (
37
    'linux_i386' => [
4109 dpurdie 38
        'ANDROIDARM',
39
        'ANDROIDMIPS',
40
        'ANDROIDX86',
4324 dpurdie 41
        'ANDROID',
4109 dpurdie 42
        'ARM9TDMI',
337 dpurdie 43
        'COBRA',
4950 dpurdie 44
        'HAMMERHEAD',
4728 dpurdie 45
        'JAVA:NATIVE',
279 dpurdie 46
        'LINUX86',
47
        'LINUX_ARMV4',
48
        'LINUX_EMU',
49
        'LINUX_ETX',
4728 dpurdie 50
        'LINUX_I386:NATIVE',
4109 dpurdie 51
        'PPC_603E',
52
        'SK20',
4728 dpurdie 53
        'UBUNTU12:NATIVE',
54
        'UBUNTU12_INSTRUMENT:NATIVE',
279 dpurdie 55
        ],
56
 
4162 dpurdie 57
    'linux_x64' => [
4728 dpurdie 58
        'LINUX_I386:NATIVE',
4814 dpurdie 59
        'UBUNTU14:NATIVE',
60
        'UBUNTU14_INSTRUMENT:NATIVE',
4162 dpurdie 61
        ],
62
 
279 dpurdie 63
    'solaris10_sparc32' => [
4728 dpurdie 64
        'SOLARIS10_SPARC32:NATIVE',
65
        'SOLARIS10_SPARC64:NATIVE',
66
        'JAVA:NATIVE',
279 dpurdie 67
        ],
68
 
69
    'solaris10_x86' => [
4728 dpurdie 70
        'SOLARIS10_X64:NATIVE',
279 dpurdie 71
        'SOLARIS10_X86',
72
        'JAVA',
73
        ],
74
 
75
    'sparc' => [
4728 dpurdie 76
        'SOLARIS:NATIVE',
279 dpurdie 77
        'SOLARIS_I386',
78
        'SOLARIS_SPARC',
4728 dpurdie 79
        'JAVA:NATIVE',
279 dpurdie 80
        ],
81
 
82
    'win32' => [
4928 dpurdie 83
        'ANDROID',
279 dpurdie 84
        'ACEX',
85
        'AMX',
363 dpurdie 86
        'ARM_I5100',
279 dpurdie 87
        'AVR_IAR',
88
        'BORLAND',
89
        'CMOS386',
90
        'CMOS68K',
4728 dpurdie 91
        'CSHARP:NATIVE',
92
        'CSHARP2005:NATIVE',
93
        'CSHARP2008:NATIVE',
94
        'CSHARP2010:NATIVE',
95
        'CSHARP2012:NATIVE',
279 dpurdie 96
        'DAFBR_MOS',
97
        'DAFBR_WIN',
289 dpurdie 98
        'DELPHI7',
279 dpurdie 99
        'DF4OBE',
100
        'DOS16',
101
        'DOS32',
102
        'EEPP386',
103
        'EETP386',
104
        'EOS',
105
        'EOSM68K',
106
        'EOSP386',
107
        'GMPCA',
108
        'GO32',
109
        'H8S',
283 dpurdie 110
        'H400',
279 dpurdie 111
        'HK386PC',
112
        'HKAVM',
113
        'HKAVM2',
114
        'HKBCP',
115
        'HKDDU',
116
        'HKGAK',
117
        'HKMPR',
118
        'HKPCA',
119
        'INGEN',
3832 dpurdie 120
        'INTELLECT',
4728 dpurdie 121
        'JAVA:NATIVE',
279 dpurdie 122
        'MCR',
123
        'MERG',
124
        'MOS68K',
125
        'MOS68KRM',
126
        'MOSCF',
127
        'MPT',
3564 dpurdie 128
        'VSDEVRC',
279 dpurdie 129
        'NGBCP',
130
        'NGDDU',
131
        'PHARLAP',
345 dpurdie 132
        'PHP',
371 dpurdie 133
        'RIORDS',
279 dpurdie 134
        'THYRON',
315 dpurdie 135
        'VB6',
279 dpurdie 136
        'VERIX',
383 dpurdie 137
        'VIXITP',
4728 dpurdie 138
        'VS2003:NATIVE',
139
        'VS2005:NATIVE',
140
        'VS2008:NATIVE',
141
        'VS2010:NATIVE',
142
        'VS2012:NATIVE',
355 dpurdie 143
        'WCEIPA280',
279 dpurdie 144
        'WCEIT3000',
399 dpurdie 145
        'WCENAUTIZX5',
279 dpurdie 146
        'WCEPA961',
147
        'WCEPA962',
148
        'WCEPA962_500',
149
        'WCEPCM7220',
150
        'WCEPSION_420',
151
        'WCEPSION_500',
152
        'WCEPSION_500_emu',
303 dpurdie 153
        'WCEPSION_500_VS2005',
279 dpurdie 154
        'WCEPSPC_arm',
155
        'WCEPSPC_emu',
156
        'WCEX86A420',
157
        'WCEX86A500',
158
        'WCEX86A500_SOM4455',
4728 dpurdie 159
        'WIN32:NATIVE',
4814 dpurdie 160
        'VS2012_X64:NATIVE',
279 dpurdie 161
        ],
4814 dpurdie 162
 
279 dpurdie 163
);
164
 
165
#
4551 dpurdie 166
#   Convert Machine Type to Machine Class
167
#       These match the Release Manager and BuildTool definitions
168
#       Used for GENERIC Processing
169
#
170
my %MachineTypeToClass = (
171
      linux_i386        => 'LINUX',
172
      linux_x64         => 'LINUX',
173
      solaris10_sparc32 => 'SOLARIS',
174
      solaris10_x86     => 'SOLARIS',
175
      sparc             => 'SOLARIS',
176
      win32             => 'WIN32',
177
);
178
#
279 dpurdie 179
#   The above data will be reorganised and placed into the following
180
#   hash. This simplifies the data definition and lookup
181
#
182
my %BuildAvailabilityData;
183
 
4728 dpurdie 184
#   A hash of 'special' known targets
185
#   Simply used to reduce JATS warnings about some psuedo targets
4551 dpurdie 186
my %knownSpecial;
187
 
4728 dpurdie 188
#   List of Native targets
189
my  @nativeTargets;
190
 
279 dpurdie 191
#-------------------------------------------------------------------------------
192
# Function        : InitData
193
#
194
# Description     : Init data structures
195
#                   Done once
196
#
4551 dpurdie 197
#                   Convert the $BuildAvailability entry array into a hash to 
198
#                   simplify lookup. Add in thr three types of GENERIC target:
199
#                       GENERIC         - can be built on ANY machine
200
#                       GENERIC_XXX     - can be built on machine of class XXX
201
#                       MACH_YYY        - can be built on MACHTYPE YYY
279 dpurdie 202
#
203
# Inputs          : None
204
#
205
# Returns         : Nothing
206
#
207
sub InitData
208
{
209
    #
210
    #   Only do this work once
211
    #
212
    return if exists $BuildAvailabilityData{'GENERIC'};
213
 
214
    #
215
    #   Validate build machine
216
    #
217
    Error (__PACKAGE__ . " : Unknown build machine type: $::GBE_MACHTYPE")
218
        unless ( exists $BuildAvailability{$::GBE_MACHTYPE} );
219
 
220
    #
4551 dpurdie 221
    #   Convert the array into a hash to speed up access later
279 dpurdie 222
    #
4551 dpurdie 223
    $BuildAvailabilityData{'GENERIC'} = 2;
279 dpurdie 224
    foreach ( @{$BuildAvailability{$::GBE_MACHTYPE}}  )
225
    {
4728 dpurdie 226
        my @data = split(':', $_ );
227
        $BuildAvailabilityData{$data[0]} = 1;
228
        if (grep(/^NATIVE$/i, @data))
229
        {
230
            push @nativeTargets, $data[0];
231
        }
279 dpurdie 232
    }
4551 dpurdie 233
 
234
#   #
235
#   #   Insert GENERIC_<MachClass>
236
#   #
237
#   Error (__PACKAGE__ . " : Unknown build machine class: $::GBE_MACHTYPE")
238
#       unless ( exists $MachineTypeToClass{$::GBE_MACHTYPE} );
239
#   $BuildAvailabilityData{join('_','GENERIC', $MachineTypeToClass{$::GBE_MACHTYPE} )} = 2;
240
#
241
#   #
242
#   #   Insert MachType definition
243
#   #   These are of the form MACH_xxxx
244
#   #
245
#   $BuildAvailabilityData{join('_','MACH', uc($::GBE_MACHTYPE) )} = 2;
246
#
247
#   #
248
#   #   Create a hash of special 'known' targets
249
#   #
250
   $knownSpecial{'GENERIC'} = 2;
251
#   foreach my $machtype ( keys %MachineTypeToClass ) {
252
#       $knownSpecial{join('_','MACH', uc($machtype) )} = 2;
253
#       $knownSpecial{join('_','GENERIC', $MachineTypeToClass{$machtype} )} = 2;
254
#   }
279 dpurdie 255
}
256
 
257
#-------------------------------------------------------------------------------
258
# Function        : checkBuildAvailability
259
#
260
# Description     : Check that a given target can be be built on the
4551 dpurdie 261
#                   current machine type. Also indicate if it is a GENERIC
262
#                   target; one that can always be built.
279 dpurdie 263
#
264
# Inputs          : $target             - Name of target platform
265
#
266
#
4551 dpurdie 267
# Returns         : 0                   - target cannot be built
268
#                   1                   - target can be built, subject to build filter
269
#                   2                   - target can be built, is Generic           
279 dpurdie 270
#
271
sub checkBuildAvailability
272
{
273
    my ($target) = @_;
4551 dpurdie 274
    Error("Internal: checkBuildAvailability. No argument specified") unless $target;
275
 
279 dpurdie 276
    InitData();
4551 dpurdie 277
    if (exists $BuildAvailabilityData{$target})
278
    {
279
        return $BuildAvailabilityData{$target} ;
280
    }
281
    return 0;
279 dpurdie 282
}
283
 
4551 dpurdie 284
#-------------------------------------------------------------------------------
285
# Function        : checkKnownSpecial
286
#
287
# Description     : Check that a given (special) target is known to JATS
288
#                   Used to suppress warnings about GENERIC targets not known
289
#                   to the current machine type.
290
#
291
# Inputs          : $target             - Name of target platform
292
#
293
#
294
# Returns         : 0                   - target not known
295
#                   1                   - target is known to JATS
296
#
297
sub checkKnownSpecial
298
{
299
    my ($target) = @_;
300
    Error("Internal: checkKnown. No argument specified") unless $target;
301
 
302
    InitData();
303
    if (exists $knownSpecial{$target})
304
    {
305
        return $knownSpecial{$target} ;
306
    }
307
    return 0;
308
}
309
 
4728 dpurdie 310
#-------------------------------------------------------------------------------
311
# Function        : getNativeTargets 
312
#
313
# Description     : Fetch an array of build platforms that are native in the 
314
#                   current build .
315
#
316
#                   Native implies that programs compiled will run
317
#                   Used to create an ALIAS called NATIVE
318
#                   Used to simplify unit testing    
319
#
320
# Inputs          : 
321
#
322
# Returns         : 
323
#
324
sub getNativeTargets
325
{
326
    InitData();
327
    return @nativeTargets;
328
}
4551 dpurdie 329
 
4728 dpurdie 330
 
279 dpurdie 331
1;
332