Subversion Repositories DevTools

Rev

Rev 6198 | Rev 6285 | 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
#
42
our @BuildFamilies = qw (ANDROIDNDK DEVLINUX GENERICS LINUX LMOS LMOS_DEVLINUX MSWIN32 MSWIN64 SOLARIS WINCE SK);
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',
78
        'LINUX_ARMV4',
79
        'LINUX_EMU',
6133 dpurdie 80
        'LINUX_ETX:DEVLINUX:LMOS',
81
        'LINUX_I386: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' => [
6177 dpurdie 93
        'LINUX_I386: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',
6276 dpurdie 219
        'WCEMOBILE6:WINCE',
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
317
            #
318
            if ($hasLMOS)
319
            {
320
                my $lmosTarget = 'LMOS_' . $target;
321
                next if exists $TagByTarget{$lmosTarget}{'MACHTYPE'};
322
                $TagByTarget{$lmosTarget}{'MACHTYPE'} = $machType;
323
 
324
                $TagByTarget{$lmosTarget}{'BASE_TARGET'} = $target;
325
                push @{$TargetByTag{uc('LMOS')}}, $lmosTarget;
326
 
327
                foreach my $item ( @data )
328
                {
329
                    next if ($item eq 'LMOS');
330
                    ($item, my $value) = split (/=/, $item,2);
331
                    $value = 1 unless defined $value;
332
                    $item = 'LMOS_' . $item;
333
                    $TagByTarget{$lmosTarget}{uc($item)} = $value;
334
                    push @{$TargetByTag{uc($item)}}, $lmosTarget;
335
                }
336
 
337
            }
4728 dpurdie 338
        }
279 dpurdie 339
    }
4551 dpurdie 340
 
6133 dpurdie 341
    #DebugDumpData("TagByTarget", \%TagByTarget);
342
    #DebugDumpData("TargetByTag", \%TargetByTag);
6276 dpurdie 343
    #DebugDumpData("BuildAvailability", \%BuildAvailability);
279 dpurdie 344
}
345
 
346
#-------------------------------------------------------------------------------
6133 dpurdie 347
# Function        : getTargetsByTag 
279 dpurdie 348
#
6133 dpurdie 349
# Description     : Fetch an array of build platforms that are tagged
279 dpurdie 350
#
6133 dpurdie 351
# Inputs          : $tag    - Tag to process
279 dpurdie 352
#
6133 dpurdie 353
# Returns         : An array of targets. May be empty
279 dpurdie 354
#
6133 dpurdie 355
 
356
sub getTargetsByTag
279 dpurdie 357
{
6133 dpurdie 358
    my ($tag) = @_;
359
    Error("Internal: getTargetsByTag. No tag specified") unless ($tag);
360
    InitData();
4551 dpurdie 361
 
6133 dpurdie 362
    if (exists ($TargetByTag{uc($tag)}) )
4551 dpurdie 363
    {
6133 dpurdie 364
        return @{$TargetByTag{uc($tag)}};
4551 dpurdie 365
    }
6133 dpurdie 366
 
367
    my @empty;
368
    return @empty;
279 dpurdie 369
}
370
 
4551 dpurdie 371
#-------------------------------------------------------------------------------
6133 dpurdie 372
# Function        : targetHasTag 
4551 dpurdie 373
#
6276 dpurdie 374
# Description     : Determine if the named target has the specified tag
4551 dpurdie 375
#
6133 dpurdie 376
# Inputs          : $target
377
#                   $tag 
4551 dpurdie 378
#
6198 dpurdie 379
# Returns         : Value of the Tag. May be 1
380
#                   Tags of the form NAME=VALUE wull return 'VALUE'
4551 dpurdie 381
#
6133 dpurdie 382
sub targetHasTag
4551 dpurdie 383
{
6133 dpurdie 384
    my ($target, $tag) = @_;
6276 dpurdie 385
    my $value = 0;
6133 dpurdie 386
    Error("Internal: targetHasTag. No target specified") unless ($target);
387
    Error("Internal: targetHasTag. No tag specified") unless ($tag);
4551 dpurdie 388
 
389
    InitData();
6276 dpurdie 390
    $target = uc ($target);
6133 dpurdie 391
    if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag}))
4551 dpurdie 392
    {
6276 dpurdie 393
        $value = $TagByTarget{$target}{$tag};
4551 dpurdie 394
    }
6276 dpurdie 395
    Debug3("targetHasTag: @_ -> $value");
396
    return $value;
4551 dpurdie 397
}
398
 
279 dpurdie 399
1;
400