Subversion Repositories DevTools

Rev

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