Subversion Repositories DevTools

Rev

Rev 7526 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
279 dpurdie 1
########################################################################
6177 dpurdie 2
# COPYRIGHT - VIX IP PTY LTD ("VIX"). ALL RIGHTS RESERVED.
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
#
6198 dpurdie 32
#   An array of known Keywords and Aliases
33
#       Keywords should not be used for platform names
34
#       Aliases are set up for the user
35
# 
6276 dpurdie 36
our @BuildAliases = qw (NATIVE INSTRUMENT PKG_WIN PKG_RPM PKG_DEB SK);
37
our @BuildKeywords = ( qw (TOOLSET GENERIC GENERIC_MACHTYPE BASE_TARGET), @BuildAliases );
6198 dpurdie 38
 
39
#
6276 dpurdie 40
#   An array of platform aliases that will be expanded into multiple platforms
41
#
7014 dpurdie 42
our @BuildFamilies = qw (ANDROIDNDK DEVLINUX GENERICS LINUX LMOS LMOS_DEVLINUX MSWIN32 MSWIN64 SOLARIS WINCE WINCE6 WINCE7 SK);
6276 dpurdie 43
 
44
#
279 dpurdie 45
#   The following structure is a hash of arrays
46
#   The hash key is a supported machine type - one per machine
47
#   The data is an array of supported PLATFORMS
6133 dpurdie 48
#   Each platform may have a : seperated list of tags
49
#   Known tags include:
6925 dpurdie 50
#       TOOLSET - Suitable for building JATS tools
6133 dpurdie 51
#       NATIVE  - Can be expected to run on the build machine
52
#       KNOWN - Indicated platform is known to this machine type. Used to test existence 
53
#       GENERIC - Can be built on any machine
6276 dpurdie 54
#       GENERIC_MACHTYPE - Can be built on a specific machine type (Auto generated)
6133 dpurdie 55
#       DEVLINUX - Part of the DEVLINUX alias
56
#       LINUX - Part of the LINUX alias 
6177 dpurdie 57
#       LMOS - Bastard Platforms from Hell
58
#       PKG_DEB - Install Debian Packages   
59
#       PKG_RPM - Install RPM Packages
60
#       PKG_WIN - Install Windows Installers
6198 dpurdie 61
#       SK - The SK familty of platforms
6276 dpurdie 62
#       SOLARIS - Part of the SOLARIS alias
63
#       MACHTYPE - Machine Type to build on (Auto generated)
64
#       BASE_TARGET - Underling platform
7579 dpurdie 65
#       NOTABT - Not available on a sanctioned build machine (GBE_ABT defined)
279 dpurdie 66
#
7296 dpurdie 67
#
68
#   Platforms that are nolonger supported. We have no compilers for them and they have never been in the build system. 
7579 dpurdie 69
#       ACEX AMX CMOS386 CMOS68K DF4OBE DOS16 DOS32 EEPP386 EETP386 EOS EOSM68K EOSP386 GMPCA GO32 
70
#       HK386PC HKAVM HKAVM2 HKBCP HKDDU HKGAK HKMPR HKPCA LINUX86 LINUX_ARMV4 MERG NGBCP NGDDU PHARLAP
7296 dpurdie 71
#
72
#
6198 dpurdie 73
our %BuildAvailability = (
279 dpurdie 74
    'linux_i386' => [
6133 dpurdie 75
        'ANDROIDARM:ANDROIDNDK',
76
        'ANDROIDMIPS:ANDROIDNDK',
77
        'ANDROIDX86:ANDROIDNDK',
4324 dpurdie 78
        'ANDROID',
6177 dpurdie 79
        'ARM9TDMI:DEVLINUX:LMOS:PKG_DEB',
80
        'COBRA:DEVLINUX:LMOS:PKG_DEB',
81
        'COBRA2:DEVLINUX:LMOS:PKG_DEB',
82
        'HAMMERHEAD:PKG_DEB',
4728 dpurdie 83
        'JAVA:NATIVE',
6294 dpurdie 84
        'LINUX_EMU:LMOS',
6133 dpurdie 85
        'LINUX_ETX:DEVLINUX:LMOS',
6294 dpurdie 86
        'LINUX_I386:LMOS:NATIVE:TOOLSET',
6177 dpurdie 87
        'PPC_603E:DEVLINUX:LMOS:PKG_DEB',
6198 dpurdie 88
        'SK20:DEVLINUX:PKG_DEB:SK',
89
        'SK20V41:DEVLINUX:PKG_DEB:SK',
6177 dpurdie 90
        'UBUNTU12:NATIVE:TOOLSET:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 91
        'UBUNTU12_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
6276 dpurdie 92
        'UBUNTU12C11:NATIVE:TOOLSET:DEVLINUX:PKG_DEB',
6133 dpurdie 93
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
6177 dpurdie 94
        'VIPER2:DEVLINUX:PKG_DEB',
279 dpurdie 95
        ],
96
 
4162 dpurdie 97
    'linux_x64' => [
7579 dpurdie 98
        'ANDROID:NOTABT',
6294 dpurdie 99
        'LINUX_I386:LMOS:NATIVE:PKG_DEB',
6133 dpurdie 100
        'JAVA:NATIVE',
6177 dpurdie 101
        'UBUNTU14:NATIVE:TOOLSET:LINUX:PKG_DEB',
6133 dpurdie 102
        'UBUNTU14_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
6177 dpurdie 103
        'UBUNTU16:NATIVE:TOOLSET:LINUX:PKG_DEB',
6133 dpurdie 104
        'UBUNTU16_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
105
        'ANDROIDARM:ANDROIDNDK',
6459 dpurdie 106
        'ANDROIDARMV7:ANDROIDNDK',
6133 dpurdie 107
        'ANDROIDMIPS:ANDROIDNDK',
108
        'ANDROIDX86:ANDROIDNDK',
6442 dpurdie 109
        'ANDROIDARM64:ANDROIDNDK',
110
        'ANDROIDMIPS64:ANDROIDNDK',
111
        'ANDROIDX86_64:ANDROIDNDK',
6133 dpurdie 112
        'ANDROID',
113
        'ARM9TDMI:DEVLINUX:LMOS',
6177 dpurdie 114
        'COBRA:DEVLINUX:LMOS:PKG_DEB',
115
        'COBRA2:DEVLINUX:LMOS:PKG_DEB',
6619 dpurdie 116
        'HAMMERHEAD:PKG_DEB',
6133 dpurdie 117
        'LINUX_ETX:DEVLINUX:LMOS',
6177 dpurdie 118
        'PPC_603E:DEVLINUX:LMOS:PKG_DEB',
6198 dpurdie 119
        'SK20:DEVLINUX:PKG_DEB:SK',
120
        'SK20V41:DEVLINUX:PKG_DEB:SK',
6798 dpurdie 121
        'STIBAXIO:DEVLINUX:PKG_DEB',
6198 dpurdie 122
        'SK100:DEVLINUX:PKG_DEB:SK',
6276 dpurdie 123
        'UBUNTU12C11:NATIVE:DEVLINUX:PKG_DEB',
6133 dpurdie 124
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
6177 dpurdie 125
        'VIPER2:DEVLINUX:PKG_DEB',
6925 dpurdie 126
        'MANSIG',
4162 dpurdie 127
        ],
128
 
6177 dpurdie 129
    'linux_el7_x64' => [
7526 dpurdie 130
        'RHEL7:TOOLSET:NATIVE:PKG_RPM',
131
        'RHEL7_INSTRUMENT:NATIVE:INSTRUMENT',
6177 dpurdie 132
        ],
133
 
279 dpurdie 134
    'solaris10_sparc32' => [
6276 dpurdie 135
        'SOLARIS10_SPARC32:SOLARIS:NATIVE:TOOLSET',
136
        'SOLARIS10_SPARC64:SOLARIS:NATIVE',
4728 dpurdie 137
        'JAVA:NATIVE',
279 dpurdie 138
        ],
139
 
140
    'solaris10_x86' => [
6276 dpurdie 141
        'SOLARIS10_X86:SOLARIS:NATIVE:TOOLSET',
142
        'SOLARIS10_X64:SOLARIS:NATIVE',
143
        'JAVA:NATIVE',
279 dpurdie 144
        ],
145
 
146
    'sparc' => [
6276 dpurdie 147
        'SOLARIS8_SPARC32:SOLARIS:NATIVE:TOOLSET',
4728 dpurdie 148
        'JAVA:NATIVE',
279 dpurdie 149
        ],
150
 
151
    'win32' => [
4928 dpurdie 152
        'ANDROID',
363 dpurdie 153
        'ARM_I5100',
279 dpurdie 154
        'AVR_IAR',
155
        'BORLAND',
5679 dpurdie 156
        'CORTEXM3_IAR',
4728 dpurdie 157
        'CSHARP:NATIVE',
158
        'CSHARP2005:NATIVE',
159
        'CSHARP2008:NATIVE',
160
        'CSHARP2010:NATIVE',
161
        'CSHARP2012:NATIVE',
6133 dpurdie 162
        'CSHARP2015:NATIVE',
279 dpurdie 163
        'DAFBR_MOS',
164
        'DAFBR_WIN',
289 dpurdie 165
        'DELPHI7',
279 dpurdie 166
        'H8S',
283 dpurdie 167
        'H400',
279 dpurdie 168
        'INGEN',
3832 dpurdie 169
        'INTELLECT',
4728 dpurdie 170
        'JAVA:NATIVE',
279 dpurdie 171
        'MCR',
172
        'MOS68K',
173
        'MOS68KRM',
174
        'MOSCF',
175
        'MPT',
3564 dpurdie 176
        'VSDEVRC',
345 dpurdie 177
        'PHP',
371 dpurdie 178
        'RIORDS',
279 dpurdie 179
        'THYRON',
315 dpurdie 180
        'VB6',
279 dpurdie 181
        'VERIX',
383 dpurdie 182
        'VIXITP',
4728 dpurdie 183
        'VS2003:NATIVE',
6177 dpurdie 184
        'VS2005:NATIVE:MSWIN32',
4728 dpurdie 185
        'VS2008:NATIVE',
186
        'VS2010:NATIVE',
6177 dpurdie 187
        'VS2012:NATIVE:TOOLSET:MSWIN32:PKG_WIN',
188
        'VS2015:NATIVE:TOOLSET:MSWIN32:PKG_WIN',
6133 dpurdie 189
        'WCEIPA280:WINCE',
190
        'WCEIT3000:WINCE',
399 dpurdie 191
        'WCENAUTIZX5',
6133 dpurdie 192
        'WCEPA961:WINCE',
193
        'WCEPA962:WINCE',
194
        'WCEPA962_500:WINCE',
195
        'WCEPCM7220:WINCE',
279 dpurdie 196
        'WCEPSION_420',
6133 dpurdie 197
        'WCEPSION_500:WINCE',
198
        'WCEPSION_500_emu:WINCE',
199
        'WCEPSION_500_VS2005:WINCE',
200
        'WCEPSPC_arm:WINCE',
201
        'WCEPSPC_emu:WINCE',
202
        'WCEX86A420:WINCE',
203
        'WCEX86A500:WINCE',
204
        'WCEX86A500_SOM4455:WINCE',
7066 dpurdie 205
        'WCEX86A700_SOM4466:WINCE7:WINCE',
6294 dpurdie 206
        'WCE6ARMV4I:WINCE6',
6177 dpurdie 207
        'WIN32:NATIVE:TOOLSET:MSWIN32:LMOS:PKG_WIN',
208
        'VS2012_X64:NATIVE:MSWIN64:PKG_WIN',
209
        'VS2015_X64:NATIVE:MSWIN64:PKG_WIN',
279 dpurdie 210
        ],
4814 dpurdie 211
 
279 dpurdie 212
);
213
 
