Subversion Repositories DevTools

Rev

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