Subversion Repositories DevTools

Rev

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