Subversion Repositories DevTools

Rev

Rev 7304 | Rev 7308 | 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
# 
36
our @BuildAliases = qw (NATIVE INSTRUMENT PKG_WIN PKG_RPM PKG_DEB SK);
37
our @BuildKeywords = ( qw (TOOLSET GENERIC), @BuildAliases );
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
#
57
my %BuildAvailability = (
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',
76
        'SK100:DEVLINUX:PKG_DEB:SK',
7300 dpurdie 77
        'UBUNTU12:NATIVE:TOOLSET:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 78
        'UBUNTU12_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 79
        'UBUNTU12C11:NATIVE:TOOLSET:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 80
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 81
        'VIPER2:DEVLINUX:PKG_DEB',
279 dpurdie 82
        ],
83
 
4162 dpurdie 84
    'linux_x64' => [
7300 dpurdie 85
        'LINUX_I386:NATIVE:PKG_DEB',
6133 dpurdie 86
        'JAVA:NATIVE',
7300 dpurdie 87
        'UBUNTU14:NATIVE:TOOLSET:LINUX:PKG_DEB',
6133 dpurdie 88
        'UBUNTU14_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
7300 dpurdie 89
        'UBUNTU16:NATIVE:TOOLSET:LINUX:PKG_DEB',
6133 dpurdie 90
        'UBUNTU16_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
91
        'ANDROIDARM:ANDROIDNDK',
92
        'ANDROIDMIPS:ANDROIDNDK',
93
        'ANDROIDX86:ANDROIDNDK',
94
        'ANDROID',
95
        'ARM9TDMI:DEVLINUX:LMOS',
7300 dpurdie 96
        'COBRA:DEVLINUX:LMOS:PKG_DEB',
97
        'COBRA2:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 98
        'HAMMERHEAD',
99
        'LINUX_ETX:DEVLINUX:LMOS',
7300 dpurdie 100
        'PPC_603E:DEVLINUX:LMOS:PKG_DEB',
7307 dpurdie 101
        'SK20:DEVLINUX:PKG_DEB:SK',
102
        'SK20V41:DEVLINUX:PKG_DEB:SK',
103
        'SK100:DEVLINUX:PKG_DEB:SK',
7300 dpurdie 104
        'UBUNTU12C11:NATIVE:DEVLINUX:LMOS:PKG_DEB',
6133 dpurdie 105
        'UBUNTU12C11_INSTRUMENT:NATIVE:DEVLINUX:INSTRUMENT',
7300 dpurdie 106
        'VIPER2:DEVLINUX:PKG_DEB',
4162 dpurdie 107
        ],
108
 
7300 dpurdie 109
    'linux_el7_x64' => [
110
        'RHEL7:LINUX:TOOLSET:NATIVE:PKG_RPM',
111
        'RHEL7_INSTRUMENT:NATIVE:LINUX:INSTRUMENT',
112
        ],
113
 
279 dpurdie 114
    'solaris10_sparc32' => [
6133 dpurdie 115
        'SOLARIS10_SPARC32:NATIVE:TOOLSET',
4728 dpurdie 116
        'SOLARIS10_SPARC64:NATIVE',
117
        'JAVA:NATIVE',
279 dpurdie 118
        ],
119
 
120
    'solaris10_x86' => [
6133 dpurdie 121
        'SOLARIS10_X86:NATIVE:TOOLSET',
4728 dpurdie 122
        'SOLARIS10_X64:NATIVE',
279 dpurdie 123
        'JAVA',
124
        ],
125
 
126
    'sparc' => [
6133 dpurdie 127
        'SOLARIS:NATIVE:TOOLSET',
279 dpurdie 128
        'SOLARIS_I386',
129
        'SOLARIS_SPARC',
4728 dpurdie 130
        'JAVA:NATIVE',
279 dpurdie 131
        ],
132
 
