Subversion Repositories DevTools

Rev

Rev 7308 | 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
# 
7308 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
#
279 dpurdie 40
#   The following structure is a hash of arrays
41
#   The hash key is a supported machine type - one per machine
42
#   The data is an array of supported PLATFORMS
6133 dpurdie 43
#   Each platform may have a : seperated list of tags
44
#   Known tags include:
45
#       TOOLSET - Sutable for building JATS tools
46
#       NATIVE  - Can be expected to run on the build machine
47
#       KNOWN - Indicated platform is known to this machine type. Used to test existence 
48
#       GENERIC - Can be built on any machine
49
#       DEVLINUX - Part of the DEVLINUX alias
50
#       LINUX - Part of the LINUX alias 
7300 dpurdie 51
#       LMOS - Bastard Platforms from Hell
52
#       PKG_DEB - Install Debian Packages   
53
#       PKG_RPM - Install RPM Packages
54
#       PKG_WIN - Install Windows Installers
7307 dpurdie 55
#       SK - The SK familty of platforms
279 dpurdie 56
#
7308 dpurdie 57
our %BuildAvailability = (
279 dpurdie 58
    'linux_i386' => [
6133 dpurdie 59
        'ANDROIDARM:ANDROIDNDK',
60
        'ANDROIDMIPS:ANDROIDNDK',
61
        'ANDROIDX86:ANDROIDNDK',
4324 dpurdie 62
        'ANDROID',
7300 dpurdie 63
        'ARM9TDMI:DEVLINUX:LMOS:PKG_DEB',
64
        'COBRA:DEVLINUX:LMOS:PKG_DEB',
65
        'COBRA2:DEVLINUX:LMOS:PKG_DEB',
66
        'HAMMERHEAD:PKG_DEB',
4728 dpurdie 67
        'JAVA:NATIVE',
279 dpurdie 68
        'LINUX86',
69
        'LINUX_ARMV4',
70
        'LINUX_EMU',
6133 dpurdie 71
        'LINUX_ETX:DEVLINUX:LMOS',
72
        'LINUX_I386:NATIVE:TOOLSET',
7300 dpurdie 73
        'PPC_603E:DEVLINUX:LMOS:PKG_DEB',
7307 dpurdie 74
        'SK20:DEVLINUX:PKG_DEB:SK',
75
        'SK20V41:DEVLINUX:PKG_DEB:SK',
7300 dpurdie 76
        'UBUNTU12:NATIVE:TOOLSET:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 77
        'UBUNTU12_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7309 dpurdie 78
        'UBUNTU12C11:NATIVE:TOOLSET:DEVLINUX:PKG_DEB',
6133 dpurdie 79
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 80
        'VIPER2:DEVLINUX:PKG_DEB',
279 dpurdie 81
        ],
82
 
4162 dpurdie 83
    'linux_x64' => [
7300 dpurdie 84
        'LINUX_I386:NATIVE:PKG_DEB',
6133 dpurdie 85
        'JAVA:NATIVE',
7300 dpurdie 86
        'UBUNTU14:NATIVE:TOOLSET:LINUX:PKG_DEB',
6133 dpurdie 87
        'UBUNTU14_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
7300 dpurdie 88
        'UBUNTU16:NATIVE:TOOLSET:LINUX:PKG_DEB',
6133 dpurdie 89
        'UBUNTU16_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
90
        'ANDROIDARM:ANDROIDNDK',
91
        'ANDROIDMIPS:ANDROIDNDK',
92
        'ANDROIDX86:ANDROIDNDK',
93
        'ANDROID',
94
        'ARM9TDMI:DEVLINUX:LMOS',
7300 dpurdie 95
        'COBRA:DEVLINUX:LMOS:PKG_DEB',
96
        'COBRA2:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 97
        'HAMMERHEAD',
98
        'LINUX_ETX:DEVLINUX:LMOS',
7300 dpurdie 99
        'PPC_603E:DEVLINUX:LMOS:PKG_DEB',
7307 dpurdie 100
        'SK20:DEVLINUX:PKG_DEB:SK',
101
        'SK20V41:DEVLINUX:PKG_DEB:SK',
102
        'SK100:DEVLINUX:PKG_DEB:SK',
7309 dpurdie 103
        'UBUNTU12C11:NATIVE:DEVLINUX:PKG_DEB',
6133 dpurdie 104
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 105
        'VIPER2:DEVLINUX:PKG_DEB',
4162 dpurdie 106
        ],
107
 
7300 dpurdie 108
    'linux_el7_x64' => [
109
        'RHEL7:LINUX:TOOLSET:NATIVE:PKG_RPM',
110
        'RHEL7_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
111
        ],
112
 
279 dpurdie 113
    'solaris10_sparc32' => [
6133 dpurdie 114
        'SOLARIS10_SPARC32:NATIVE:TOOLSET',
4728 dpurdie 115
        'SOLARIS10_SPARC64:NATIVE',
116
        'JAVA:NATIVE',
279 dpurdie 117
        ],
118
 
119
    'solaris10_x86' => [
6133 dpurdie 120
        'SOLARIS10_X86:NATIVE:TOOLSET',
4728 dpurdie 121
        'SOLARIS10_X64:NATIVE',
279 dpurdie 122
        'JAVA',
123
        ],
124
 
125
    'sparc' => [
7308 dpurdie 126
        'SOLARIS:NATIVE:TOOLSET:TARGET_CFG=SOLARIS8_SPARC32',
279 dpurdie 127
        'SOLARIS_I386',
128
        'SOLARIS_SPARC',
4728 dpurdie 129
        'JAVA:NATIVE',
279 dpurdie 130
        ],
131
 
132
    'win32' => [
4928 dpurdie 133
        'ANDROID',
279 dpurdie 134
        'ACEX',
135
        'AMX',
363 dpurdie 136
        'ARM_I5100',
279 dpurdie 137
        'AVR_IAR',
138
        'BORLAND',
139
        'CMOS386',
140
        'CMOS68K',
5679 dpurdie 141
        'CORTEXM3_IAR',
4728 dpurdie 142
        'CSHARP:NATIVE',
143
        'CSHARP2005:NATIVE',
144
        'CSHARP2008:NATIVE',
145
        'CSHARP2010:NATIVE',
146
        'CSHARP2012:NATIVE',
6133 dpurdie 147
        'CSHARP2015:NATIVE',
279 dpurdie 148
        'DAFBR_MOS',
149
        'DAFBR_WIN',
289 dpurdie 150
        'DELPHI7',
279 dpurdie 151
        'DF4OBE',
152
        'DOS16',
153
        'DOS32',
154
        'EEPP386',
155
        'EETP386',
156
        'EOS',
157
        'EOSM68K',
158
        'EOSP386',
159
        'GMPCA',
160
        'GO32',
161
        'H8S',
283 dpurdie 162
        'H400',
279 dpurdie 163
        'HK386PC',
164
        'HKAVM',
165
        'HKAVM2',
166
        'HKBCP',
167
        'HKDDU',
168
        'HKGAK',
169
        'HKMPR',
170
        'HKPCA',
171
        'INGEN',
3832 dpurdie 172
        'INTELLECT',
4728 dpurdie 173
        'JAVA:NATIVE',
279 dpurdie 174
        'MCR',
175
        'MERG',
176
        'MOS68K',
177
        'MOS68KRM',
178
        'MOSCF',
179
        'MPT',
3564 dpurdie 180
        'VSDEVRC',
279 dpurdie 181
        'NGBCP',
182
        'NGDDU',
183
        'PHARLAP',
345 dpurdie 184
        'PHP',
371 dpurdie 185
        'RIORDS',
279 dpurdie 186
        'THYRON',
315 dpurdie 187
        'VB6',
279 dpurdie 188
        'VERIX',
383 dpurdie 189
        'VIXITP',
4728 dpurdie 190
        'VS2003:NATIVE',
7304 dpurdie 191
        'VS2005:NATIVE:MSWIN32',
4728 dpurdie 192
        'VS2008:NATIVE',
193
        'VS2010:NATIVE',
7300 dpurdie 194
        'VS2012:NATIVE:TOOLSET:MSWIN32:PKG_WIN',
195
        'VS2015:NATIVE:TOOLSET:MSWIN32:PKG_WIN',
6133 dpurdie 196
        'WCEIPA280:WINCE',
197
        'WCEIT3000:WINCE',
399 dpurdie 198
        'WCENAUTIZX5',
6133 dpurdie 199
        'WCEPA961:WINCE',
200
        'WCEPA962:WINCE',
201
        'WCEPA962_500:WINCE',
202
        'WCEPCM7220:WINCE',
279 dpurdie 203
        'WCEPSION_420',
6133 dpurdie 204
        'WCEPSION_500:WINCE',
205
        'WCEPSION_500_emu:WINCE',
206
        'WCEPSION_500_VS2005:WINCE',
207
        'WCEPSPC_arm:WINCE',
208
        'WCEPSPC_emu:WINCE',
209
        'WCEX86A420:WINCE',
210
        'WCEX86A500:WINCE',
211
        'WCEX86A500_SOM4455:WINCE',
7300 dpurdie 212
        'WIN32:NATIVE:TOOLSET:MSWIN32:LMOS:PKG_WIN',
213
        'VS2012_X64:NATIVE:MSWIN64:PKG_WIN',
214
        'VS2015_X64:NATIVE:MSWIN64:PKG_WIN',
279 dpurdie 215
        ],
4814 dpurdie 216
 
279 dpurdie 217
);
218
 
