Subversion Repositories DevTools

Rev

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