Subversion Repositories DevTools

Rev

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

Rev Author Line No. Line
279 dpurdie 1
########################################################################
7300 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
#
7307 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
# 
7310 dpurdie 36
our @BuildAliases = qw (NATIVE INSTRUMENT PKG_WIN PKG_RPM PKG_DEB SK);
7309 dpurdie 37
our @BuildKeywords = ( qw (TOOLSET GENERIC GENERIC_MACHTYPE BASE_TARGET), @BuildAliases );
7307 dpurdie 38
 
39
#
7310 dpurdie 40
#   An array of platform aliases that will be expanded into multiple platforms
41
#
7323 dpurdie 42
our @BuildFamilies = qw (ANDROIDNDK DEVLINUX GENERICS LINUX LMOS LMOS_DEVLINUX MSWIN32 MSWIN64 SOLARIS WINCE WINCE6 WINCE7 SK);
7310 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:
7323 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
7310 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 
7300 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
7307 dpurdie 61
#       SK - The SK familty of platforms
7310 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
#
7323 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
#
7308 dpurdie 71
our %BuildAvailability = (
279 dpurdie 72
    'linux_i386' => [
6133 dpurdie 73
        'ANDROIDARM:ANDROIDNDK',
74
        'ANDROIDMIPS:ANDROIDNDK',
75
        'ANDROIDX86:ANDROIDNDK',
4324 dpurdie 76
        'ANDROID',
7300 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',
7322 dpurdie 82
        'LINUX_EMU:LMOS',
6133 dpurdie 83
        'LINUX_ETX:DEVLINUX:LMOS',
7322 dpurdie 84
        'LINUX_I386:LMOS:NATIVE:TOOLSET',
7300 dpurdie 85
        'PPC_603E:DEVLINUX:LMOS:PKG_DEB',
7307 dpurdie 86
        'SK20:DEVLINUX:PKG_DEB:SK',
87
        'SK20V41:DEVLINUX:PKG_DEB:SK',
7300 dpurdie 88
        'UBUNTU12:NATIVE:TOOLSET:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 89
        'UBUNTU12_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7309 dpurdie 90
        'UBUNTU12C11:NATIVE:TOOLSET:DEVLINUX:PKG_DEB',
6133 dpurdie 91
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 92
        'VIPER2:DEVLINUX:PKG_DEB',
279 dpurdie 93
        ],
94
 
4162 dpurdie 95
    'linux_x64' => [
7322 dpurdie 96
        'LINUX_I386:LMOS:NATIVE:PKG_DEB',
6133 dpurdie 97
        'JAVA:NATIVE',
7300 dpurdie 98
        'UBUNTU14:NATIVE:TOOLSET:LINUX:PKG_DEB',
6133 dpurdie 99
        'UBUNTU14_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
7300 dpurdie 100
        'UBUNTU16:NATIVE:TOOLSET:LINUX:PKG_DEB',
6133 dpurdie 101
        'UBUNTU16_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
102
        'ANDROIDARM:ANDROIDNDK',
7322 dpurdie 103
        'ANDROIDARMV7:ANDROIDNDK',
6133 dpurdie 104
        'ANDROIDMIPS:ANDROIDNDK',
105
        'ANDROIDX86:ANDROIDNDK',
7322 dpurdie 106
        'ANDROIDARM64:ANDROIDNDK',
107
        'ANDROIDMIPS64:ANDROIDNDK',
108
        'ANDROIDX86_64:ANDROIDNDK',
6133 dpurdie 109
        'ANDROID',
110
        'ARM9TDMI:DEVLINUX:LMOS',
7300 dpurdie 111
        'COBRA:DEVLINUX:LMOS:PKG_DEB',
112
        'COBRA2:DEVLINUX:LMOS:PKG_DEB',
7322 dpurdie 113
        'HAMMERHEAD:PKG_DEB',
6133 dpurdie 114
        'LINUX_ETX:DEVLINUX:LMOS',
7300 dpurdie 115
        'PPC_603E:DEVLINUX:LMOS:PKG_DEB',
7307 dpurdie 116
        'SK20:DEVLINUX:PKG_DEB:SK',
117
        'SK20V41:DEVLINUX:PKG_DEB:SK',
7323 dpurdie 118
        'STIBAXIO:DEVLINUX:PKG_DEB',
7307 dpurdie 119
        'SK100:DEVLINUX:PKG_DEB:SK',
7309 dpurdie 120
        'UBUNTU12C11:NATIVE:DEVLINUX:PKG_DEB',
6133 dpurdie 121
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 122
        'VIPER2:DEVLINUX:PKG_DEB',
7323 dpurdie 123
        'MANSIG',
4162 dpurdie 124
        ],
125
 
7300 dpurdie 126
    'linux_el7_x64' => [
127
        'RHEL7:LINUX:TOOLSET:NATIVE:PKG_RPM',
128
        'RHEL7_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
129
        ],
130
 
279 dpurdie 131
    'solaris10_sparc32' => [
7310 dpurdie 132
        'SOLARIS10_SPARC32:SOLARIS:NATIVE:TOOLSET',
133
        'SOLARIS10_SPARC64:SOLARIS:NATIVE',
4728 dpurdie 134
        'JAVA:NATIVE',
279 dpurdie 135
        ],
136
 
137
    'solaris10_x86' => [
7310 dpurdie 138
        'SOLARIS10_X86:SOLARIS:NATIVE:TOOLSET',
139
        'SOLARIS10_X64:SOLARIS:NATIVE',
140
        'JAVA:NATIVE',
279 dpurdie 141
        ],
142
 
143
    'sparc' => [
7310 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',
7304 dpurdie 181
        'VS2005:NATIVE:MSWIN32',
4728 dpurdie 182
        'VS2008:NATIVE',
183
        'VS2010:NATIVE',
7300 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',
7323 dpurdie 202
        'WCEX86A700_SOM4466:WINCE7:WINCE',
7322 dpurdie 203
        'WCE6ARMV4I:WINCE6',
7300 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 
7310 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'};
7310 dpurdie 240
 
241
    #
242
    #   Process all machine types
243
    #       Processes myself first
244
    #       Process linux_x64 before linux_i386
245
    #
246
    Error("GBE_MACHTYPE has not been defined ") unless defined $::GBE_MACHTYPE;
247
    foreach my $machType ( $::GBE_MACHTYPE, qw(linux_x64  linux_i386 linux_el7_x64 solaris10_sparc32 solaris10_x86 sparc win32 ))
7309 dpurdie 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} );
6133 dpurdie 255
 