133
    'win32' => [
4928 dpurdie 134
        'ANDROID',
279 dpurdie 135
        'ACEX',
136
        'AMX',
363 dpurdie 137
        'ARM_I5100',
279 dpurdie 138
        'AVR_IAR',
139
        'BORLAND',
140
        'CMOS386',
141
        'CMOS68K',
5679 dpurdie 142
        'CORTEXM3_IAR',
4728 dpurdie 143
        'CSHARP:NATIVE',
144
        'CSHARP2005:NATIVE',
145
        'CSHARP2008:NATIVE',
146
        'CSHARP2010:NATIVE',
147
        'CSHARP2012:NATIVE',
6133 dpurdie 148
        'CSHARP2015:NATIVE',
279 dpurdie 149
        'DAFBR_MOS',
150
        'DAFBR_WIN',
289 dpurdie 151
        'DELPHI7',
279 dpurdie 152
        'DF4OBE',
153
        'DOS16',
154
        'DOS32',
155
        'EEPP386',
156
        'EETP386',
157
        'EOS',
158
        'EOSM68K',
159
        'EOSP386',
160
        'GMPCA',
161
        'GO32',
162
        'H8S',
283 dpurdie 163
        'H400',
279 dpurdie 164
        'HK386PC',
165
        'HKAVM',
166
        'HKAVM2',
167
        'HKBCP',
168
        'HKDDU',
169
        'HKGAK',
170
        'HKMPR',
171
        'HKPCA',
172
        'INGEN',
3832 dpurdie 173
        'INTELLECT',
4728 dpurdie 174
        'JAVA:NATIVE',
279 dpurdie 175
        'MCR',
176
        'MERG',
177
        'MOS68K',
178
        'MOS68KRM',
179
        'MOSCF',
180
        'MPT',
3564 dpurdie 181
        'VSDEVRC',
279 dpurdie 182
        'NGBCP',
183
        'NGDDU',
184
        'PHARLAP',
345 dpurdie 185
        'PHP',
371 dpurdie 186
        'RIORDS',
279 dpurdie 187
        'THYRON',
315 dpurdie 188
        'VB6',
279 dpurdie 189
        'VERIX',
383 dpurdie 190
        'VIXITP',
4728 dpurdie 191
        'VS2003:NATIVE',
7304 dpurdie 192
        'VS2005:NATIVE:MSWIN32',
4728 dpurdie 193
        'VS2008:NATIVE',
194
        'VS2010:NATIVE',
7300 dpurdie 195
        'VS2012:NATIVE:TOOLSET:MSWIN32:PKG_WIN',
196
        'VS2015:NATIVE:TOOLSET:MSWIN32:PKG_WIN',
6133 dpurdie 197
        'WCEIPA280:WINCE',
198
        'WCEIT3000:WINCE',
399 dpurdie 199
        'WCENAUTIZX5',
6133 dpurdie 200
        'WCEPA961:WINCE',
201
        'WCEPA962:WINCE',
202
        'WCEPA962_500:WINCE',
203
        'WCEPCM7220:WINCE',
279 dpurdie 204
        'WCEPSION_420',
6133 dpurdie 205
        'WCEPSION_500:WINCE',
206
        'WCEPSION_500_emu:WINCE',
207
        'WCEPSION_500_VS2005:WINCE',
208
        'WCEPSPC_arm:WINCE',
209
        'WCEPSPC_emu:WINCE',
210
        'WCEX86A420:WINCE',
211
        'WCEX86A500:WINCE',
212
        'WCEX86A500_SOM4455:WINCE',
7300 dpurdie 213
        'WIN32:NATIVE:TOOLSET:MSWIN32:LMOS:PKG_WIN',
214
        'VS2012_X64:NATIVE:MSWIN64:PKG_WIN',
215
        'VS2015_X64:NATIVE:MSWIN64:PKG_WIN',
279 dpurdie 216
        ],
4814 dpurdie 217
 
279 dpurdie 218
);
219
 
220
#
221
#   The above data will be reorganised and placed into the following
6133 dpurdie 222
#   hashes to simplify data access
279 dpurdie 223
#
6133 dpurdie 224
my %TargetByTag;
225
my %TagByTarget;
279 dpurdie 226
 
