Subversion Repositories DevTools

Rev

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