Subversion Repositories DevTools

Rev

Rev 7307 | Rev 7309 | 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 );
37
our @BuildKeywords = ( qw (TOOLSET GENERIC GENERIC_MACHTYPE), @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',
7300 dpurdie 78
        'UBUNTU12C11:NATIVE:TOOLSET:DEVLINUX:LMOS: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',
7300 dpurdie 103
        'UBUNTU12C11:NATIVE:DEVLINUX:LMOS: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
    #
247
    #   Validate build machine
248
    #
7308 dpurdie 249
    Error("GBE_MACHTYPE has not been defined ") unless defined $::GBE_MACHTYPE;
279 dpurdie 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
        {
7308 dpurdie 274
            ($item, my $value) = split (/=/, $item,2);
275
            $value = 1 unless defined $value;
276
            $TagByTarget{$target}{uc($item)} = $value;
6133 dpurdie 277
            push @{$TargetByTag{uc($item)}}, $target;
4728 dpurdie 278
        }
279 dpurdie 279
    }
4551 dpurdie 280
 
6133 dpurdie 281
    #DebugDumpData("TagByTarget", \%TagByTarget);
282
    #DebugDumpData("TargetByTag", \%TargetByTag);
279 dpurdie 283
}
284
 
285
#-------------------------------------------------------------------------------
6133 dpurdie 286
# Function        : getTargetsByTag 
279 dpurdie 287
#
6133 dpurdie 288
# Description     : Fetch an array of build platforms that are tagged
279 dpurdie 289
#
6133 dpurdie 290
# Inputs          : $tag    - Tag to process
279 dpurdie 291
#
6133 dpurdie 292
# Returns         : An array of targets. May be empty
279 dpurdie 293
#
6133 dpurdie 294
 
295
sub getTargetsByTag
279 dpurdie 296
{
6133 dpurdie 297
    my ($tag) = @_;
298
    Error("Internal: getTargetsByTag. No tag specified") unless ($tag);
299
    InitData();
4551 dpurdie 300
 
6133 dpurdie 301
    if (exists ($TargetByTag{uc($tag)}) )
4551 dpurdie 302
    {
6133 dpurdie 303
        return @{$TargetByTag{uc($tag)}};
4551 dpurdie 304
    }
6133 dpurdie 305
 
306
    my @empty;
307
    return @empty;
279 dpurdie 308
}
309
 
4551 dpurdie 310
#-------------------------------------------------------------------------------
6133 dpurdie 311
# Function        : targetHasTag 
4551 dpurdie 312
#
6133 dpurdie 313
# Description     : Determineif the named target has the specified tag
4551 dpurdie 314
#
6133 dpurdie 315
# Inputs          : $target
316
#                   $tag 
4551 dpurdie 317
#
7308 dpurdie 318
# Returns         : Value of the Tag. May be 1
319
#                   Tags of the form NAME=VALUE wull return 'VALUE'
4551 dpurdie 320
#
6133 dpurdie 321
sub targetHasTag
4551 dpurdie 322
{
6133 dpurdie 323
    my ($target, $tag) = @_;
324
    Error("Internal: targetHasTag. No target specified") unless ($target);
325
    Error("Internal: targetHasTag. No tag specified") unless ($tag);
4551 dpurdie 326
 
327
    InitData();
6133 dpurdie 328
    if (exists ($TagByTarget{$target}) && exists ($TagByTarget{$target}{$tag}))
4551 dpurdie 329
    {
7308 dpurdie 330
        return $TagByTarget{$target}{$tag};
4551 dpurdie 331
    }
332
    return 0;
333
}
334
 
279 dpurdie 335
1;
336