219
#
220
#   The above data will be reorganised and placed into the following
6133 dpurdie 221
#   hashes to simplify data access
279 dpurdie 222
#
6133 dpurdie 223
my %TargetByTag;
224
my %TagByTarget;
279 dpurdie 225
 
226
#-------------------------------------------------------------------------------
227
# Function        : InitData
228
#
229
# Description     : Init data structures
230
#                   Done once
231
#
4551 dpurdie 232
#                   Convert the $BuildAvailability entry array into a hash to 
6133 dpurdie 233
#                   simplify lookup. Add in the GENERIC target:
4551 dpurdie 234
#                       GENERIC         - can be built on ANY machine
279 dpurdie 235
#
236
# Inputs          : None
237
#
238
# Returns         : Nothing
239
#
240
sub InitData
241
{
242
    #
243
    #   Only do this work once
244
    #
6133 dpurdie 245
    return if exists $TagByTarget{'GENERIC'};
279 dpurdie 246
 
7309 dpurdie 247
    foreach my $machType ( qw(linux_x64  linux_i386 linux_el7_x64 solaris10_sparc32 solaris10_x86 sparc win32 ))
248
    {
6133 dpurdie 249
 
7309 dpurdie 250
        #
251
        #   Validate build machine
252
        #
253
        Error("GBE_MACHTYPE has not been defined ") unless defined $machType;
254
        Error (__PACKAGE__ . " : Unknown build machine type: $machType")
255
            unless ( exists $BuildAvailability{$machType} );
6133 dpurdie 256
 
7309 dpurdie 257
        #
258
        #   Convert the array into a hash to speed up access later
259
        #   Create GENERIC platform
260
        #
261
        push @{$BuildAvailability{$machType}}, 'GENERIC:GENERIC';
6133 dpurdie 262
 
7309 dpurdie 263
        #
264
        #   Create Machine Type specific Generic
265
        #       GENERIC_XXXX:GENERIC_MACHTYPE:TOOLSET
266
        #   
267
        my $genericMachTypes = 'GENERIC_' . uc ($machType);
268
        push @{$BuildAvailability{$machType}}, join (':', $genericMachTypes, 'GENERIC_MACHTYPE', 'TOOLSET' );
269
 
270
        foreach ( @{$BuildAvailability{$machType}}  )
4728 dpurdie 271
        {
7309 dpurdie 272
            my @data = split(':', $_ );
273
            my $target = shift @data;
274
            my $hasLMOS;
275
 
276
            next if exists $TagByTarget{$target}{'MACHTYPE'};
277
            $TagByTarget{$target}{'MACHTYPE'} = $machType;
278
            foreach my $item ( @data )
279
            {
280
                if ($item eq 'LMOS') {
281
                    $hasLMOS = 1;
282
                    next;
283
                }
284
 
285
                ($item, my $value) = split (/=/, $item,2);
286
                $value = 1 unless defined $value;
287
                $TagByTarget{$target}{uc($item)} = $value;
288
                push @{$TargetByTag{uc($item)}}, $target;
289
            }
290
 
291
            #
292
            #   Generate LMOS platforms entries from the base platform entry
293
            #
294
            if ($hasLMOS)
295
            {
296
                my $lmosTarget = 'LMOS_' . $target;
297
                next if exists $TagByTarget{$lmosTarget}{'MACHTYPE'};
298
                $TagByTarget{$lmosTarget}{'MACHTYPE'} = $machType;
299
                $TagByTarget{$lmosTarget}{'BASE_TARGET'} = $target;
300
                push @{$TargetByTag{uc('LMOS')}}, $lmosTarget;
301
                foreach my $item ( @data )
302
                {
303
                    next if ($item eq 'LMOS');
304
                    ($item, my $value) = split (/=/, $item,2);
305
                    $value = 1 unless defined $value;
306
                    $item = 'LMOS_' . $item;
307
                    $TagByTarget{$lmosTarget}{uc($item)} = $value;
308
                    push @{$TargetByTag{uc($item)}}, $lmosTarget;
309
                }
310
 
311
            }
4728 dpurdie 312
        }
279 dpurdie 313
    }
4551 dpurdie 314
 
6133 dpurdie 315
    #DebugDumpData("TagByTarget", \%TagByTarget);
316
    #DebugDumpData("TargetByTag", \%TargetByTag);
7309 dpurdie 317
    #DebugDumpData("BuildAvailability", \%BuildAvailability);
279 dpurdie 318
}
319
 
