Subversion Repositories DevTools

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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