214
#
215
#   The above data will be reorganised and placed into the following
6133 dpurdie 216
#   hashes to simplify data access
279 dpurdie 217
#
6133 dpurdie 218
my %TargetByTag;
219
my %TagByTarget;
279 dpurdie 220
 
221
#-------------------------------------------------------------------------------
222
# Function        : InitData
223
#
224
# Description     : Init data structures
225
#                   Done once
226
#
4551 dpurdie 227
#                   Convert the $BuildAvailability entry array into a hash to 
6276 dpurdie 228
#                   simplify lookup. 
229
#                       Add in the GENERIC target
230
#                       Add in the GENERIC_MACHTYPE target
231
#                       Add in LMOS targets
279 dpurdie 232
#
233
# Inputs          : None
234
#
235
# Returns         : Nothing
236
#
237
sub InitData
238
{
239
    #
240
    #   Only do this work once
241
    #
6133 dpurdie 242
    return if exists $TagByTarget{'GENERIC'};
6276 dpurdie 243
 
279 dpurdie 244
    #
6276 dpurdie 245
    #   Process all machine types
246
    #       Processes myself first
247
    #       Process linux_x64 before linux_i386
279 dpurdie 248
    #
6198 dpurdie 249
    Error("GBE_MACHTYPE has not been defined ") unless defined $::GBE_MACHTYPE;
6276 dpurdie 250
    foreach my $machType ( $::GBE_MACHTYPE, qw(linux_x64  linux_i386 linux_el7_x64 solaris10_sparc32 solaris10_x86 sparc win32 ))
251
    {
252
        #
253
        #   Validate build machine
254
        #
255
        Error("GBE_MACHTYPE has not been defined ") unless defined $machType;
256
        Error (__PACKAGE__ . " : Unknown build machine type: $machType")
257
            unless ( exists $BuildAvailability{$machType} );
279 dpurdie 258
 
6276 dpurdie 259
        #
260
        #   Convert the array into a hash to speed up access later
261
        #   Create GENERIC platform
262
        #
263
        push @{$BuildAvailability{$machType}}, 'GENERIC:GENERIC';
6133 dpurdie 264
 
6276 dpurdie 265
        #
266
        #   Create Machine Type specific Generic
267
        #       GENERIC_XXXX:GENERIC_MACHTYPE:TOOLSET
268
        #   
269
        my $genericMachTypes = 'GENERIC_' . uc ($machType);
270
        push @{$BuildAvailability{$machType}}, join (':', $genericMachTypes, 'GENERIC_MACHTYPE', 'TOOLSET', 'GENERICS' );
6133 dpurdie 271
 
6276 dpurdie 272
        foreach ( @{$BuildAvailability{$machType}}  )
273
        {
274
            my @data = split(':', $_ );
275
            my $target = uc shift @data;
276
            my $hasLMOS;
6133 dpurdie 277
 
6276 dpurdie 278
            #
279
            #   Add in MACHTYPE, only the first machine is processed
280
            #
281
            next if exists $TagByTarget{$target}{'MACHTYPE'};
282
            $TagByTarget{$target}{'MACHTYPE'} = $machType;
283
 
284
            #
7579 dpurdie 285
            #   If tagged as NOTABT and we are working on a sanctioned build machine
286
            #   with GBE_ABT set, then ignore this target. It cannot be built on a build
287
            #   machine. Used where we can develop on multiple machines but perform sanctioned builds
288
            #   only on one machine type.
289
            #
290
            if (defined $::GBE_ABT) {
291
                my $hasNotAbt = (grep $_ eq 'NOTABT', @data);
292
                if ($hasNotAbt) {
293
                    Warning("NotAbt. $target is not supported in a build system under $machType" );
294
                    next;
295
                }
296
            }
297
 
298
 
299
            #
6276 dpurdie 300
            #   Add items into data structures
301
            #   Allow for AAAAA=Value
302
            #
303
            foreach my $item ( @data )
304
            {
305
                if ($item eq 'LMOS') {
306
                    $hasLMOS = 1;
307
                    next;
308
                }
309
 
310
                ($item, my $value) = split (/=/, $item,2);
311
                $value = 1 unless defined $value;
312
                $TagByTarget{$target}{uc($item)} = $value;
313
                push @{$TargetByTag{uc($item)}}, $target;
314
            }
315
 
316
            #
317
            #   Generate LMOS platforms entries from the base platform entry
318
            #   Similar to above, but it has LMOS prefix
6387 dpurdie 319
            #   Some tags are not applicable to LMOS
320
            #       TOOLSET - Will never have an LMOS based toolset
321
            #   Some tags will not have LMOS_ prefixes
322
            #       NATIVE PKG_WIN PKG_RPM PKG_DEB SK
323
            #       ie: Those in @BuildAliases    
6276 dpurdie 324
            #
325
            if ($hasLMOS)
326
            {
327
                my $lmosTarget = 'LMOS_' . $target;
328
                next if exists $TagByTarget{$lmosTarget}{'MACHTYPE'};
329
                $TagByTarget{$lmosTarget}{'MACHTYPE'} = $machType;
330
 
331
                $TagByTarget{$lmosTarget}{'BASE_TARGET'} = $target;
332
                push @{$TargetByTag{uc('LMOS')}}, $lmosTarget;
333
 
334
                foreach my $item ( @data )
335
                {
336
                    next if ($item eq 'LMOS');
6387 dpurdie 337
                    next if ($item eq 'TOOLSET');
338
 
6276 dpurdie 339
                    ($item, my $value) = split (/=/, $item,2);
340
                    $value = 1 unless defined $value;
6387 dpurdie 341
                    unless (grep /^$item$/, @BuildAliases) {
342
                        $item = 'LMOS_' . $item;
343
                    }
6276 dpurdie 344
                    $TagByTarget{$lmosTarget}{uc($item)} = $value;
345
                    push @{$TargetByTag{uc($item)}}, $lmosTarget;
346
                }
347
 
348
            }
4728 dpurdie 349
        }
279 dpurdie 350
    }
4551 dpurdie 351
 
6133 dpurdie 352
    #DebugDumpData("TagByTarget", \%TagByTarget);
353
    #DebugDumpData("TargetByTag", \%TargetByTag);
6276 dpurdie 354
    #DebugDumpData("BuildAvailability", \%BuildAvailability);
279 dpurdie 355
}
356
 
