Subversion Repositories DevTools

Rev

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