Subversion Repositories DevTools

Rev

Rev 7309 | Rev 7322 | 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
#
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
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',
78
        'LINUX_ARMV4',
79
        'LINUX_EMU',
6133 dpurdie 80
        'LINUX_ETX:DEVLINUX:LMOS',
81
        'LINUX_I386: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' => [
7300 dpurdie 93
        'LINUX_I386: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',
100
        'ANDROIDMIPS:ANDROIDNDK',
101
        'ANDROIDX86:ANDROIDNDK',
102
        'ANDROID',
103
        'ARM9TDMI:DEVLINUX:LMOS',
7300 dpurdie 104
        'COBRA:DEVLINUX:LMOS:PKG_DEB',
105
        'COBRA2:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 106
        'HAMMERHEAD',
107
        'LINUX_ETX:DEVLINUX:LMOS',
7300 dpurdie 108
        'PPC_603E:DEVLINUX:LMOS:PKG_DEB',
7307 dpurdie 109
        'SK20:DEVLINUX:PKG_DEB:SK',
110
        'SK20V41:DEVLINUX:PKG_DEB:SK',
111
        'SK100:DEVLINUX:PKG_DEB:SK',
7309 dpurdie 112
        'UBUNTU12C11:NATIVE:DEVLINUX:PKG_DEB',
6133 dpurdie 113
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 114
        'VIPER2:DEVLINUX:PKG_DEB',
4162 dpurdie 115
        ],
116
 
7300 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' => [
7310 dpurdie 123
        'SOLARIS10_SPARC32:SOLARIS:NATIVE:TOOLSET',
124
        'SOLARIS10_SPARC64:SOLARIS:NATIVE',
4728 dpurdie 125
        'JAVA:NATIVE',
279 dpurdie 126
        ],
127
 
128
    'solaris10_x86' => [
7310 dpurdie 129
        'SOLARIS10_X86:SOLARIS:NATIVE:TOOLSET',
130
        'SOLARIS10_X64:SOLARIS:NATIVE',
131
        'JAVA:NATIVE',
279 dpurdie 132
        ],
133
 
134
    'sparc' => [
7310 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',
7304 dpurdie 198
        'VS2005:NATIVE:MSWIN32',
4728 dpurdie 199
        'VS2008:NATIVE',
200
        'VS2010:NATIVE',
7300 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',
7300 dpurdie 219
        'WIN32:NATIVE:TOOLSET:MSWIN32:LMOS:PKG_WIN',
220
        'VS2012_X64:NATIVE:MSWIN64:PKG_WIN',
221
        'VS2015_X64:NATIVE:MSWIN64:PKG_WIN',
279 dpurdie 222
        ],
4814 dpurdie 223
 
279 dpurdie 224
);
225
 
226
#
227
#   The above data will be reorganised and placed into the following
6133 dpurdie 228
#   hashes to simplify data access
279 dpurdie 229
#
6133 dpurdie 230
my %TargetByTag;
231
my %TagByTarget;
279 dpurdie 232
 
