Subversion Repositories DevTools

Rev

Rev 6798 | Rev 7009 | 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
#
6294 dpurdie 42
our @BuildFamilies = qw (ANDROIDNDK DEVLINUX GENERICS LINUX LMOS LMOS_DEVLINUX MSWIN32 MSWIN64 SOLARIS WINCE WINCE6 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',
6294 dpurdie 225
        'WCE6ARMV4I:WINCE6',
6177 dpurdie 226
        'WIN32:NATIVE:TOOLSET:MSWIN32:LMOS:PKG_WIN',
227
        'VS2012_X64:NATIVE:MSWIN64:PKG_WIN',
228
        'VS2015_X64:NATIVE:MSWIN64:PKG_WIN',
279 dpurdie 229
        ],
4814 dpurdie 230
 
279 dpurdie 231
);
232
 
233
#
234
#   The above data will be reorganised and placed into the following
6133 dpurdie 235
#   hashes to simplify data access
279 dpurdie 236
#
6133 dpurdie 237
my %TargetByTag;
238
my %TagByTarget;
279 dpurdie 239
 
240
#-------------------------------------------------------------------------------
241
# Function        : InitData
242
#
243
# Description     : Init data structures
244
#                   Done once
245
#
4551 dpurdie 246
#                   Convert the $BuildAvailability entry array into a hash to 
6276 dpurdie 247
#                   simplify lookup. 
248
#                       Add in the GENERIC target
249
#                       Add in the GENERIC_MACHTYPE target
250
#                       Add in LMOS targets
279 dpurdie 251
#
252
# Inputs          : None
253
#
254
# Returns         : Nothing
255
#
256
sub InitData
257
{
258
    #
259
    #   Only do this work once
260
    #
6133 dpurdie 261
    return if exists $TagByTarget{'GENERIC'};
6276 dpurdie 262
 
279 dpurdie 263
    #
6276 dpurdie 264
    #   Process all machine types
265
    #       Processes myself first
266
    #       Process linux_x64 before linux_i386
279 dpurdie 267
    #
6198 dpurdie 268
    Error("GBE_MACHTYPE has not been defined ") unless defined $::GBE_MACHTYPE;
6276 dpurdie 269
    foreach my $machType ( $::GBE_MACHTYPE, qw(linux_x64  linux_i386 linux_el7_x64 solaris10_sparc32 solaris10_x86 sparc win32 ))
270
    {
271
        #
272
        #   Validate build machine
273
        #
274
        Error("GBE_MACHTYPE has not been defined ") unless defined $machType;
275
        Error (__PACKAGE__ . " : Unknown build machine type: $machType")
276
            unless ( exists $BuildAvailability{$machType} );
279 dpurdie 277
 
6276 dpurdie 278
        #
279
        #   Convert the array into a hash to speed up access later
280
        #   Create GENERIC platform
281
        #
282
        push @{$BuildAvailability{$machType}}, 'GENERIC:GENERIC';
6133 dpurdie 283
 
6276 dpurdie 284
        #
285
        #   Create Machine Type specific Generic
286
        #       GENERIC_XXXX:GENERIC_MACHTYPE:TOOLSET
287
        #   
288
        my $genericMachTypes = 'GENERIC_' . uc ($machType);
289
        push @{$BuildAvailability{$machType}}, join (':', $genericMachTypes, 'GENERIC_MACHTYPE', 'TOOLSET', 'GENERICS' );
6133 dpurdie 290
 
6276 dpurdie 291
        foreach ( @{$BuildAvailability{$machType}}  )
292
        {
293
            my @data = split(':', $_ );
294
            my $target = uc shift @data;
295
            my $hasLMOS;
6133 dpurdie 296
 
6276 dpurdie 297
            #
298
            #   Add in MACHTYPE, only the first machine is processed
299
            #
300
            next if exists $TagByTarget{$target}{'MACHTYPE'};
301
            $TagByTarget{$target}{'MACHTYPE'} = $machType;
302
 
303
            #
304
            #   Add items into data structures
305
            #   Allow for AAAAA=Value
306
            #
307
            foreach my $item ( @data )
308
            {
309
                if ($item eq 'LMOS') {
310
                    $hasLMOS = 1;
311
                    next;
312
                }
313
 
314
                ($item, my $value) = split (/=/, $item,2);
315
                $value = 1 unless defined $value;
316
                $TagByTarget{$target}{uc($item)} = $value;
317
                push @{$TargetByTag{uc($item)}}, $target;
318
            }
319
 
320
            #
321
            #   Generate LMOS platforms entries from the base platform entry
322
            #   Similar to above, but it has LMOS prefix
6387 dpurdie 323
            #   Some tags are not applicable to LMOS
324
            #       TOOLSET - Will never have an LMOS based toolset
325
            #   Some tags will not have LMOS_ prefixes
326
            #       NATIVE PKG_WIN PKG_RPM PKG_DEB SK
327
            #       ie: Those in @BuildAliases    
6276 dpurdie 328
            #
329
            if ($hasLMOS)
330
            {
331
                my $lmosTarget = 'LMOS_' . $target;
332
                next if exists $TagByTarget{$lmosTarget}{'MACHTYPE'};
333
                $TagByTarget{$lmosTarget}{'MACHTYPE'} = $machType;
334
 
335
                $TagByTarget{$lmosTarget}{'BASE_TARGET'} = $target;
336
                push @{$TargetByTag{uc('LMOS')}}, $lmosTarget;
337
 
338
                foreach my $item ( @data )
339
                {
340
                    next if ($item eq 'LMOS');
6387 dpurdie 341
                    next if ($item eq 'TOOLSET');
342
 
6276 dpurdie 343
                    ($item, my $value) = split (/=/, $item,2);
344
                    $value = 1 unless defined $value;
6387 dpurdie 345
                    unless (grep /^$item$/, @BuildAliases) {
346
                        $item = 'LMOS_' . $item;
347
                    }
6276 dpurdie 348
                    $TagByTarget{$lmosTarget}{uc($item)} = $value;
349
                    push @{$TargetByTag{uc($item)}}, $lmosTarget;
350
                }
351
 
352
            }
4728 dpurdie 353
        }
279 dpurdie 354
    }
4551 dpurdie 355
 
6133 dpurdie 356
    #DebugDumpData("TagByTarget", \%TagByTarget);
357
    #DebugDumpData("TargetByTag", \%TargetByTag);
6276 dpurdie 358
    #DebugDumpData("BuildAvailability", \%BuildAvailability);
279 dpurdie 359
}
360
 
