Subversion Repositories DevTools

Rev

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

Rev Author Line No. Line
227 dpurdie 1
# -*- mode: perl; indent-width: 4; -*-
2
##############################################################################
3
# Copyright (c) ERG Transit Systems. 1996-2004
4
#
5
# File:         PLATFORM/eos
6
#
7
# Contents:     Generic EOS platform definition, for all
8
#               platforms both kernel and targets.
9
#
10
# Revision History:
11
#   19/08/99  APY   Created
12
#   02/11/99  APY   NGDDU/NGBCP
13
#   06/12/99  APY   Networking
14
#   04/01/00  APY   - Defined EOS_CPU2
15
#                   - Library 'eosdvff' not available under HK386PC
16
#                   - KDB
17
#   01/03/00  APY   Audio driver standard for P386
18
#   09/03/00  APY   --Local within CPU/FAMILY directory specification
19
#   06/04/00  APY   HKGAK, HKAVM (with CMOS flavouring)
20
#   02/09/01  APY   HK396PC, DVUT
21
#   27/02/02  APY   Build system +v2 support,
22
#                       Populate ScmTarget and ScmTargetMach
23
#   12/04/02  APY   eoshal library
24
#   07/05/02  APY   Additional HKPCA libraries
25
#   27/05/02        NET_PROD option
26
#   11/07/02        EETP386, -DMELBOURNE
27
#   19/07/02        EOSBSD
28
#   04/10/02        GMPCA
29
#   19/04/04        --NoWarn
30
##############################################################################
31
#
32
 
33
EosInit();
34
 
35
$EOS_LNK    = 0x1000;
36
$EOS_KDB    = 0x2000;
37
$EOS_BIN    = 0x0100;
38
$EOS_ROM    = 0x0200;
39
$EOS_EXT    = 0x0400;
40
 
41
$NET_ROUTER = 0x0010;                           
42
$NET_UDP    = 0x0020;
43
$NET_TCP    = 0x0040;
44
$NET_PROD   = 0x0080;                           #Force production
45
$NET_UDPX   = $NET_UDP | $NET_ROUTER;
46
$NET_TCPX   = $NET_TCP | $NET_ROUTER;
47
$_NETKERNEL = $NET_UDP | $NET_TCP;              #Required for TCP and/or UDP
48
 
