Subversion Repositories DevTools

Rev

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