361
#-------------------------------------------------------------------------------
6133 dpurdie 362
# Function        : getTargetsByTag 
279 dpurdie 363
#
6133 dpurdie 364
# Description     : Fetch an array of build platforms that are tagged
279 dpurdie 365
#
6133 dpurdie 366
# Inputs          : $tag    - Tag to process
279 dpurdie 367
#
6133 dpurdie 368
# Returns         : An array of targets. May be empty
279 dpurdie 369
#
6133 dpurdie 370
 
371
sub getTargetsByTag
279 dpurdie 372
{
6133 dpurdie 373
    my ($tag) = @_;
374
    Error("Internal: getTargetsByTag. No tag specified") unless ($tag);
375
    InitData();
4551 dpurdie 376
 
6133 dpurdie 377
    if (exists ($TargetByTag{uc($tag)}) )
4551 dpurdie 378
    {
6133 dpurdie 379
        return @{$TargetByTag{uc($tag)}};
4551 dpurdie 380
    }
6133 dpurdie 381
 
382
    my @empty;
383
    return @empty;
279 dpurdie 384
}
385
 
4551 dpurdie 386
#-------------------------------------------------------------------------------
6133 dpurdie 387
# Function        : targetHasTag 
4551 dpurdie 388
#
6276 dpurdie 389
# Description     : Determine if the named target has the specified tag
4551 dpurdie 390
#
6133 dpurdie 391
# Inputs          : $target
392
#                   $tag 
4551 dpurdie 393
#
6198 dpurdie 394
# Returns         : Value of the Tag. May be 1
395
#                   Tags of the form NAME=VALUE wull return 'VALUE'
4551 dpurdie 396
#
6133 dpurdie 397
sub targetHasTag
4551 dpurdie 398
{
6133 dpurdie 399
    my ($target, $tag) = @_;
6276 dpurdie 400
    my $value = 0;
6133 dpurdie 401
    Error("Internal: targetHasTag. No target specified") unless ($target);
402
    Error("Internal: targetHasTag. No tag specified") unless ($tag);
4551 dpurdie 403
 
404
    InitData();
6276 dpurdie 405
    $target = uc ($target);
6133 dpurdie 406
    if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag}))
4551 dpurdie 407
    {
6276 dpurdie 408
        $value = $TagByTarget{$target}{$tag};
4551 dpurdie 409
    }
6276 dpurdie 410
    Debug3("targetHasTag: @_ -> $value");
411
    return $value;
4551 dpurdie 412
}
413
 
279 dpurdie 414
1;
415