49
##############################################################################
50
#.  AMX platform runtime configuration
51
#
52
##############################################################################
53
sub EosInit
54
{
55
    AddFlags( '*', '-DEMBEDDED', '-D__EOSSYSTEM__' );
56
 
57
#.. Kernels
58
#
59
    #... Intel 86386 (and greater) protected mode
60
    #
61
    AddFlags( 'EOSP386',        '-DPERTH', '-DEOS_I86' );
62
    AddFlags( 'EETP386',        '-DMELBOURNE', '-DEOS_I86' );
63
    AddFlags( 'CMOS386',        '-DMELBOURNE', '-DEOS_I86' );
64
    $EOS_CPU        = "P386"
65
        if ( $ScmPlatform eq "EOSP386" ||
66
             $ScmPlatform eq "EETP386" ||
67
             $ScmPlatform eq "CMOS386" );
68
 
69
    #... 68x00
70
    #
71
    AddFlags( 'EOSM68K',        '-DPERTH' );
72
    AddFlags( 'CMOS68K',        '-DMELBOURNE' );
73
    $EOS_CPU        = "M68K"
74
        if ( $ScmPlatform eq "EOSM68K" || $ScmPlatform eq "CMOS68K" );
75
 
76
#.. Targets
77
#
78
    $EOS_KERNEL     = "";
79
    $EOS_CPU2       = "";
80
 
81
    #... HK386PC        (HK/Protected Mode 386)
82
    #
83
    AddFlags( 'HK386PC',        '-DPERTH', '-DEOS_I86' );
84
    if ( $ScmPlatform eq "HK386PC" ) {
85
        $EOS_KERNEL =  "EOSP386";
86
        $EOS_PROD   =  "HK386PC";
87
        $EOS_FAM    =  "HK386PC";
88
        $EOS_CPU    =  "P386";
89
    }
90
 
91
    #... HKMPR          (HK/Multi-Processor Unit)
92
    #
93
    AddFlags( 'HKMPR',          '-DPERTH', '-DM68K', '-DEOS_M68K' );
94
    if ( $ScmPlatform eq "HKMPR" ) {
95
        $EOS_KERNEL =  "EOSM68K";
96
        $EOS_PROD   =  "HKMPR";
97
        $EOS_FAM    =  "HKPERTH1";
98
        $EOS_CPU    =  "M341";
99
    }
100
 
101
    #... HKDDU          (HK/Driver Display Unit)
102
    #
103
    AddFlags( 'HKDDU',          '-DPERTH', '-DM68K', '-DEOS_M68K' );
104
    if ( $ScmPlatform eq "HKDDU" ) {
105
        $EOS_KERNEL =  "EOSM68K";
106
        $EOS_PROD   =  "HKDDU";
107
        $EOS_FAM    =  "HKPERTH1";
108
        $EOS_CPU    =  "M341";
109
    }
110
 
111
    #... NGDDU          (HK/New Generation Driver Display Unit)
112
    #
113
    AddFlags( 'NGDDU',          '-DPERTH', '-DM68K', '-DEOS_M68K' );
114
    if ( $ScmPlatform eq "NGDDU" ) {
115
        $EOS_KERNEL =  "EOSM68K";
116
        $EOS_PROD   =  "NGDDU";
117
        $EOS_FAM    =  "HKPERTH1";
118
        $EOS_CPU    =  "M341";
119
        $EOS_CPU2   =  "M340";          # Supports M341/M340 env ...
120
    }
121
 
122
    #... HKBCP          (HK/Bus Card Processor)
123
    #
124
    AddFlags( 'HKBCP',          '-DPERTH', '-DM68K', '-DEOS_M68K' );
125
    if ( $ScmPlatform eq "HKBCP" ) {
126
        $EOS_KERNEL =  "EOSM68K";
127
        $EOS_PROD   =  "HKBCP";
128
        $EOS_FAM    =  "HKPERTH1";
129
        $EOS_CPU    =  "M341";
130
    }
131
 
132
    #... NGBCP          (HK/New Generation Bus Card Processor)
133
    #
134
    AddFlags( 'NGBCP',          '-DPERTH', '-DM68K', '-DEOS_M68K' );
135
    if ( $ScmPlatform eq "NGBCP" ) {
136
        $EOS_KERNEL =  "EOSM68K";
137
        $EOS_PROD   =  "NGBCP";
138
        $EOS_FAM    =  "HKPERTH1";
139
        $EOS_CPU    =  "M341";
140
        $EOS_CPU2   =  "M340";          # Supports M341/M340 env ...
141
    }
142
 
143
    #... HKGAK          (HK/Gate Adaption Kit)
144
    #
145
    AddFlags( 'HKGAK',          '-DMELBOURNE', '-DM68K', '-DEOS_M68K' );
146
    if ( $ScmPlatform eq "HKGAK" ) {
147
        $EOS_KERNEL =  "CMOS68K";
148
        $EOS_PROD   =  "HKGAK";
149
        $EOS_FAM    =  "HKGMP1";
150
        $EOS_CPU    =  "M341";
151
    }
152
 
153
    #... HKAVM          (HK/Add Value Machine - Watcom)
154
    #
155
    AddFlags( 'HKAVM',          '-DMELBOURNE', '-DEOS_I86' );
156
    if ( $ScmPlatform eq "HKAVM" ) {
157
        $EOS_KERNEL =  "EOSP386";
158
        $EOS_PROD   =  "HKAVM";
159
        $EOS_FAM    =  "HK386PC";
160
        $EOS_CPU    =  "P386";
161
    }
162
 
163
    #... HKAVM2          (HK/Add Value Machine - Paradigm)
164
    #
165
    AddFlags( 'HKAVM2',         '-DMELBOURNE', '-DEOS_I86' );
166
    if ( $ScmPlatform eq "HKAVM2") {
167
        $EOS_KERNEL =  "EETP386";
168
        $EOS_PROD   =  "HKAVM2";
169
        $EOS_FAM    =  "HK386PC";
170
        $EOS_CPU    =  "P386";
171
    }
172
 
173
    #... HKPCA           (HK/Portable Card Reader)
174
    #
175
    AddFlags( 'HKPCA',          '-DMELBOURNE', '-DM68K', '-DEOS_M68K' );
176
    if ( $ScmPlatform eq "HKPCA") {
177
        $EOS_KERNEL =  "CMOS68K";
178
        $EOS_PROD   =  "HKPCA";
179
        $EOS_FAM    =  "HKPCA";
180
        $EOS_CPU    =  "M332";
181
    }
182
 
183
    #... GMPCA           (GMPTE/Portable Card Reader)
184
    #
185
    AddFlags( 'GMPCA',          '-DMELBOURNE', '-DM68K', '-DEOS_M68K' );
186
    if ( $ScmPlatform eq "GMPCA") 
187
    {
188
        $EOS_KERNEL =  "CMOS68K";
189
        $EOS_PROD   =  "GMPCA";
190
        $EOS_FAM    =  "GMPCA";
191
        $EOS_CPU    =  "M332";
192
    }
193
 
194
    #... EOS products
195
    #
196
    $ScmTargetMach = $EOS_CPU;                  # Target machine
197
 
198
    if ( $EOS_KERNEL eq "" )
199
    {
200
        PlatformDefine( "#################################################");
201
        PlatformDefine( "# Building EOS kernel" );
202
        PlatformDefine( "#" );
203
        AddFlags( '*',  "-D$EOS_CPU" );
204
        AddFlags( '*',  "-DEOS_CPU=$EOS_CPU" );
205
        AddFlags( '*',  "-DEOS_$EOS_CPU" );
206
        AddDir( '*',    "$EOS_CPU", '--Local', '--NoWarn' );
207
    }
208
    else
209
    {
210
        PlatformDefine( "#################################################");
211
        PlatformDefine( "# Building an EOS based application" );
212
        PlatformDefine( "#" );
213
        PlatformDefine( "EOS_KERNEL     = $EOS_KERNEL" );
214
        PlatformDefine( "EOS_CPU        = $EOS_CPU" );
215
        PlatformDefine( "EOS_CPU2       = $EOS_CPU2" )
216
            if ( "$EOS_CPU2" ne "" );
217
        PlatformDefine( "EOS_PROD       = $EOS_PROD" );
218
        PlatformDefine( "EOS_FAM        = $EOS_FAM" );
219
        PlatformDefine( "" );
220
 
221
    #.. Order of directory search
222
    #       CPU, CPU2, PROD, then FAMILY ...
223
    #
224
        AddFlags( '*',  "-DEOS_CPU=$EOS_CPU" );
225
        AddFlags( '*',  "-DEOS_$EOS_CPU" );
226
        AddDir( '*',    "$EOS_CPU", '--Local', '--NoWarn' );
227
 
228
        if ( "$EOS_CPU2" ne "" ) {
229
            AddFlags( '*',  "-DEOS_CPU2=$EOS_CPU2" );
230
            AddFlags( '*',  "-DEOS_$EOS_CPU2" );
231
            AddDir( '*',    "$EOS_CPU2", '--Local', '--NoWarn' );
232
        }
233
 
234
        AddFlags( '*',  "-DEOS_PROD=$EOS_PROD" );
235
        AddFlags( '*',  "-DEOS_$EOS_PROD" );
236
        AddDir( '*',    "$EOS_PROD", '--Local', '--NoWarn' );
237
 
238
        AddFlags( '*',  "-DEOS_FAM=$EOS_FAM" );
239
        if ( "$EOS_PROD" ne "$EOS_FAM" ) {
240
            AddFlags( '*',  "-DEOS_$EOS_FAM" );
241
            AddDir( '*',    "$EOS_FAM", '--Local', '--NoWarn' );
242
        }
243
    }
244
 
245
#.. AMX requires
246
#
247
    PlatformRequire( "amx" );
248
}
249
 
