Subversion Repositories DevTools

Rev

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