Subversion Repositories DevTools

Rev

Rev 7310 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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