357
#-------------------------------------------------------------------------------
6133 dpurdie 358
# Function        : getTargetsByTag 
279 dpurdie 359
#
6133 dpurdie 360
# Description     : Fetch an array of build platforms that are tagged
279 dpurdie 361
#
6133 dpurdie 362
# Inputs          : $tag    - Tag to process
279 dpurdie 363
#
6133 dpurdie 364
# Returns         : An array of targets. May be empty
279 dpurdie 365
#
6133 dpurdie 366
 
367
sub getTargetsByTag
279 dpurdie 368
{
6133 dpurdie 369
    my ($tag) = @_;
370
    Error("Internal: getTargetsByTag. No tag specified") unless ($tag);
371
    InitData();
4551 dpurdie 372
 
6133 dpurdie 373
    if (exists ($TargetByTag{uc($tag)}) )
4551 dpurdie 374
    {
6133 dpurdie 375
        return @{$TargetByTag{uc($tag)}};
4551 dpurdie 376
    }
6133 dpurdie 377
 
378
    my @empty;
379
    return @empty;
279 dpurdie 380
}
381
 
4551 dpurdie 382
#-------------------------------------------------------------------------------
6133 dpurdie 383
# Function        : targetHasTag 
4551 dpurdie 384
#
6276 dpurdie 385
# Description     : Determine if the named target has the specified tag
4551 dpurdie 386
#
6133 dpurdie 387
# Inputs          : $target
388
#                   $tag 
4551 dpurdie 389
#
6198 dpurdie 390
# Returns         : Value of the Tag. May be 1
391
#                   Tags of the form NAME=VALUE wull return 'VALUE'
4551 dpurdie 392
#
6133 dpurdie 393
sub targetHasTag
4551 dpurdie 394
{
6133 dpurdie 395
    my ($target, $tag) = @_;
6276 dpurdie 396
    my $value = 0;
6133 dpurdie 397
    Error("Internal: targetHasTag. No target specified") unless ($target);
398
    Error("Internal: targetHasTag. No tag specified") unless ($tag);
4551 dpurdie 399
 
400
    InitData();
6276 dpurdie 401
    $target = uc ($target);
6133 dpurdie 402
    if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag}))