227
#-------------------------------------------------------------------------------
228
# Function        : InitData
229
#
230
# Description     : Init data structures
231
#                   Done once
232
#
4551 dpurdie 233
#                   Convert the $BuildAvailability entry array into a hash to 
6133 dpurdie 234
#                   simplify lookup. Add in the GENERIC target:
4551 dpurdie 235
#                       GENERIC         - can be built on ANY machine
279 dpurdie 236
#
237
# Inputs          : None
238
#
239
# Returns         : Nothing
240
#
241
sub InitData
242
{
243
    #
244
    #   Only do this work once
245
    #
6133 dpurdie 246
    return if exists $TagByTarget{'GENERIC'};
279 dpurdie 247
    #
248
    #   Validate build machine
249
    #
250
    Error (__PACKAGE__ . " : Unknown build machine type: $::GBE_MACHTYPE")
251
        unless ( exists $BuildAvailability{$::GBE_MACHTYPE} );
252
 
253
    #
4551 dpurdie 254
    #   Convert the array into a hash to speed up access later
6133 dpurdie 255
    #   Create GENERIC platform
279 dpurdie 256
    #
6133 dpurdie 257
    push @{$BuildAvailability{$::GBE_MACHTYPE}}, 'GENERIC:GENERIC';
258
 
259
    #
260
    #   Create Machine Type specific Generic
261
    #       GENERIC_XXXX:GENERIC_MACHTYPE:TOOLSET
262
    #   
263
    my $genericMachTypes = 'GENERIC_' . uc ($::GBE_MACHTYPE);
264
    push @{$BuildAvailability{$::GBE_MACHTYPE}}, join (':', $genericMachTypes, 'GENERIC_MACHTYPE', 'TOOLSET' );
265
 
279 dpurdie 266
    foreach ( @{$BuildAvailability{$::GBE_MACHTYPE}}  )
267
    {
4728 dpurdie 268
        my @data = split(':', $_ );
6133 dpurdie 269
        my $target = shift @data;
270
 
271
        $TagByTarget{$target}{'KNOWN'} = 1;
272
        foreach my $item ( @data )
4728 dpurdie 273
        {
6133 dpurdie 274
            $TagByTarget{$target}{uc($item)} = 1;
275
            push @{$TargetByTag{uc($item)}}, $target;
4728 dpurdie 276
        }
279 dpurdie 277
    }
4551 dpurdie 278
 
6133 dpurdie 279
    #DebugDumpData("TagByTarget", \%TagByTarget);
280
    #DebugDumpData("TargetByTag", \%TargetByTag);
279 dpurdie 281
}
282
 
283
#-------------------------------------------------------------------------------
6133 dpurdie 284
# Function        : getTargetsByTag 
279 dpurdie 285
#
6133 dpurdie 286
# Description     : Fetch an array of build platforms that are tagged
279 dpurdie 287
#
6133 dpurdie 288
# Inputs          : $tag    - Tag to process
279 dpurdie 289
#
6133 dpurdie 290
# Returns         : An array of targets. May be empty
279 dpurdie 291
#
6133 dpurdie 292
 
293
sub getTargetsByTag
279 dpurdie 294
{
6133 dpurdie 295
    my ($tag) = @_;
296
    Error("Internal: getTargetsByTag. No tag specified") unless ($tag);
297
    InitData();
4551 dpurdie 298
 
6133 dpurdie 299
    if (exists ($TargetByTag{uc($tag)}) )
4551 dpurdie 300
    {
6133 dpurdie 301
        return @{$TargetByTag{uc($tag)}};
4551 dpurdie 302
    }
6133 dpurdie 303
 
304
    my @empty;
305
    return @empty;
279 dpurdie 306
}
307
 
4551 dpurdie 308
#-------------------------------------------------------------------------------
6133 dpurdie 309
# Function        : targetHasTag 
4551 dpurdie 310
#
6133 dpurdie 311
# Description     : Determineif the named target has the specified tag
4551 dpurdie 312
#
6133 dpurdie 313
# Inputs          : $target
314
#                   $tag 
4551 dpurdie 315
#
6133 dpurdie 316
# Returns         : Boolean
4551 dpurdie 317
#
6133 dpurdie 318
sub targetHasTag
4551 dpurdie 319
{
6133 dpurdie 320
    my ($target, $tag) = @_;
321
    Error("Internal: targetHasTag. No target specified") unless ($target);
322
    Error("Internal: targetHasTag. No tag specified") unless ($tag);
4551 dpurdie 323
 
324
    InitData();
6133 dpurdie 325
    if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag}))
4551 dpurdie 326
    {
6133 dpurdie 327
        return 1;
4551 dpurdie 328
    }
329
    return 0;
330
}
331
 
279 dpurdie 332
1;
333