233
#-------------------------------------------------------------------------------
234
# Function        : InitData
235
#
236
# Description     : Init data structures
237
#                   Done once
238
#
4551 dpurdie 239
#                   Convert the $BuildAvailability entry array into a hash to 
7310 dpurdie 240
#                   simplify lookup. 
241
#                       Add in the GENERIC target
242
#                       Add in the GENERIC_MACHTYPE target
243
#                       Add in LMOS targets
279 dpurdie 244
#
245
# Inputs          : None
246
#
247
# Returns         : Nothing
248
#
249
sub InitData
250
{
251
    #
252
    #   Only do this work once
253
    #
6133 dpurdie 254
    return if exists $TagByTarget{'GENERIC'};
7310 dpurdie 255
 
256
    #
257
    #   Process all machine types
258
    #       Processes myself first
259
    #       Process linux_x64 before linux_i386
260
    #
261
    Error("GBE_MACHTYPE has not been defined ") unless defined $::GBE_MACHTYPE;
262
    foreach my $machType ( $::GBE_MACHTYPE, qw(linux_x64  linux_i386 linux_el7_x64 solaris10_sparc32 solaris10_x86 sparc win32 ))
7309 dpurdie 263
    {
264
        #
265
        #   Validate build machine
266
        #
267
        Error("GBE_MACHTYPE has not been defined ") unless defined $machType;
268
        Error (__PACKAGE__ . " : Unknown build machine type: $machType")
269
            unless ( exists $BuildAvailability{$machType} );
6133 dpurdie 270
 
7309 dpurdie 271
        #
272
        #   Convert the array into a hash to speed up access later
273
        #   Create GENERIC platform
274
        #
275
        push @{$BuildAvailability{$machType}}, 'GENERIC:GENERIC';
6133 dpurdie 276
 
7309 dpurdie 277
        #
278
        #   Create Machine Type specific Generic
279
        #       GENERIC_XXXX:GENERIC_MACHTYPE:TOOLSET
280
        #   
281
        my $genericMachTypes = 'GENERIC_' . uc ($machType);
7310 dpurdie 282
        push @{$BuildAvailability{$machType}}, join (':', $genericMachTypes, 'GENERIC_MACHTYPE', 'TOOLSET', 'GENERICS' );
7309 dpurdie 283
 
284
        foreach ( @{$BuildAvailability{$machType}}  )
4728 dpurdie 285
        {
7309 dpurdie 286
            my @data = split(':', $_ );
7310 dpurdie 287
            my $target = uc shift @data;
7309 dpurdie 288
            my $hasLMOS;
289
 
7310 dpurdie 290
            #
291
            #   Add in MACHTYPE, only the first machine is processed
292
            #
7309 dpurdie 293
            next if exists $TagByTarget{$target}{'MACHTYPE'};
294
            $TagByTarget{$target}{'MACHTYPE'} = $machType;
7310 dpurdie 295
 
296
            #
297
            #   Add items into data structures
298
            #   Allow for AAAAA=Value
299
            #
7309 dpurdie 300
            foreach my $item ( @data )
301
            {
302
                if ($item eq 'LMOS') {
303
                    $hasLMOS = 1;
304
                    next;
305
                }
306
 
307
                ($item, my $value) = split (/=/, $item,2);
308
                $value = 1 unless defined $value;
309
                $TagByTarget{$target}{uc($item)} = $value;
310
                push @{$TargetByTag{uc($item)}}, $target;
311
            }
312
 
313
            #
314
            #   Generate LMOS platforms entries from the base platform entry
7310 dpurdie 315
            #   Similar to above, but it has LMOS prefix
7309 dpurdie 316
            #
317
            if ($hasLMOS)
318
            {
319
                my $lmosTarget = 'LMOS_' . $target;
320
                next if exists $TagByTarget{$lmosTarget}{'MACHTYPE'};
321
                $TagByTarget{$lmosTarget}{'MACHTYPE'} = $machType;
7310 dpurdie 322
 
7309 dpurdie 323
                $TagByTarget{$lmosTarget}{'BASE_TARGET'} = $target;
324
                push @{$TargetByTag{uc('LMOS')}}, $lmosTarget;
7310 dpurdie 325
 
7309 dpurdie 326
                foreach my $item ( @data )
327
                {
328
                    next if ($item eq 'LMOS');
329
                    ($item, my $value) = split (/=/, $item,2);
330
                    $value = 1 unless defined $value;
331
                    $item = 'LMOS_' . $item;
332
                    $TagByTarget{$lmosTarget}{uc($item)} = $value;
333
                    push @{$TargetByTag{uc($item)}}, $lmosTarget;
334
                }
335
 
336
            }
4728 dpurdie 337
        }
279 dpurdie 338
    }
4551 dpurdie 339
 
6133 dpurdie 340
    #DebugDumpData("TagByTarget", \%TagByTarget);
341
    #DebugDumpData("TargetByTag", \%TargetByTag);
7309 dpurdie 342
    #DebugDumpData("BuildAvailability", \%BuildAvailability);
279 dpurdie 343
}
344
 
345
#-------------------------------------------------------------------------------
6133 dpurdie 346
# Function        : getTargetsByTag 
279 dpurdie 347
#
6133 dpurdie 348
# Description     : Fetch an array of build platforms that are tagged
279 dpurdie 349
#
6133 dpurdie 350
# Inputs          : $tag    - Tag to process
279 dpurdie 351
#
6133 dpurdie 352
# Returns         : An array of targets. May be empty
279 dpurdie 353
#
6133 dpurdie 354
 
355
sub getTargetsByTag
279 dpurdie 356
{
6133 dpurdie 357
    my ($tag) = @_;
358
    Error("Internal: getTargetsByTag. No tag specified") unless ($tag);
359
    InitData();
4551 dpurdie 360
 
6133 dpurdie 361
    if (exists ($TargetByTag{uc($tag)}) )
4551 dpurdie 362
    {
6133 dpurdie 363
        return @{$TargetByTag{uc($tag)}};
4551 dpurdie 364
    }
6133 dpurdie 365
 
366
    my @empty;
367
    return @empty;
279 dpurdie 368
}
369
 
4551 dpurdie 370
#-------------------------------------------------------------------------------
6133 dpurdie 371
# Function        : targetHasTag 
4551 dpurdie 372
#
7309 dpurdie 373
# Description     : Determine if the named target has the specified tag
4551 dpurdie 374
#
6133 dpurdie 375
# Inputs          : $target
376
#                   $tag 
4551 dpurdie 377
#
7308 dpurdie 378
# Returns         : Value of the Tag. May be 1
379
#                   Tags of the form NAME=VALUE wull return 'VALUE'
4551 dpurdie 380
#
6133 dpurdie 381
sub targetHasTag
4551 dpurdie 382
{
6133 dpurdie 383
    my ($target, $tag) = @_;
7310 dpurdie 384
    my $value = 0;
6133 dpurdie 385
    Error("Internal: targetHasTag. No target specified") unless ($target);
386
    Error("Internal: targetHasTag. No tag specified") unless ($tag);
4551 dpurdie 387
 
388
    InitData();
7310 dpurdie 389
    $target = uc ($target);
6133 dpurdie 390
    if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag}))
4551 dpurdie 391
    {
7310 dpurdie 392
        $value = $TagByTarget{$target}{$tag};
4551 dpurdie 393
    }
7310 dpurdie 394
    Debug3("targetHasTag: @_ -> $value");
395
    return $value;
4551 dpurdie 396
}
397
 
279 dpurdie 398
1;
399