Subversion Repositories DevTools

Rev

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