320
#-------------------------------------------------------------------------------
6133 dpurdie 321
# Function        : getTargetsByTag 
279 dpurdie 322
#
6133 dpurdie 323
# Description     : Fetch an array of build platforms that are tagged
279 dpurdie 324
#
6133 dpurdie 325
# Inputs          : $tag    - Tag to process
279 dpurdie 326
#
6133 dpurdie 327
# Returns         : An array of targets. May be empty
279 dpurdie 328
#
6133 dpurdie 329
 
330
sub getTargetsByTag
279 dpurdie 331
{
6133 dpurdie 332
    my ($tag) = @_;
333
    Error("Internal: getTargetsByTag. No tag specified") unless ($tag);
334
    InitData();
4551 dpurdie 335
 
6133 dpurdie 336
    if (exists ($TargetByTag{uc($tag)}) )
4551 dpurdie 337
    {
6133 dpurdie 338
        return @{$TargetByTag{uc($tag)}};
4551 dpurdie 339
    }
6133 dpurdie 340
 
341
    my @empty;
342
    return @empty;
279 dpurdie 343
}
344
 
4551 dpurdie 345
#-------------------------------------------------------------------------------
6133 dpurdie 346
# Function        : targetHasTag 
4551 dpurdie 347
#
7309 dpurdie 348
# Description     : Determine if the named target has the specified tag
4551 dpurdie 349
#
6133 dpurdie 350
# Inputs          : $target
351
#                   $tag 
4551 dpurdie 352
#
7308 dpurdie 353
# Returns         : Value of the Tag. May be 1
354
#                   Tags of the form NAME=VALUE wull return 'VALUE'
4551 dpurdie 355
#
6133 dpurdie 356
sub targetHasTag
4551 dpurdie 357
{
6133 dpurdie 358
    my ($target, $tag) = @_;
359
    Error("Internal: targetHasTag. No target specified") unless ($target);
360
    Error("Internal: targetHasTag. No tag specified") unless ($tag);
4551 dpurdie 361
 
362
    InitData();
6133 dpurdie 363
    if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag}))
4551 dpurdie 364
    {
7308 dpurdie 365
        return $TagByTarget{$target}{$tag};
4551 dpurdie 366
    }
367
    return 0;
368
}
369
 
279 dpurdie 370
1;
371