250
 
251
##############################################################################
252
#   EosLink( $name, $eos, \@objs, \@libraries )
253
#       Build the rules required to link an EOS application
254
#
255
#  Returns:
256
#       Appends additional objects and libraries required to build
257
#       an EOS based application.
258
#....
259
 
260
sub EosLink
261
{
262
    my( $name, $eos, $pObjs, $pLibs ) = @_;
263
    my( $nettype );
264
 
265
#.. Startup code
266
#
267
    if ($eos & $EOS_ROM) {                      # BOOTROM
268
      if ($ScmToolset eq "wc386") {
269
        @$pLibs = ( "eosbc"."\$(SCM_TYPE)", @$pLibs );
270
      }
271
      elsif ( $ScmPlatform eq "HKPCA")
272
      {
273
        @$pLibs = ( "eosbc"."\$(SCM_TYPE)", @$pLibs );
274
      } else {
275
        if ($eos & $EOS_BIN) {
276
          @$pLibs = ( "eosbcP", @$pLibs );              # Download image
277
        } else {
278
          @$pLibs = ( "eosbcD", @$pLibs );              # Powerscope
279
        }
280
      }
281
    } else {                                    # Application
282
      if ($ScmToolset eq "wc386") {
283
        @$pLibs = ( "eosas"."\$(SCM_TYPE)", @$pLibs );
284
      }
285
      elsif ( $ScmPlatform eq "HKPCA")
286
      {
287
        @$pLibs = ( "eosas"."\$(SCM_TYPE)", @$pLibs );
288
      } else {
289
        if ($eos & $EOS_BIN) {
290
          @$pLibs = ( "eosasP", @$pLibs );              # Download image
291
        } else {
292
          @$pLibs = ( "eosasD", @$pLibs );              # Powerscope
293
        }
294
      }
295
    }
296
 
297
#.. KDB
298
#
299
    if ($eos & $EOS_KDB) {
300
        push( @$pLibs, "eoskdb" . "\$(SCM_TYPE)" );     # KDB
301
    } else {
302
        push( @$pLibs, "eoskdbx" . "\$(SCM_TYPE)" );    # KDB dummy ...
303
    }
304
 
305
#.. Application interface
306
#
307
    if ($ScmPlatform ne "HKAVM") {
308
        push( @$pLibs, "eoswin"  . "\$(SCM_TYPE)" );    # Window Manager
309
    }
310
    push( @$pLibs, "eosfm"   . "\$(SCM_TYPE)" );        # Font Manager
311
    push( @$pLibs, "eosfnt"  . "\$(SCM_TYPE)" );        # Fonts
312
    push( @$pLibs, "eosrm"   . "\$(SCM_TYPE)" );        # Resource Manager
313
    push( @$pLibs, "eoslog"  . "\$(SCM_TYPE)" );        # Syslog
314
 
315
#.. EOS Kernel
316
#
317
    if (($eos & $EOS_EXT) || ($eos & $EOS_KDB)) {
318
        push( @$pLibs, "eosesh"  . "\$(SCM_TYPE)" );    # Command shell
319
        push( @$pLibs, "eosstdx" . "\$(SCM_TYPE)" );    # Standard library
320
    } else {
321
        push( @$pLibs, "eosstd"  . "\$(SCM_TYPE)" );    # Standard library
322
    }
323
    push( @$pLibs,  "eosfs"   . "\$(SCM_TYPE)" );       # File system
324
    push( @$pLibs,  "eosdm"   . "\$(SCM_TYPE)" );       # Device Manager
325
    push( @$pLibs,  "eosmsg"  . "\$(SCM_TYPE)" );       # Messaging
326
    push( @$pLibs,  "eosmem"  . "\$(SCM_TYPE)" );       # Memory
327
    push( @$pLibs,  "eosts"   . "\$(SCM_TYPE)" );       # Task
328
 
329
#.. Target dependent
330
#
331
    push( @$pLibs,  "eostm"   . "\$(SCM_TYPE)" );       # Time
332
    push( @$pLibs,  "eoswd"   . "\$(SCM_TYPE)" );       # Watchdog
333
    push( @$pLibs,  "eoshal"  . "\$(SCM_TYPE)" );       # H/W abstraction
334
 
335
#.. Network
336
#
337
    $nettype = "\$(SCM_TYPE)";                          # default
338
    $nettype = "P"                                      # production
339
        if ($eos & $NET_PROD);
340
 
341
    if ($eos & $_NETKERNEL) {
342
        push( @$pLibs, "eosrpc" . $nettype );           # RPC
343
        push( @$pLibs, "eosnet" . $nettype );           # Network kernel
344
        if ($eos & $NET_UDP) {
345
            if ($eos & $NET_ROUTER) {                   # UDP only
346
                push( @$pLibs, "eosudpx" . $nettype );
347
            } else {
348
                push( @$pLibs, "eosudp" . $nettype );
349
            }
350
        } elsif ($eos & $NET_TCP) {                     # TCP/UDP
351
            if ($eos & $NET_ROUTER) {
352
                push( @$pLibs, "eostcpx" . $nettype );
353
            } else {
354
                push( @$pLibs, "eostcp" . $nettype );
355
            }
356
        }
357
    }
358
 
359
#.. Drivers (generic)
360
#
361
    if ( $ScmPlatform eq "HKDDU" || $ScmPlatform eq "HKBCP" ||
362
            $ScmPlatform eq "HKMPR" || 
363
         $ScmPlatform eq "HKPCA" || $ScmPlatform eq "GMPCA" )
364
    {
365
        push( @$pLibs, "eosdvff" . "\$(SCM_TYPE)" );    # Flash file system
366
    }
367
 
368
 
369
    if ( $ScmPlatform eq "HK386PC" || $ScmPlatform eq "HKAVM" )
370
    {
371
        push( @$pLibs, "eosdvdf" . "\$(SCM_TYPE)" );    # DOS/FS
372
    }
373
 
374
    if ( $ScmPlatform eq "HKAVM2" )
375
    {
376
        push( @$pLibs, "eosbsd"  . "\$(SCM_TYPE)" );    # BSD subsystem
377
        push( @$pLibs, "eosdafs" . "\$(SCM_TYPE)" );    # AMX/FS
378
    }
379
 
380
    push( @$pLibs, "eosdvtm" . "\$(SCM_TYPE)" );        # Timer
381
    push( @$pLibs, "eosdvrc" . "\$(SCM_TYPE)" );        # Runtime clock
382
    push( @$pLibs, "eosdvwd" . "\$(SCM_TYPE)" );        # Watchdog
383
 
384
#.. EOS standard drivers,
385
#       XXX - The follow should be defined within the platform definitions
386
#
387
    if ( $ScmPlatform eq "HK386PC" )
388
    {
389
        push( @$pLibs, "eosdvut" . "\$(SCM_TYPE)" );    # Uart
390
        push( @$pLibs, "eosdvad" . "\$(SCM_TYPE)" );    # Audio
391
    }
392
    elsif ( $ScmPlatform eq "HKAVM" || $ScmPlatform eq "HKAVM2" )
393
    {
394
        push( @$pLibs, "eosdvsc" . "\$(SCM_TYPE)" );    # Sony CSC
395
        push( @$pLibs, "eosdvut" . "\$(SCM_TYPE)" );    # Uart
396
        push( @$pLibs, "eosdvad" . "\$(SCM_TYPE)" );    # Audio
397
        push( @$pLibs, "eosbsdv" . "\$(SCM_TYPE)" );    # BSD driver (audio & LPT)
398
        push( @$pLibs, "eosdvkb" . "\$(SCM_TYPE)" );	  # keyboard
399
        push( @$pLibs, "svgalib" . "\$(SCM_TYPE)" );    # SVGA Library
400
        push( @$pLibs, "eosdvgd" . "\$(SCM_TYPE)" );    # VGA
401
    }
402
    elsif ( $ScmPlatform eq "HKMPR" )
403
    {
404
        push( @$pLibs, "eosdvfl" . "\$(SCM_TYPE)" );    # Flash
405
        push( @$pLibs, "eosdvsc" . "\$(SCM_TYPE)" );    # Sony CSC
406
        push( @$pLibs, "eosdvut" . "\$(SCM_TYPE)" );    # Uart
407
        push( @$pLibs, "eosdvdd" . "\$(SCM_TYPE)" );    # Display
408
        push( @$pLibs, "eosdvad" . "\$(SCM_TYPE)" );    # Audio
409
        push( @$pLibs, "eosdvfr" . "\$(SCM_TYPE)" );    # FRAM
410
        push( @$pLibs, "eosdio"  . "\$(SCM_TYPE)" );    # DIO
411
    }
412
    elsif ( $ScmPlatform eq "HKDDU" || $ScmPlatform eq "NGDDU" )
413
    {
414
        push( @$pLibs, "eosdvfl" . "\$(SCM_TYPE)" );    # Flash
415
        push( @$pLibs, "eosdvkb" . "\$(SCM_TYPE)" );    # Keyboard
416
        push( @$pLibs, "eosdvut" . "\$(SCM_TYPE)" );    # Uart
417
        push( @$pLibs, "eosdvdd" . "\$(SCM_TYPE)" );    # Display
418
        push( @$pLibs, "eosdvad" . "\$(SCM_TYPE)" );    # Audio
419
        push( @$pLibs, "eosdvfr" . "\$(SCM_TYPE)" );    # FRAM
420
        push( @$pLibs, "eosdio"  . "\$(SCM_TYPE)" );    # DIO
421
    }
422
    elsif ( $ScmPlatform eq "HKBCP" || $ScmPlatform eq "NGBCP" )
423
    {
424
        push( @$pLibs, "eosdvfl" . "\$(SCM_TYPE)" );    # Flash
425
        push( @$pLibs, "eosdvsc" . "\$(SCM_TYPE)" );    # Sony CSC
426
        push( @$pLibs, "eosdvut" . "\$(SCM_TYPE)" );    # Uart
427
        push( @$pLibs, "eosdvdd" . "\$(SCM_TYPE)" );    # Display
428
        push( @$pLibs, "eosdvad" . "\$(SCM_TYPE)" );    # Audio
429
        push( @$pLibs, "eosdvfr" . "\$(SCM_TYPE)" );    # FRAM
430
        push( @$pLibs, "eosdio"  . "\$(SCM_TYPE)" );    # DIO
431
    }
432
    elsif ( $ScmPlatform eq "HKPCA" )
433
    {     
434
        push( @$pLibs, "eosdvfl" . "\$(SCM_TYPE)" );    # Flash
435
        push( @$pLibs, "eosdvsc" . "\$(SCM_TYPE)" );    # Sony CSC
436
        push( @$pLibs, "eosdvut" . "\$(SCM_TYPE)" );    # Uart
437
        push( @$pLibs, "eosdvdd" . "\$(SCM_TYPE)" );    # Display
438
        push( @$pLibs, "eosdvad" . "\$(SCM_TYPE)" );    # Audio
439
        push( @$pLibs, "eosdvfr" . "\$(SCM_TYPE)" );    # FRAM
440
    }
441
    elsif ( $ScmPlatform eq "GMPCA" )
442
    {
443
#       push( @$pLibs, "eosdvfl" . "\$(SCM_TYPE)" );    # Flash
444
#       push( @$pLibs, "eosdvut" . "\$(SCM_TYPE)" );    # Uart
445
        push( @$pLibs, "eosdvdd" . "\$(SCM_TYPE)" );    # Display
446
        push( @$pLibs, "eosdvad" . "\$(SCM_TYPE)" );    # Audio
447
#       push( @$pLibs, "eosdvfr" . "\$(SCM_TYPE)" );    # FRAM
448
    }
449
 
450
    if ($eos & $_NETKERNEL) {
451
        push( @$pLibs, "eosdvnt" . $nettype  );         # Network
452
    }
453
}
454