Subversion Repositories DevTools

Rev

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

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