Subversion Repositories DevTools

Rev

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