4551 dpurdie 403
    {
6276 dpurdie 404
        $value = $TagByTarget{$target}{$tag};
4551 dpurdie 405
    }
6276 dpurdie 406
    Debug3("targetHasTag: @_ -> $value");
407
    return $value;
4551 dpurdie 408
}
409
 
7296 dpurdie 410
#-------------------------------------------------------------------------------
411
# Function        : validMachType 
412
#
413
# Description     : Determine if a given machType is known to the system 
414
#
415
# Inputs          : machType - to be tested 
416
#
417
# Returns         : true - known to the system
418
#                   false - no known. 
419
#
420
sub validMachType {
421
    my ($machType) = @_;
422
    return exists $BuildAvailability{lc $machType};
423
}
424
 
425
#-------------------------------------------------------------------------------
426
# Function        : getGenericMachType 
427
#
428
# Description     : Calculate the generic machine type(s) for a specified target(s)    
429
#
430
# Inputs          : A target to process
431
#
432
# Returns         : An array of machine types 
433
#
434
sub getGenericMachType {
435
    my ($target) = @_;
436
    my $machType;
437
 
438
    if (exists $TagByTarget{$target}) {
439
        $machType =  'GENERIC_' . uc ($TagByTarget{$target}{MACHTYPE});
440
    }
441
 
442
    return $machType; 
443
}
444
 
445
 
279 dpurdie 446
1;
447