7309 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
 
7309 dpurdie 262
        #
263
        #   Create Machine Type specific Generic
264
        #       GENERIC_XXXX:GENERIC_MACHTYPE:TOOLSET
265
        #   
266
        my $genericMachTypes = 'GENERIC_' . uc ($machType);
7310 dpurdie 267
        push @{$BuildAvailability{$machType}}, join (':', $genericMachTypes, 'GENERIC_MACHTYPE', 'TOOLSET', 'GENERICS' );
7309 dpurdie 268
 
269
        foreach ( @{$BuildAvailability{$machType}}  )
4728 dpurdie 270
        {
7309 dpurdie 271
            my @data = split(':', $_ );
7310 dpurdie 272
            my $target = uc shift @data;
7309 dpurdie 273
            my $hasLMOS;
274
 
7310 dpurdie 275
            #
276
            #   Add in MACHTYPE, only the first machine is processed
277
            #
7309 dpurdie 278
            next if exists $TagByTarget{$target}{'MACHTYPE'};
279
            $TagByTarget{$target}{'MACHTYPE'} = $machType;
7310 dpurdie 280
 
281
            #
282
            #   Add items into data structures
283
            #   Allow for AAAAA=Value
284
            #
7309 dpurdie 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
7310 dpurdie 300
            #   Similar to above, but it has LMOS prefix
7322 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    
7309 dpurdie 306
            #
307
            if ($hasLMOS)
308
            {
309
                my $lmosTarget = 'LMOS_' . $target;
310
                next if exists $TagByTarget{$lmosTarget}{'MACHTYPE'};
311
                $TagByTarget{$lmosTarget}{'MACHTYPE'} = $machType;
7310 dpurdie 312
 
7309 dpurdie 313
                $TagByTarget{$lmosTarget}{'BASE_TARGET'} = $target;
314
                push @{$TargetByTag{uc('LMOS')}}, $lmosTarget;
7310 dpurdie 315
 
7309 dpurdie 316
                foreach my $item ( @data )
317
                {
318
                    next if ($item eq 'LMOS');
7322 dpurdie 319
                    next if ($item eq 'TOOLSET');
320
 
7309 dpurdie 321
                    ($item, my $value) = split (/=/, $item,2);
322
                    $value = 1 unless defined $value;
7322 dpurdie 323
                    unless (grep /^$item$/, @BuildAliases) {
324
                        $item = 'LMOS_' . $item;
325
                    }
7309 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);
7309 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
#
7309 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
#
7308 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) = @_;
7310 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();
7310 dpurdie 383
    $target = uc ($target);
6133 dpurdie 384
    if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag}))
4551 dpurdie 385
    {
7310 dpurdie 386
        $value = $TagByTarget{$target}{$tag};
4551 dpurdie 387
    }
7310 dpurdie 388
    Debug3("targetHasTag: @_ -> $value");
389
    return $value;
4551 dpurdie 390
}
391
 
7323 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