Subversion Repositories DevTools

Rev

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