Subversion Repositories DevTools

Rev

Rev 6442 | Rev 6619 | 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',
6133 dpurdie 110
        'HAMMERHEAD',
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',
115
        'SK100:DEVLINUX:PKG_DEB:SK',
6276 dpurdie 116
        'UBUNTU12C11:NATIVE:DEVLINUX:PKG_DEB',
6133 dpurdie 117
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
6177 dpurdie 118
        'VIPER2:DEVLINUX:PKG_DEB',
4162 dpurdie 119
        ],
120
 
6177 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' => [
6276 dpurdie 127
        'SOLARIS10_SPARC32:SOLARIS:NATIVE:TOOLSET',
128
        'SOLARIS10_SPARC64:SOLARIS:NATIVE',
4728 dpurdie 129
        'JAVA:NATIVE',
279 dpurdie 130
        ],
131
 
132
    'solaris10_x86' => [
6276 dpurdie 133
        'SOLARIS10_X86:SOLARIS:NATIVE:TOOLSET',
134
        'SOLARIS10_X64:SOLARIS:NATIVE',
135
        'JAVA:NATIVE',
279 dpurdie 136
        ],
137
 
138
    'sparc' => [
6276 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',
6177 dpurdie 202
        'VS2005:NATIVE:MSWIN32',
4728 dpurdie 203
        'VS2008:NATIVE',
204
        'VS2010:NATIVE',
6177 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',
6294 dpurdie 223
        'WCE6ARMV4I:WINCE6',
6177 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 
6276 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'};
6276 dpurdie 260
 
279 dpurdie 261
    #
6276 dpurdie 262
    #   Process all machine types
263
    #       Processes myself first
264
    #       Process linux_x64 before linux_i386
279 dpurdie 265
    #
6198 dpurdie 266
    Error("GBE_MACHTYPE has not been defined ") unless defined $::GBE_MACHTYPE;
6276 dpurdie 267
    foreach my $machType ( $::GBE_MACHTYPE, qw(linux_x64  linux_i386 linux_el7_x64 solaris10_sparc32 solaris10_x86 sparc win32 ))
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} );
279 dpurdie 275
 
6276 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
 
6276 dpurdie 282
        #
283
        #   Create Machine Type specific Generic
284
        #       GENERIC_XXXX:GENERIC_MACHTYPE:TOOLSET
285
        #   
286
        my $genericMachTypes = 'GENERIC_' . uc ($machType);
287
        push @{$BuildAvailability{$machType}}, join (':', $genericMachTypes, 'GENERIC_MACHTYPE', 'TOOLSET', 'GENERICS' );
6133 dpurdie 288
 
6276 dpurdie 289
        foreach ( @{$BuildAvailability{$machType}}  )
290
        {
291
            my @data = split(':', $_ );
292
            my $target = uc shift @data;
293
            my $hasLMOS;
6133 dpurdie 294
 
6276 dpurdie 295
            #
296
            #   Add in MACHTYPE, only the first machine is processed
297
            #
298
            next if exists $TagByTarget{$target}{'MACHTYPE'};
299
            $TagByTarget{$target}{'MACHTYPE'} = $machType;
300
 
301
            #
302
            #   Add items into data structures
303
            #   Allow for AAAAA=Value
304
            #
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
320
            #   Similar to above, but it has LMOS prefix
6387 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    
6276 dpurdie 326
            #
327
            if ($hasLMOS)
328
            {
329
                my $lmosTarget = 'LMOS_' . $target;
330
                next if exists $TagByTarget{$lmosTarget}{'MACHTYPE'};
331
                $TagByTarget{$lmosTarget}{'MACHTYPE'} = $machType;
332
 
333
                $TagByTarget{$lmosTarget}{'BASE_TARGET'} = $target;
334
                push @{$TargetByTag{uc('LMOS')}}, $lmosTarget;
335
 
336
                foreach my $item ( @data )
337
                {
338
                    next if ($item eq 'LMOS');
6387 dpurdie 339
                    next if ($item eq 'TOOLSET');
340
 
6276 dpurdie 341
                    ($item, my $value) = split (/=/, $item,2);
342
                    $value = 1 unless defined $value;
6387 dpurdie 343
                    unless (grep /^$item$/, @BuildAliases) {
344
                        $item = 'LMOS_' . $item;
345
                    }
6276 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);
6276 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
#
6276 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
#
6198 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) = @_;
6276 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();
6276 dpurdie 403
    $target = uc ($target);
6133 dpurdie 404
    if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag}))
4551 dpurdie 405
    {
6276 dpurdie 406
        $value = $TagByTarget{$target}{$tag};
4551 dpurdie 407
    }
6276 dpurdie 408
    Debug3("targetHasTag: @_ -> $value");
409
    return $value;
4551 dpurdie 410
}
411
 
279 dpurdie 412
1;
413